On 2023-01-11 01:40 am, Michael Niedermayer wrote:
On Tue, Jan 03, 2023 at 03:52:17PM +0530, Gyan Doshi wrote:
At present, the offset for discontinuity adjustment is applied per-file but
the check for discontinuity is intra-stream so the same discontinuity when
seen in multiple streams with copyts, leads to compounded adjustment of the
discontinuity offset. This introduces gaps in streams, leading to loss of sync
or even de facto loss of stream.

The ts_offset_discont parameter is transferred to InputStream and adjusted
based on intra-stream gaps.
---
Here's a simulated example to demonstrate the issue:
1) generate input
ffmpeg -f lavfi -i nullsrc=s=32x32:r=1,format=gray -f lavfi -i 
anullsrc=cl=mono:r=8000 -c:v libx264 -preset superfast -bf 0 -crf 50 -c:a aac 
-b:a 64k -muxpreload 0 -muxdelay 0 -output_ts_offset 95000 -t 100000 
src-100000s.ts

2) demo
ffmpeg -copyts -i "src-100000.ts" -vf "showinfo=checksum=0" -af "ashowinfo" -f 
null - -report

==Before patch==

timestamp discontinuity for stream #0:1 (id=257, type=audio): -95443717689, new 
offset= 95443717689
timestamp discontinuity for stream #0:0 (id=256, type=video): -95443717689, new 
offset= 190887435378

[Parsed_ashowinfo_0 @ 000002700af98800] n:0 pts:759998976 pts_time:94999.9
[Parsed_ashowinfo_0 @ 000002700af98800] n:1 pts:760000000 pts_time:95000
  ...
[Parsed_ashowinfo_0 @ 000002700af98800] n:745202 pts:1523085824 pts_time:190386
[Parsed_ashowinfo_0 @ 000002700af98800] n:745203 pts:1523086848 pts_time:190386
[Parsed_ashowinfo_0 @ 000002700af98800] n:745204 pts:2286637614 pts_time:285830
[Parsed_ashowinfo_0 @ 000002700af98800] n:745205 pts:2286638638 pts_time:285830


[Parsed_showinfo_0 @ 000002700ec34700] n:   0 pts:8550000000 pts_time:95000
[Parsed_showinfo_0 @ 000002700ec34700] n:   1 pts:8550090000 pts_time:95001
  ...
[Parsed_showinfo_0 @ 000002700ec34700] n:95380 pts:17134200000 pts_time:190380
[Parsed_showinfo_0 @ 000002700ec34700] n:95381 pts:17134290000 pts_time:190381
[Parsed_showinfo_0 @ 000002700ec34700] n:95382 pts:25724314592 pts_time:285826
[Parsed_showinfo_0 @ 000002700ec34700] n:95383 pts:25724404592 pts_time:285827

==After patch==

timestamp discontinuity for stream #0:1 (id=257, type=audio): -95443717689, new 
stream offset= 95443717689
timestamp discontinuity for stream #0:0 (id=256, type=video): -95443717689, new 
stream offset= 95443717689

[Parsed_ashowinfo_0 @ 0000023c773c8880] n:0 pts:759998976 pts_time:94999.9
[Parsed_ashowinfo_0 @ 0000023c773c8880] n:1 pts:760000000 pts_time:95000
  ...
[Parsed_ashowinfo_0 @ 0000023c773c8880] n:745202 pts:1523085824 pts_time:190386
[Parsed_ashowinfo_0 @ 0000023c773c8880] n:745203 pts:1523086848 pts_time:190386
[Parsed_ashowinfo_0 @ 0000023c773c8880] n:745204 pts:1523087872 pts_time:190386
[Parsed_ashowinfo_0 @ 0000023c773c8880] n:745205 pts:1523088896 pts_time:190386


[Parsed_showinfo_0 @ 0000023c795d07c0] n:   0 pts:8550000000 pts_time:95000
[Parsed_showinfo_0 @ 0000023c795d07c0] n:   1 pts:8550090000 pts_time:95001
  ...
[Parsed_showinfo_0 @ 0000023c795d07c0] n:95380 pts:17134200000 pts_time:190380
[Parsed_showinfo_0 @ 0000023c795d07c0] n:95381 pts:17134290000 pts_time:190381
[Parsed_showinfo_0 @ 0000023c795d07c0] n:95382 pts:17134380000 pts_time:190382
[Parsed_showinfo_0 @ 0000023c795d07c0] n:95383 pts:17134470000 pts_time:190383



  fftools/ffmpeg.c | 12 ++++++------
  fftools/ffmpeg.h |  8 ++++----
  2 files changed, 10 insertions(+), 10 deletions(-)
I havent looked into this but i have a slightly ungood feeling about this
change
Yes, this is a hack. Ideal is to track and sync discontinuities at both file and stream level to avoid compound adjustments.
Let me rework this.

Regards,
Gyan

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to