[FFmpeg-devel] [PATCH] lavf/flvenc: add automatic bitstream filtering
Moritz Barsnick
barsnick at gmx.net
Fri Jan 15 01:18:04 CET 2016
Signed-off-by: Moritz Barsnick <barsnick at gmx.net>
---
libavformat/flvenc.c | 22 +++++++++++++---------
1 file changed, 13 insertions(+), 9 deletions(-)
diff --git a/libavformat/flvenc.c b/libavformat/flvenc.c
index 3925768..8d10ef8 100644
--- a/libavformat/flvenc.c
+++ b/libavformat/flvenc.c
@@ -597,15 +597,6 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt)
if (enc->extradata_size > 0 && *(uint8_t*)enc->extradata != 1)
if ((ret = ff_avc_parse_nal_units_buf(pkt->data, &data, &size)) < 0)
return ret;
- } else if (enc->codec_id == AV_CODEC_ID_AAC && pkt->size > 2 &&
- (AV_RB16(pkt->data) & 0xfff0) == 0xfff0) {
- if (!s->streams[pkt->stream_index]->nb_frames) {
- av_log(s, AV_LOG_ERROR, "Malformed AAC bitstream detected: "
- "use the audio bitstream filter 'aac_adtstoasc' to fix it "
- "('-bsf:a aac_adtstoasc' option with ffmpeg)\n");
- return AVERROR_INVALIDDATA;
- }
- av_log(s, AV_LOG_WARNING, "aac bitstream error\n");
}
/* check Speex packet duration */
@@ -686,6 +677,18 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt)
return pb->error;
}
+static int flv_check_bitstream(struct AVFormatContext *s, const AVPacket *pkt)
+{
+ int ret = 1;
+ AVStream *st = s->streams[pkt->stream_index];
+
+ if (st->codec->codec_id == AV_CODEC_ID_AAC)
+ if (pkt->size > 2 && (AV_RB16(pkt->data) & 0xfff0) == 0xfff0)
+ ret = ff_stream_add_bitstream_filter(st, "aac_adtstoasc", NULL);
+
+ return ret;
+}
+
static const AVOption options[] = {
{ "flvflags", "FLV muxer flags", offsetof(FLVContext, flags), AV_OPT_TYPE_FLAGS, {.i64 = 0}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "flvflags" },
{ "aac_seq_header_detect", "Put AAC sequence header based on stream data", 0, AV_OPT_TYPE_CONST, {.i64 = 1}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "flvflags" },
@@ -710,6 +713,7 @@ AVOutputFormat ff_flv_muxer = {
.write_header = flv_write_header,
.write_packet = flv_write_packet,
.write_trailer = flv_write_trailer,
+ .check_bitstream = flv_check_bitstream,
.codec_tag = (const AVCodecTag* const []) {
flv_video_codec_ids, flv_audio_codec_ids, 0
},
--
2.4.3
More information about the ffmpeg-devel
mailing list