On 3/16/2018 8:16 PM, James Almer wrote: > There's no need to allocate a new packet for it. > > Signed-off-by: James Almer <jamr...@gmail.com> > --- > libavcodec/aac_adtstoasc_bsf.c | 33 ++++++++++++++------------------- > 1 file changed, 14 insertions(+), 19 deletions(-) > > diff --git a/libavcodec/aac_adtstoasc_bsf.c b/libavcodec/aac_adtstoasc_bsf.c > index 49f1f095e6..6541b1189c 100644 > --- a/libavcodec/aac_adtstoasc_bsf.c > +++ b/libavcodec/aac_adtstoasc_bsf.c > @@ -36,27 +36,26 @@ typedef struct 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(AVBSFContext *bsfc, AVPacket *out) > +static int aac_adtstoasc_filter(AVBSFContext *bsfc, AVPacket *pkt) > { > AACBSFContext *ctx = bsfc->priv_data; > > GetBitContext gb; > PutBitContext pb; > AACADTSHeaderInfo hdr; > - AVPacket *in; > int ret; > > - ret = ff_bsf_get_packet(bsfc, &in); > + ret = ff_bsf_get_packet_ref(bsfc, pkt); > if (ret < 0) > return ret; > > - if (bsfc->par_in->extradata && in->size >= 2 && (AV_RB16(in->data) >> 4) > != 0xfff) > - goto finish; > + if (bsfc->par_in->extradata && pkt->size >= 2 && (AV_RB16(pkt->data) >> > 4) != 0xfff) > + return 0; > > - if (in->size < AV_AAC_ADTS_HEADER_SIZE) > + if (pkt->size < AV_AAC_ADTS_HEADER_SIZE) > goto packet_too_small; > > - init_get_bits(&gb, in->data, AV_AAC_ADTS_HEADER_SIZE * 8); > + init_get_bits(&gb, pkt->data, AV_AAC_ADTS_HEADER_SIZE * 8); > > if (ff_adts_header_parse(&gb, &hdr) < 0) { > av_log(bsfc, AV_LOG_ERROR, "Error parsing ADTS frame header!\n"); > @@ -71,10 +70,10 @@ static int aac_adtstoasc_filter(AVBSFContext *bsfc, > AVPacket *out) > goto fail; > } > > - in->size -= AV_AAC_ADTS_HEADER_SIZE + 2 * !hdr.crc_absent; > - if (in->size <= 0) > + pkt->size -= AV_AAC_ADTS_HEADER_SIZE + 2 * !hdr.crc_absent; > + if (pkt->size <= 0) > goto packet_too_small; > - in->data += AV_AAC_ADTS_HEADER_SIZE + 2 * !hdr.crc_absent; > + pkt->data += AV_AAC_ADTS_HEADER_SIZE + 2 * !hdr.crc_absent; > > if (!ctx->first_frame_done) { > int pce_size = 0; > @@ -82,7 +81,7 @@ static int aac_adtstoasc_filter(AVBSFContext *bsfc, > AVPacket *out) > uint8_t *extradata; > > if (!hdr.chan_config) { > - init_get_bits(&gb, in->data, in->size * 8); > + init_get_bits(&gb, pkt->data, pkt->size * 8); > if (get_bits(&gb, 3) != 5) { > avpriv_report_missing_feature(bsfc, > "PCE-based channel > configuration " > @@ -94,11 +93,11 @@ static int aac_adtstoasc_filter(AVBSFContext *bsfc, > AVPacket *out) > init_put_bits(&pb, pce_data, MAX_PCE_SIZE); > pce_size = ff_copy_pce_data(&pb, &gb) / 8; > flush_put_bits(&pb); > - in->size -= get_bits_count(&gb)/8; > - in->data += get_bits_count(&gb)/8; > + pkt->size -= get_bits_count(&gb)/8; > + pkt->data += get_bits_count(&gb)/8; > } > > - extradata = av_packet_new_side_data(in, AV_PKT_DATA_NEW_EXTRADATA, > + extradata = av_packet_new_side_data(pkt, AV_PKT_DATA_NEW_EXTRADATA, > 2 + pce_size); > if (!extradata) { > ret = AVERROR(ENOMEM); > @@ -120,17 +119,13 @@ static int aac_adtstoasc_filter(AVBSFContext *bsfc, > AVPacket *out) > ctx->first_frame_done = 1; > } > > -finish: > - av_packet_move_ref(out, in); > - av_packet_free(&in); > - > return 0; > > packet_too_small: > av_log(bsfc, AV_LOG_ERROR, "Input packet too small\n"); > ret = AVERROR_INVALIDDATA; > fail: > - av_packet_free(&in); > + av_packet_unref(pkt); > return ret; > } > >
Will push later today. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel