Commit e7e1fbc4 authored by Sasi Inguva's avatar Sasi Inguva Committed by Michael Niedermayer

lavf/movenc.c: Set sgpd and sbgp atoms to represent decoder delay for AAC.

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: 's avatarSasi Inguva <isasi@google.com>
Reviewed-by: 's avatarDerek Buitenhuis <derek.buitenhuis@gmail.com>
Signed-off-by: 's avatarMichael Niedermayer <michael@niedermayer.cc>
parent df884e03
......@@ -2208,14 +2208,16 @@ static int mov_preroll_write_stbl_atoms(AVIOContext *pb, MOVTrack *track)
(AVRational){1, 1000},
(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++) {
int roll_samples_remaining = roll_samples;
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;
}
}
} else {
entries++;
sgpd_entries[entries].count = track->sample_count;
sgpd_entries[entries].roll_distance = 1;
sgpd_entries[entries].group_description_index = ++group;
}
entries++;
if (!group) {
......@@ -2304,7 +2312,7 @@ static int mov_write_stbl_tag(AVFormatContext *s, AVIOContext *pb, MOVMuxContext
if (track->cenc.aes_ctr) {
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);
}
return update_size(pb, pos);
......
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
#tb 0: 1/44100
#media_type 0: audio
......
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 1: 2, 0x00b200a1
#tb 0: 1/90000
......
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 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 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 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 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 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 1171, time nopts, type header atom -
write_data len 728, time 0, type sync atom moof
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment