Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: Gyan Doshi <ffmpeg@gyani.pro>
To: ffmpeg-devel@ffmpeg.org
Subject: Re: [FFmpeg-devel] [PATCH] ffmpeg: apply discontinuity adjustment per-stream
Date: Wed, 11 Jan 2023 12:29:40 +0530
Message-ID: <6dc75a11-014b-b72e-135a-b802d2575f52@gyani.pro> (raw)
In-Reply-To: <20230110201018.GA1949656@pb2>



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-request@ffmpeg.org with subject "unsubscribe".

      reply	other threads:[~2023-01-11  7:00 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-03 10:22 Gyan Doshi
2023-01-07  4:20 ` Gyan Doshi
2023-01-10  3:49   ` Gyan Doshi
2023-01-10 11:02 ` Anton Khirnov
2023-01-10 16:02   ` Gyan Doshi
2023-01-10 20:10 ` Michael Niedermayer
2023-01-11  6:59   ` Gyan Doshi [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=6dc75a11-014b-b72e-135a-b802d2575f52@gyani.pro \
    --to=ffmpeg@gyani.pro \
    --cc=ffmpeg-devel@ffmpeg.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git