mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2026-01-12 12:12:24 +01:00
45 lines
2.4 KiB
Diff
45 lines
2.4 KiB
Diff
https://trac.ffmpeg.org/ticket/3175
|
|
|
|
This patch is slightly cleaned up version of:
|
|
http://lists.ffmpeg.org/pipermail/ffmpeg-devel/2014-May/157791.html
|
|
|
|
diff -ru ffmpeg-2.3.4.orig/libavformat/flvenc.c ffmpeg-2.3.4/libavformat/flvenc.c
|
|
--- ffmpeg-2.3.4.orig/libavformat/flvenc.c 2014-10-03 04:49:20.000000000 -0300
|
|
+++ ffmpeg-2.3.4/libavformat/flvenc.c 2014-12-04 11:37:23.286586875 -0200
|
|
@@ -414,11 +414,35 @@
|
|
if (enc->codec_id == AV_CODEC_ID_AAC) {
|
|
avio_w8(pb, get_audio_flags(s, enc));
|
|
avio_w8(pb, 0); // AAC sequence header
|
|
+ if (enc->extradata_size < 2) {
|
|
+ static const int mpeg4audio_sample_rates[16] = {
|
|
+ 96000, 88200, 64000, 48000, 44100, 32000,
|
|
+ 24000, 22050, 16000, 12000, 11025, 8000, 7350
|
|
+ };
|
|
+ int sample_rate_index;
|
|
+
|
|
+ av_log(s, AV_LOG_WARNING, "AAC extradata empty!.\n");
|
|
+ for (sample_rate_index = 0; sample_rate_index < 16; sample_rate_index++)
|
|
+ if (enc->sample_rate == mpeg4audio_sample_rates[sample_rate_index])
|
|
+ break;
|
|
+
|
|
+ if (sample_rate_index < 16 && (enc->extradata = av_mallocz(2)) != NULL) {
|
|
+ enc->extradata_size = 2;
|
|
+ enc->extradata[0] = 0x10 | (sample_rate_index>>1);
|
|
+ enc->extradata[1] = (sample_rate_index & 0x01)<<7 | enc->channels <<3;
|
|
+ }
|
|
+ }
|
|
+ if (enc->extradata_size >= 2)
|
|
+ av_log(s, AV_LOG_DEBUG, "AAC extradata size %d: %02x:%02x.\n", enc->extradata_size, enc->extradata[0], enc->extradata[1]);
|
|
avio_write(pb, enc->extradata, enc->extradata_size);
|
|
} else {
|
|
avio_w8(pb, enc->codec_tag | FLV_FRAME_KEY); // flags
|
|
avio_w8(pb, 0); // AVC sequence header
|
|
avio_wb24(pb, 0); // composition time
|
|
+ if(enc->extradata_size>=2)
|
|
+ av_log(s, AV_LOG_DEBUG, "Video extradata size %d: %02x:%02x.\n", enc->extradata_size, enc->extradata[0], enc->extradata[1]);
|
|
+ else
|
|
+ av_log(s, AV_LOG_WARNING, "Video extradata empty!.\n");
|
|
ff_isom_write_avcc(pb, enc->extradata, enc->extradata_size);
|
|
}
|
|
data_size = avio_tell(pb) - pos;
|