On Mon, Dec 20, 2021 at 02:01:05PM +0530, Gyan Doshi wrote: > Very high stts sample deltas may occasionally be intended but usually > they are written in error or used to store a negative value for dts correction > when treated as signed 32-bit integers. > > This option lets the user set an upper limit, beyond which the delta is clamped to 1. > Values greater than the limit if negative when cast to int32 are used to adjust onward dts. > > Unit is the track time scale. Default is UINT_MAX - 48000*10 which > allows upto a 10 second dts correction for 48 kHz audio streams while > accommodating 99.9% of uint32 range. > --- > > v2 changes: > > mp4-negative-stts-problem.mp4 plays in sync with the default value > chosen. > stts adjustment shifted to mov_read_stts so that any downstream code > that references raw stts does not have to contend with possibly changed > stts values. > > libavformat/isom.h | 1 + > libavformat/mov.c | 64 +++++++++++++++++++++++++++------------------- > 2 files changed, 39 insertions(+), 26 deletions(-) Thanks for looking into this, this patch seems to add another bug though which is the newly added loop. Its a few million times too slow. A sample file which takes a fraction of a second before has not finished demuxing after an hour ill mail you the sample privatly [...] > + int32_t delta_magnitude = *((int32_t *)&sample_duration); a plain cast should be fine with no pointers [...] thx -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Never trust a computer, one day, it may think you are the virus. -- Compn