From patchwork Sat Jun 22 09:04:58 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jun Zhao X-Patchwork-Id: 13673 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 5D59A44941D for ; Sat, 22 Jun 2019 12:13:28 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 33CA968A924; Sat, 22 Jun 2019 12:13:28 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl1-f193.google.com (mail-pl1-f193.google.com [209.85.214.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 07C4068A302 for ; Sat, 22 Jun 2019 12:13:21 +0300 (EEST) Received: by mail-pl1-f193.google.com with SMTP id b7so4158712pls.6 for ; Sat, 22 Jun 2019 02:13:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=LW8L70OE/ED99UaiV6Rl4tJ7WYnVTiCg1Ut9Lb4KqTA=; b=poyy+8iPC81PWdo4xaRkxxbDLyGbLtn2sS6P7I3i46ca25Na7FGjRmaV02s3e0w4LV nVtVPvpqGQBM/Xj6g9Tnqw4ZI/m4+i+1MvIr2tnhadpPzo+txciljB1ju+dv4WqPNA46 IkToyRat8+pNVrGwXzdgrJapdINEwIzClfgTrJbPd++Xit8dt1BB/sGEgkGh/07Ef6sA QmFIQKGrFssVrWewSxB08xqySxVrpWJQDqb/4RbTzFc1AZdgA3orwev6RtDAIG2u3P8B 42bBBDwg+dehv/1AZvDg2yMtRY52HhuZK/vksoiFk0P1nGMTd2fCV6ofUFcXiQ40B758 XlFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=LW8L70OE/ED99UaiV6Rl4tJ7WYnVTiCg1Ut9Lb4KqTA=; b=GkXzUFPtV6ZO6TsiTsgqINDCP3qHlPVjnvwBOnfW6N85tMgNqfkctLBkZAAmOEPHnA WoC66i+CGx7TkVCTGRi6YyXKMtX8KfroXsh1/YWHx9LANhab2bPmYSzky/wUwdKbyBfk 3OM2DUGrMeDhdp3D/cqctg++t+UbB/L65/x7goIrJ6N5IaCrxnHNZ3KSah8lBw0eytpS F5KVcofYoWWXO4nmwHAAgnxylasjGDrWrcBlWqb1Np1SuTUrvgd4RSAsyOhqA6nWPgO1 B5/MMwfM22T5qfw1MSASH8ReIaiRBiEAIu3V2ktFxo8Vp1t8uk0xq0R0Dx1TSrCeI+xz So7w== X-Gm-Message-State: APjAAAXjlvQ+awyhbJyI8n3Lln0AdJgerwXi2ApqNyApVDMvSwB+7TH4 x8M0/qYWx5kOIrggjrZyL5e1rSCY X-Google-Smtp-Source: APXvYqzaYDHEzEjknsJQsILTXvg7WoVqJalqm3jsueY2cfSSXWFe/ST7GFronAWIL9kBhwzoGMFTWQ== X-Received: by 2002:a17:902:8ec3:: with SMTP id x3mr48937714plo.313.1561194302449; Sat, 22 Jun 2019 02:05:02 -0700 (PDT) Received: from localhost.localdomain ([47.90.47.25]) by smtp.gmail.com with ESMTPSA id 133sm5897252pfa.92.2019.06.22.02.05.01 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 22 Jun 2019 02:05:01 -0700 (PDT) From: Jun Zhao To: ffmpeg-devel@ffmpeg.org Date: Sat, 22 Jun 2019 17:04:58 +0800 Message-Id: <1561194298-13590-1-git-send-email-mypopydev@gmail.com> X-Mailer: git-send-email 1.7.1 Subject: [FFmpeg-devel] [PATCH V1] lavf/flvenc: add automatic bitstream filtering X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Jun Zhao MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Jun Zhao add automatic bitstream filtering when mux AAC Signed-off-by: Jun Zhao --- libavformat/flvenc.c | 27 ++++++++++++++++++++++++--- 1 files changed, 24 insertions(+), 3 deletions(-) diff --git a/libavformat/flvenc.c b/libavformat/flvenc.c index e4863f1..fb1dede 100644 --- a/libavformat/flvenc.c +++ b/libavformat/flvenc.c @@ -653,11 +653,9 @@ end: return ret; } - -static int flv_write_header(AVFormatContext *s) +static int flv_init(struct AVFormatContext *s) { int i; - AVIOContext *pb = s->pb; FLVContext *flv = s->priv_data; for (i = 0; i < s->nb_streams; i++) { @@ -736,6 +734,15 @@ static int flv_write_header(AVFormatContext *s) flv->delay = AV_NOPTS_VALUE; + return 0; +} + +static int flv_write_header(AVFormatContext *s) +{ + int i; + AVIOContext *pb = s->pb; + FLVContext *flv = s->priv_data; + avio_write(pb, "FLV", 3); avio_w8(pb, 1); avio_w8(pb, FLV_HEADER_FLAG_HASAUDIO * !!flv->audio_par + @@ -1074,6 +1081,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->codecpar->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 = FLV_AAC_SEQ_HEADER_DETECT}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "flvflags" }, @@ -1099,9 +1118,11 @@ AVOutputFormat ff_flv_muxer = { .priv_data_size = sizeof(FLVContext), .audio_codec = CONFIG_LIBMP3LAME ? AV_CODEC_ID_MP3 : AV_CODEC_ID_ADPCM_SWF, .video_codec = AV_CODEC_ID_FLV1, + .init = flv_init, .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 },