demux: mp4: read one sample each time for opus
There is a file which has two mp4 sample per chunk. The master branch has no problem since i_bytes_per_frame
is zero.
if( i_samples_per_frame && i_bytes_per_frame )
{
/* GSM, ADPCM, */
if( i_samples_per_frame > 64 &&
i_samples_per_frame > i_bytes_per_frame )
{
*pi_nb_samples = i_samples_per_frame;
i_size = i_bytes_per_frame;
}
else
{
/* Regular cases */
uint32_t i_frames = __MAX(i_max_v0_samples / i_samples_per_frame, 1);
*pi_nb_samples = i_frames * i_samples_per_frame;
i_size = i_frames * i_bytes_per_frame;
}
}
else
{
*pi_nb_samples = 1;
return p_track->i_sample_size;
}
It's the 3.0 branch has real problem:
[00007fe64d53e2a0] main audio output warning: playback too early (-40033): down-sampling
[00007fe64d53e2a0] main audio output warning: timing screwed (drift: -100012 us): stopping resampling
[00007fe64d53e2a0] main audio output warning: playback way too early (-120014): playing silence
[00007fe64d53e2a0] main audio output debug: inserting 5760 zeroes
[00007fe64d53e2a0] main audio output warning: playback too early (-59862): down-sampling
[00007fe64d53e2a0] main audio output warning: timing screwed (drift: -119862 us): stopping resampling
[00007fe64d53e2a0] main audio output warning: playback way too early (-139862): playing silence
[00007fe64d53e2a0] main audio output debug: inserting 6713 zeroes
...
MP4_TrackGetReadSize()
in master branch and 3.0 branch have a lot of small differences, the patch is for minimum modification.