[FFmpeg-devel] [PATCH v2] ffmpeg: allow full range of dts_delta_threshold

Gyan Doshi ffmpeg at gyani.pro
Wed Apr 15 14:59:06 EEST 2020



On 15-04-2020 05:03 pm, Michael Niedermayer wrote:
> On Wed, Apr 15, 2020 at 10:55:47AM +0530, Gyan Doshi wrote:
>>
>> On 15-04-2020 01:33 am, Michael Niedermayer wrote:
>>> On Tue, Apr 14, 2020 at 02:48:47PM +0530, Gyan Doshi wrote:
>>>> For inputs from demuxers with AVFMT_TS_DISCONT flag,
>>>> the existing condition,
>>>>
>>>>    delta < -1LL*dts_delta_threshold*AV_TIME_BASE
>>>>
>>>> is rendered superflous due to the fixed threshold in
>>>>
>>>> pkt_dts + AV_TIME_BASE/10 < FFMAX(ist->pts, ist->dts)
>>>>
>>>> This prevents users from setting a high threshold to
>>>> avoid discontinuity correction due to errant timestamps.
>>>>
>>>> Now, the maximum of the two thresholds is used.
>>>>
>>>> fate-mpeg4-resolution-change call changed to preserve existing
>>>> timestamp correction by ffmpeg.c
>>>> ---
>>>> Tested with multiple satellite MPEG-TS inputs.
>>>>
>>>>   fftools/ffmpeg.c     | 2 +-
>>>>   tests/fate/mpeg4.mak | 2 +-
>>>>   2 files changed, 2 insertions(+), 2 deletions(-)
>>> breaks:
>>> ./ffmpeg -i 'concat:angels.mpg|angels.mpg'  -vsync 0  file.avi
>>>
>>> ...
>>> frame=   24 fps=0.0 q=12.5 Lsize=     215kB time=00:00:07.50 bitrate= 234.7kbits/s speed=75.5x
>>> video:84kB audio:110kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 10.697786%
>>>
>>> vs.
>>>
>>> ...
>>> [avi @ 0x5601caccc180] Non-monotonous DTS in output stream 0:1; previous: 219, current: 86; changing to 220. This may result in incorrect timestamps in the output file.
>>> [avi @ 0x5601caccc180] Non-monotonous DTS in output stream 0:1; previous: 220, current: 87; changing to 221. This may result in incorrect timestamps in the output file.
>>> [avi @ 0x5601caccc180] Non-monotonous DTS in output stream 0:1; previous: 221, current: 88; changing to 222. This may result in incorrect timestamps in the output file.
>>> [avi @ 0x5601caccc180] Non-monotonous DTS in output stream 0:1; previous: 222, current: 89; changing to 223. This may result in incorrect timestamps in the output file.
>>> [avi @ 0x5601caccc180] Non-monotonous DTS in output stream 0:1; previous: 223, current: 90; changing to 224. This may result in incorrect timestamps in the output file.
>>> [avi @ 0x5601caccc180] Non-monotonous DTS in output stream 0:1; previous: 224, current: 91; changing to 225. This may result in incorrect timestamps in the output file.
>>> [mpeg4 @ 0x5601cac87540] Invalid pts (72) <= last (83)
>>> Video encoding failed
>> Yes, if the input includes a mid-stream dts reset of gap less than the
>> default value of dts_delta_threshold then timestamps won't be made
>> continuous. Default value is 10 seconds but till now it wasn't enforced for
>> negative jumps, so your command worked. With this change, user will have to
>> set it manually if they expect smaller jumps.
> Negative jumps should always be a discontinuity more or less.
> What are you trying to fix exactly ?
>
> is this about bitstream errors in the timestamps ?

Yes. This is when there's a backward jump in one of the streams due to 
corruption in the input and that leads to a new ts_offset. This new 
offset when applied to other streams with error-free timestamps leads to 
async as well as muxing errors due to (now) increased interval in the 
muxing queue. dts_delta_threshold (in combination with filtering) should 
allow to prevent these offset adjustments at the cost of filtering out 
or adjusting a few packets, but the existing check prevents that by 
making    'delta < -1LL*dts_delta_threshold*AV_TIME_BASE'    irrelevant  
. With this patch, the user can set a threshold and avoid unwanted 
offset adjustments due to negative jumps.

Gyan


More information about the ffmpeg-devel mailing list