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 -1;

    }



    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;

        }


        avctx->extradata_size = 2 + pce_size;

        avctx->extradata = av_mallocz(avctx->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE);



        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);

        }



        ctx->first_frame_done = 1;

    }



    *poutbuf = (uint8_t*) buf;

    *poutbuf_size = buf_size;



    return 0;

}
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 -1;

    }



    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;

        }


        avctx->extradata_size = 2 + pce_size;

        avctx->extradata = av_mallocz(avctx->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE);



        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); 

        put_bits(&pb, 1, 0); 

        put_bits(&pb, 1, 0); 

        flush_put_bits(&pb);

        if (pce_size) {

            memcpy(avctx->extradata + 2, pce_data, pce_size);

        }



        ctx->first_frame_done = 1;

    }



    *poutbuf = (uint8_t*) buf;

    *poutbuf_size = buf_size;



    return 0;

}
static int FUNC_0(AVBitStreamFilterContext *VAR_0,

                                AVCodecContext *VAR_1, const char *VAR_2,

                                uint8_t  **VAR_3, int *VAR_4,

                                const uint8_t *VAR_5, int      VAR_6,

                                int VAR_7)

{

    GetBitContext gb;

    PutBitContext pb;

    AACADTSHeaderInfo hdr;



    AACBSFContext *ctx = VAR_0->priv_data;



    init_get_bits(&gb, VAR_5, AAC_ADTS_HEADER_SIZE*8);



    *VAR_3 = (uint8_t*) VAR_5;

    *VAR_4 = VAR_6;



    if (VAR_1->extradata)

        if (show_bits(&gb, 12) != 0xfff)

            return 0;



    if (avpriv_aac_parse_header(&gb, &hdr) < 0) {

        av_log(VAR_1, AV_LOG_ERROR, "Error parsing ADTS frame header!\n");

        return -1;

    }



    if (!hdr.crc_absent && hdr.num_aac_frames > 1) {

        avpriv_report_missing_feature(VAR_1,

                                      "Multiple RDBs per frame with CRC");

        return AVERROR_PATCHWELCOME;

    }



    VAR_5      += AAC_ADTS_HEADER_SIZE + 2*!hdr.crc_absent;

    VAR_6 -= AAC_ADTS_HEADER_SIZE + 2*!hdr.crc_absent;



    if (!ctx->first_frame_done) {

        int            VAR_8 = 0;

        uint8_t        pce_data[MAX_PCE_SIZE];

        if (!hdr.chan_config) {

            init_get_bits(&gb, VAR_5, VAR_6 * 8);

            if (get_bits(&gb, 3) != 5) {

                avpriv_report_missing_feature(VAR_1,

                                              "PCE-based channel configuration "

                                              "without PCE as first syntax "

                                              "element");

                return AVERROR_PATCHWELCOME;

            }

            init_put_bits(&pb, pce_data, MAX_PCE_SIZE);

            VAR_8 = avpriv_copy_pce_data(&pb, &gb)/8;

            flush_put_bits(&pb);

            VAR_6 -= get_bits_count(&gb)/8;

            VAR_5      += get_bits_count(&gb)/8;

        }


        VAR_1->extradata_size = 2 + VAR_8;

        VAR_1->extradata = av_mallocz(VAR_1->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE);



        init_put_bits(&pb, VAR_1->extradata, VAR_1->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); 

        put_bits(&pb, 1, 0); 

        put_bits(&pb, 1, 0); 

        flush_put_bits(&pb);

        if (VAR_8) {

            memcpy(VAR_1->extradata + 2, pce_data, VAR_8);

        }



        ctx->first_frame_done = 1;

    }



    *VAR_3 = (uint8_t*) VAR_5;

    *VAR_4 = VAR_6;



    return 0;

}
static int FUNC_0(AVBitStreamFilterContext *VAR_0,
AVCodecContext *VAR_1, const char *VAR_2,
uint8_t  **VAR_3, int *VAR_4,
const uint8_t *VAR_5, int      VAR_6,
int VAR_7)
{ GetBitContext gb; PutBitContext pb; AACADTSHeaderInfo hdr; AACBSFContext *ctx = VAR_0->priv_data; init_get_bits(&gb, VAR_5, AAC_ADTS_HEADER_SIZE*8); *VAR_3 = (uint8_t*) VAR_5; *VAR_4 = VAR_6; if (VAR_1->extradata)
if (show_bits(&gb, 12) != 0xfff)
return 0; if (avpriv_aac_parse_header(&gb, &hdr) < 0) { av_log(VAR_1, AV_LOG_ERROR, "Error parsing ADTS frame header!\n"); return -1; } if (!hdr.crc_absent && hdr.num_aac_frames > 1) { avpriv_report_missing_feature(VAR_1,
"Multiple RDBs per frame with CRC"); return AVERROR_PATCHWELCOME; } VAR_5      += AAC_ADTS_HEADER_SIZE + 2*!hdr.crc_absent; VAR_6 -= AAC_ADTS_HEADER_SIZE + 2*!hdr.crc_absent; if (!ctx->first_frame_done) { int            VAR_8 = 0; uint8_t        pce_data[MAX_PCE_SIZE]; if (!hdr.chan_config) { init_get_bits(&gb, VAR_5, VAR_6 * 8); if (get_bits(&gb, 3) != 5) { avpriv_report_missing_feature(VAR_1,
"PCE-based channel configuration "
"without PCE as first syntax "
"element"); return AVERROR_PATCHWELCOME; } init_put_bits(&pb, pce_data, MAX_PCE_SIZE); VAR_8 = avpriv_copy_pce_data(&pb, &gb)/8; flush_put_bits(&pb); VAR_6 -= get_bits_count(&gb)/8; VAR_5      += get_bits_count(&gb)/8; } VAR_1->extradata_size = 2 + VAR_8; VAR_1->extradata = av_mallocz(VAR_1->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE); init_put_bits(&pb, VAR_1->extradata, VAR_1->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); put_bits(&pb, 1, 0); put_bits(&pb, 1, 0); flush_put_bits(&pb); if (VAR_8) { memcpy(VAR_1->extradata + 2, pce_data, VAR_8); } ctx->first_frame_done = 1; } *VAR_3 = (uint8_t*) VAR_5; *VAR_4 = VAR_6; return 0; }