diff options
author | Hendrik Leppkes <h.leppkes@gmail.com> | 2013-05-24 21:30:31 +0400 |
---|---|---|
committer | Hendrik Leppkes <h.leppkes@gmail.com> | 2013-05-24 21:30:31 +0400 |
commit | 0c7ffec196bb764478f40a23ab5fc16cd17932d7 (patch) | |
tree | 2573370bc4af3a12cba64428b8f70d623649bdad /decoder | |
parent | 62a2e59c39875b5853fe75047fc1e0881157d010 (diff) |
cuvid: activate double-rate deint for formats without header timing info as well
Diffstat (limited to 'decoder')
-rw-r--r-- | decoder/LAVVideo/decoders/cuvid.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/decoder/LAVVideo/decoders/cuvid.cpp b/decoder/LAVVideo/decoders/cuvid.cpp index fddb354f..8bfe2e2a 100644 --- a/decoder/LAVVideo/decoders/cuvid.cpp +++ b/decoder/LAVVideo/decoders/cuvid.cpp @@ -792,12 +792,11 @@ int CUDAAPI CDecCuvid::HandleVideoSequence(void *obj, CUVIDEOFORMAT *cuvidfmt) } filter->m_bInterlaced = !cuvidfmt->progressive_sequence; - filter->m_bDoubleRateDeint = FALSE; + filter->m_bDoubleRateDeint = filter->m_bInterlaced && (filter->m_pSettings->GetHWAccelDeintOutput() == DeintOutput_FramePerField) && (filter->m_VideoDecoderInfo.DeinterlaceMode != cudaVideoDeinterlaceMode_Weave) && !(filter->m_pSettings->GetDeinterlacingMode() == DeintMode_Disable); if (filter->m_bInterlaced && cuvidfmt->frame_rate.numerator && cuvidfmt->frame_rate.denominator) { double dFrameTime = 10000000.0 / ((double)cuvidfmt->frame_rate.numerator / cuvidfmt->frame_rate.denominator); - if (filter->m_pSettings->GetHWAccelDeintOutput() == DeintOutput_FramePerField && filter->m_VideoDecoderInfo.DeinterlaceMode != cudaVideoDeinterlaceMode_Weave && !(filter->m_pSettings->GetDeinterlacingMode() == DeintMode_Disable) && (int)(dFrameTime / 10000.0) != 41) { + if (filter->m_bDoubleRateDeint && (int)(dFrameTime / 10000.0) == 41) { filter->m_bDoubleRateDeint = TRUE; - dFrameTime /= 2.0; } if (cuvidfmt->codec != cudaVideoCodec_MPEG4) filter->m_rtAvgTimePerFrame = REFERENCE_TIME(dFrameTime + 0.5); @@ -806,6 +805,11 @@ int CUDAAPI CDecCuvid::HandleVideoSequence(void *obj, CUVIDEOFORMAT *cuvidfmt) } else { filter->m_rtAvgTimePerFrame = AV_NOPTS_VALUE; } + + // Adjust frame time for double-rate deint + if (filter->m_bDoubleRateDeint && filter->m_rtAvgTimePerFrame != AV_NOPTS_VALUE) + filter->m_rtAvgTimePerFrame /= 2; + filter->m_VideoFormat = *cuvidfmt; if (cuvidfmt->chroma_format != cudaVideoChromaFormat_420) { |