[FFmpeg-devel] [PATCH 4/4] lavc: deprecate aac_adtstoasc BSF; remove warnings referencing it

wm4 nfxjfg at googlemail.com
Tue Sep 22 09:15:59 CEST 2015


On Mon, 21 Sep 2015 21:50:34 -0500
Rodger Combs <rodger.combs at gmail.com> wrote:

> ---
>  Changelog                      |  1 +
>  doc/bitstream_filters.texi     | 11 -------
>  libavcodec/aac_adtstoasc_bsf.c | 73 ++----------------------------------------
>  libavformat/flvenc.c           |  6 ----
>  libavformat/movenc.c           |  6 ----
>  5 files changed, 3 insertions(+), 94 deletions(-)
> 
> diff --git a/Changelog b/Changelog
> index c2fd10f..962a787 100644
> --- a/Changelog
> +++ b/Changelog
> @@ -9,6 +9,7 @@ version <next>:
>  - stereowiden filter
>  - stereotools filter
>  - rubberband filter
> +- Deprecated aac_adtstoasc bsf; now handled in parser
>  
>  
>  version 2.8:
> diff --git a/doc/bitstream_filters.texi b/doc/bitstream_filters.texi
> index 563049e..db0eec8 100644
> --- a/doc/bitstream_filters.texi
> +++ b/doc/bitstream_filters.texi
> @@ -24,17 +24,6 @@ ffmpeg -i INPUT -c:v copy -bsf:v filter1[=opt1=str1/opt2=str2][,filter2] OUTPUT
>  Below is a description of the currently available bitstream filters,
>  with their parameters, if any.
>  
> - at section aac_adtstoasc
> -
> -Convert MPEG-2/4 AAC ADTS to MPEG-4 Audio Specific Configuration
> -bitstream filter.
> -
> -This filter creates an MPEG-4 AudioSpecificConfig from an MPEG-2/4
> -ADTS header and removes the ADTS header.
> -
> -This is required for example when copying an AAC stream from a raw
> -ADTS AAC container to a FLV or a MOV/MP4 file.
> -
>  @section chomp
>  
>  Remove zero padding at the end of a packet.
> diff --git a/libavcodec/aac_adtstoasc_bsf.c b/libavcodec/aac_adtstoasc_bsf.c
> index 9c117c6..f3e77cc 100644
> --- a/libavcodec/aac_adtstoasc_bsf.c
> +++ b/libavcodec/aac_adtstoasc_bsf.c
> @@ -30,89 +30,20 @@ typedef struct AACBSFContext {
>      int first_frame_done;
>  } AACBSFContext;
>  
> -/**
> - * This filter creates an MPEG-4 AudioSpecificConfig from an MPEG-2/4
> - * ADTS header and removes the ADTS header.
> - */
>  static int aac_adtstoasc_filter(AVBitStreamFilterContext *bsfc,
>                                  AVCodecContext *avctx, const char *args,
>                                  uint8_t  **poutbuf, int *poutbuf_size,
>                                  const uint8_t *buf, int      buf_size,
>                                  int keyframe)
>  {
> -    GetBitContext gb;
> -    PutBitContext pb;
> -    AACADTSHeaderInfo hdr;
> -
>      AACBSFContext *ctx = bsfc->priv_data;
> -
> -    init_get_bits(&gb, buf, AAC_ADTS_HEADER_SIZE*8);
> -
> -    *poutbuf = (uint8_t*) buf;
> -    *poutbuf_size = buf_size;
> -
> -    if (avctx->extradata)
> -        if (show_bits(&gb, 12) != 0xfff)
> -            return 0;
> -
> -    if (avpriv_aac_parse_header(&gb, &hdr) < 0) {
> -        av_log(avctx, AV_LOG_ERROR, "Error parsing ADTS frame header!\n");
> -        return AVERROR_INVALIDDATA;
> -    }
> -
> -    if (!hdr.crc_absent && hdr.num_aac_frames > 1) {
> -        avpriv_report_missing_feature(avctx,
> -                                      "Multiple RDBs per frame with CRC");
> -        return AVERROR_PATCHWELCOME;
> -    }
> -
> -    buf      += AAC_ADTS_HEADER_SIZE + 2*!hdr.crc_absent;
> -    buf_size -= AAC_ADTS_HEADER_SIZE + 2*!hdr.crc_absent;
> -
>      if (!ctx->first_frame_done) {
> -        int            pce_size = 0;
> -        uint8_t        pce_data[MAX_PCE_SIZE];
> -        if (!hdr.chan_config) {
> -            init_get_bits(&gb, buf, buf_size * 8);
> -            if (get_bits(&gb, 3) != 5) {
> -                avpriv_report_missing_feature(avctx,
> -                                              "PCE-based channel configuration "
> -                                              "without PCE as first syntax "
> -                                              "element");
> -                return AVERROR_PATCHWELCOME;
> -            }
> -            init_put_bits(&pb, pce_data, MAX_PCE_SIZE);
> -            pce_size = avpriv_copy_pce_data(&pb, &gb)/8;
> -            flush_put_bits(&pb);
> -            buf_size -= get_bits_count(&gb)/8;
> -            buf      += get_bits_count(&gb)/8;
> -        }
> -        av_free(avctx->extradata);
> -        avctx->extradata_size = 2 + pce_size;
> -        avctx->extradata = av_mallocz(avctx->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE);
> -        if (!avctx->extradata) {
> -            avctx->extradata_size = 0;
> -            return AVERROR(ENOMEM);
> -        }
> -
> -        init_put_bits(&pb, avctx->extradata, avctx->extradata_size);
> -        put_bits(&pb, 5, hdr.object_type);
> -        put_bits(&pb, 4, hdr.sampling_index);
> -        put_bits(&pb, 4, hdr.chan_config);
> -        put_bits(&pb, 1, 0); //frame length - 1024 samples
> -        put_bits(&pb, 1, 0); //does not depend on core coder
> -        put_bits(&pb, 1, 0); //is not extension
> -        flush_put_bits(&pb);
> -        if (pce_size) {
> -            memcpy(avctx->extradata + 2, pce_data, pce_size);
> -        }
> +        av_log(avctx, AV_LOG_WARNING, "The aac_adtstoasc bitstream filter is\n"
> +                                      "no longer required.\n");
>  
>          ctx->first_frame_done = 1;
>      }
>  
> -    *poutbuf = (uint8_t*) buf;
> -    *poutbuf_size = buf_size;
> -
>      return 0;
>  }
>  
> diff --git a/libavformat/flvenc.c b/libavformat/flvenc.c
> index e217ba8..da8f5b9 100644
> --- a/libavformat/flvenc.c
> +++ b/libavformat/flvenc.c
> @@ -568,12 +568,6 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt)
>                  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");
>      }
>  
> diff --git a/libavformat/movenc.c b/libavformat/movenc.c
> index af03d1e..1af4031 100644
> --- a/libavformat/movenc.c
> +++ b/libavformat/movenc.c
> @@ -4382,12 +4382,6 @@ int ff_mov_write_packet(AVFormatContext *s, AVPacket *pkt)
>  
>      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 -1;
> -        }
>          av_log(s, AV_LOG_WARNING, "aac bitstream error\n");
>      }
>      if (enc->codec_id == AV_CODEC_ID_H264 && trk->vos_len > 0 && *(uint8_t *)trk->vos_data != 1 && !TAG_IS_AVCI(trk->tag)) {

I don't think you can just remove it. Someone might be using it for
whatever purposes (possibly even without using any other ffmpeg
components).

It should be deprecated, but left working, and can be removed on the
next bump or so.


More information about the ffmpeg-devel mailing list