Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mpc-hc/LAVFilters.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHendrik Leppkes <h.leppkes@gmail.com>2013-05-24 21:30:31 +0400
committerHendrik Leppkes <h.leppkes@gmail.com>2013-05-24 21:30:31 +0400
commit0c7ffec196bb764478f40a23ab5fc16cd17932d7 (patch)
tree2573370bc4af3a12cba64428b8f70d623649bdad /decoder
parent62a2e59c39875b5853fe75047fc1e0881157d010 (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.cpp10
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) {