[FFmpeg-devel] [PATCH] avformat/dv: fix timestamps of audio packets in case of dropped corrupt audio frames

Marton Balint cus at passwd.hu
Mon Nov 2 22:42:21 EET 2020



On Mon, 2 Nov 2020, Michael Niedermayer wrote:

>>> Please correct me if iam wrong but
>>> in cases where no audio is missing or damaged, this would also ignore how much
>>> audio is in each packet. So you could have lets say a timestamp difference
>>> of excatly 1 second between 2 packets while their is actually not exactly
>>> 1 second worth of audio samples between them.
>>
>> This is true, by using the frame counter (and the video time base) for
>> audio, we lose some audio packet timestamp precision inherently. However I
>> don't consider this a problem, audio timestamps do not have to be sample
>> accurate, for most formats they are not.
>
>
>> Also it is not practical to keep
>> track of how many samples are there in the packets, for example when you do
>> seeking, obviously you can't read all the audio data before the seek point
>> to get a precise sample accurate timestamp.
>
> Its true that with seeking there is not enough information for sample precisse
> timestamps. But from packet to packet as long as no seek happened there is.

And that timestamp can turn out to be wrong. If the audio clock is running 
at little more than 48 kHz, there will be A-V desync because after some 
time audio and video timestamps for packets coming from the same DV frame 
will diverge significantly.

> My concern was more about something like significant frame to frame
> differences in audio sample numbers.
> Because if some hw or sw generates this we would produce packets of
> identical duration which differ substantially in number of samples and
> that would not be handled well in any scenario that accepted the timestamps
> and durations as exact.

In general, you can't assume that timestamps or packet durations are 
exact. Consider you have a format which stores timestamps and durations in 
miliseconds. Rounding errors will occur. Also, for consumer equipment 
audio and video is rarely locked together, and audio sample rates are 
rarely very precise.

> Maybe this never occurs and in that case your patch should be a good idea
> but if it does happen then some code would be needed to deal with that.
> It is detectable when sample counts do not match what is expected.

Yeah, and we have tools to fix that, like -af aresample=async=1.

> That said, i would consider a fix for #8762 to produce correct audio in
> all cases including wav/pcm/mov/... output and not just when the output
> can store "corrupted"/"sparse" audio.

I think ffmpeg.c should be smarter about it, and be aware if unlocked or 
sparse audio (or audio not starting at the same time as video) is 
supported by certain muxers or not. And if it is not suppoted, then maybe 
-af async=1 or similar should be used automagically.

> Also to me returning the data from the input file which would represent audio
> if it was not corrupt seems to be somehow the "correct" thing to do.
> Maybe this never contains any useful data then it doesnt matter in
> reality but still it feels a bit odd to fix just the timestamps.

I am not strictly against applying your patch, I can accept that for the 
users it might be useful to get the data at the demuxer level and not play 
with async=1, yes, sparse audio requires extra care. I might even be OK 
with changing the default to pass corrupt packets. But this does not 
change the fact that the audio timestamps are currently wrong, because 
they ignore that audio and video from the same DV frame are synced 
together with at most 1/3 frame duration error.

Regards,
Marton


More information about the ffmpeg-devel mailing list