mirror of https://git.ffmpeg.org/ffmpeg.git
avformat/mov: fix missing extra data updating
The stsc_index is checked and updated for the next sample. If the next sample needs to update stsd_index and stsc_index, then only stsc_index is updated, which leads to a missing AV_PKT_DATA_NEW_EXTRADATA. For example, the sample in the second chunk needs to update both. entry[0] first_chunk = 1 samples_per_chunk = 3 sample_description_index = 1 entry[1] first_chunk = 2 samples_per_chunk = 1 sample_description_index = 2 entry[2] first_chunk = 3 samples_per_chunk = 8 sample_description_index = 2 The fix is simple: first check and update stsd_index for current sample, then check and update stsc_index for the next. Signed-off-by: Zhao Zhili <zhilizhao@tencent.com>
This commit is contained in:
parent
79286d3eb6
commit
d114f064c6
|
@ -8745,20 +8745,20 @@ static int mov_read_packet(AVFormatContext *s, AVPacket *pkt)
|
|||
|
||||
/* Multiple stsd handling. */
|
||||
if (sc->stsc_data) {
|
||||
/* Keep track of the stsc index for the given sample, then check
|
||||
* if the stsd index is different from the last used one. */
|
||||
if (sc->stsc_data[sc->stsc_index].id > 0 &&
|
||||
sc->stsc_data[sc->stsc_index].id - 1 < sc->stsd_count &&
|
||||
sc->stsc_data[sc->stsc_index].id - 1 != sc->last_stsd_index) {
|
||||
ret = mov_change_extradata(sc, pkt);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Update the stsc index for the next sample */
|
||||
sc->stsc_sample++;
|
||||
if (mov_stsc_index_valid(sc->stsc_index, sc->stsc_count) &&
|
||||
mov_get_stsc_samples(sc, sc->stsc_index) == sc->stsc_sample) {
|
||||
sc->stsc_index++;
|
||||
sc->stsc_sample = 0;
|
||||
/* Do not check indexes after a switch. */
|
||||
} else if (sc->stsc_data[sc->stsc_index].id > 0 &&
|
||||
sc->stsc_data[sc->stsc_index].id - 1 < sc->stsd_count &&
|
||||
sc->stsc_data[sc->stsc_index].id - 1 != sc->last_stsd_index) {
|
||||
ret = mov_change_extradata(sc, pkt);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue