On 3/18/2018 11:21 AM, James Almer wrote: > 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.
Pushed. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel