According to https://developer.apple.com/library/content/documentation/QuickTime/QTFF/QTFFAppenG/QTFFAppenG.html and ISO-IEC-14496-12 Section 10.1.1.1 and 10.1.1.3 Signed-off-by: Sasi Inguva <isasi@google.com> Reviewed-by: Derek Buitenhuis <derek.buitenhuis@gmail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>tags/n3.4
| @@ -2208,14 +2208,16 @@ static int mov_preroll_write_stbl_atoms(AVIOContext *pb, MOVTrack *track) | |||||
| (AVRational){1, 1000}, | (AVRational){1, 1000}, | ||||
| (AVRational){1, 48000}); | (AVRational){1, 48000}); | ||||
| if (track->entry) { | |||||
| sgpd_entries = av_malloc_array(track->entry, sizeof(*sgpd_entries)); | |||||
| if (!sgpd_entries) | |||||
| return AVERROR(ENOMEM); | |||||
| } | |||||
| if (!track->entry) | |||||
| return 0; | |||||
| av_assert0(track->par->codec_id == AV_CODEC_ID_OPUS); | |||||
| sgpd_entries = av_malloc_array(track->entry, sizeof(*sgpd_entries)); | |||||
| if (!sgpd_entries) | |||||
| return AVERROR(ENOMEM); | |||||
| av_assert0(track->par->codec_id == AV_CODEC_ID_OPUS || track->par->codec_id == AV_CODEC_ID_AAC); | |||||
| if (track->par->codec_id == AV_CODEC_ID_OPUS) { | |||||
| for (i = 0; i < track->entry; i++) { | for (i = 0; i < track->entry; i++) { | ||||
| int roll_samples_remaining = roll_samples; | int roll_samples_remaining = roll_samples; | ||||
| int distance = 0; | int distance = 0; | ||||
| @@ -2242,6 +2244,12 @@ static int mov_preroll_write_stbl_atoms(AVIOContext *pb, MOVTrack *track) | |||||
| sgpd_entries[entries].group_description_index = distance ? ++group : 0; | sgpd_entries[entries].group_description_index = distance ? ++group : 0; | ||||
| } | } | ||||
| } | } | ||||
| } else { | |||||
| entries++; | |||||
| sgpd_entries[entries].count = track->sample_count; | |||||
| sgpd_entries[entries].roll_distance = 1; | |||||
| sgpd_entries[entries].group_description_index = ++group; | |||||
| } | |||||
| entries++; | entries++; | ||||
| if (!group) { | if (!group) { | ||||
| @@ -2304,7 +2312,7 @@ static int mov_write_stbl_tag(AVFormatContext *s, AVIOContext *pb, MOVMuxContext | |||||
| if (track->cenc.aes_ctr) { | if (track->cenc.aes_ctr) { | ||||
| ff_mov_cenc_write_stbl_atoms(&track->cenc, pb); | ff_mov_cenc_write_stbl_atoms(&track->cenc, pb); | ||||
| } | } | ||||
| if (track->par->codec_id == AV_CODEC_ID_OPUS) { | |||||
| if (track->par->codec_id == AV_CODEC_ID_OPUS || track->par->codec_id == AV_CODEC_ID_AAC) { | |||||
| mov_preroll_write_stbl_atoms(pb, track); | mov_preroll_write_stbl_atoms(pb, track); | ||||
| } | } | ||||
| return update_size(pb, pos); | return update_size(pb, pos); | ||||
| @@ -1,5 +1,5 @@ | |||||
| ef8ce3cbd1d86113e7c991a816086068 *tests/data/fate/adtstoasc_ticket3715.mov | |||||
| 33270 tests/data/fate/adtstoasc_ticket3715.mov | |||||
| 0221e04333e6ac432fa42960502f0d5a *tests/data/fate/adtstoasc_ticket3715.mov | |||||
| 33324 tests/data/fate/adtstoasc_ticket3715.mov | |||||
| #extradata 0: 2, 0x00340022 | #extradata 0: 2, 0x00340022 | ||||
| #tb 0: 1/44100 | #tb 0: 1/44100 | ||||
| #media_type 0: audio | #media_type 0: audio | ||||
| @@ -1,5 +1,5 @@ | |||||
| 6889223644fc560069c8591984175a62 *tests/data/fate/copy-psp.psp | |||||
| 2041379 tests/data/fate/copy-psp.psp | |||||
| cada61453a2483ef8ba1fb82c8bbff25 *tests/data/fate/copy-psp.psp | |||||
| 2041433 tests/data/fate/copy-psp.psp | |||||
| #extradata 0: 51, 0xaf6d1012 | #extradata 0: 51, 0xaf6d1012 | ||||
| #extradata 1: 2, 0x00b200a1 | #extradata 1: 2, 0x00b200a1 | ||||
| #tb 0: 1/90000 | #tb 0: 1/90000 | ||||
| @@ -1,18 +1,18 @@ | |||||
| write_data len 36, time nopts, type header atom ftyp | write_data len 36, time nopts, type header atom ftyp | ||||
| write_data len 2335, time nopts, type header atom - | |||||
| write_data len 2389, time nopts, type header atom - | |||||
| write_data len 788, time 1000000, type sync atom moof | write_data len 788, time 1000000, type sync atom moof | ||||
| write_data len 110, time nopts, type trailer atom - | write_data len 110, time nopts, type trailer atom - | ||||
| 214242e9c7c93171d2f47f5b47776559 3269 non-empty-moov | |||||
| 17a37691eba8b858cf15e60aa9a7dbf7 3323 non-empty-moov | |||||
| write_data len 36, time nopts, type header atom ftyp | write_data len 36, time nopts, type header atom ftyp | ||||
| write_data len 2667, time nopts, type header atom - | |||||
| write_data len 2721, time nopts, type header atom - | |||||
| write_data len 908, time 966667, type sync atom moof | write_data len 908, time 966667, type sync atom moof | ||||
| write_data len 110, time nopts, type trailer atom - | write_data len 110, time nopts, type trailer atom - | ||||
| 44467d568a3cc38d414fd8ed4b2a968f 3721 non-empty-moov-elst | |||||
| 0026ffe059c06c592021f972bf2c5e79 3775 non-empty-moov-elst | |||||
| write_data len 36, time nopts, type header atom ftyp | write_data len 36, time nopts, type header atom ftyp | ||||
| write_data len 2575, time nopts, type header atom - | |||||
| write_data len 2629, time nopts, type header atom - | |||||
| write_data len 908, time 1000000, type sync atom moof | write_data len 908, time 1000000, type sync atom moof | ||||
| write_data len 110, time nopts, type trailer atom - | write_data len 110, time nopts, type trailer atom - | ||||
| de22b98a3885f9b4b83cdd48ff46aeb9 3629 non-empty-moov-no-elst | |||||
| c184e168ac1e5bb3d9c70e580ab6179c 3683 non-empty-moov-no-elst | |||||
| write_data len 20, time nopts, type header atom ftyp | write_data len 20, time nopts, type header atom ftyp | ||||
| write_data len 1171, time nopts, type header atom - | write_data len 1171, time nopts, type header atom - | ||||
| write_data len 728, time 0, type sync atom moof | write_data len 728, time 0, type sync atom moof | ||||