Message ID | 20180316231601.3212-1-jamrial@gmail.com |
---|---|
State | Accepted |
Commit | a094e7f16abffd2b0ed7bb4ce2edfeaf0d066691 |
Headers | show |
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 <jamrial@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.
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 <jamrial@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.
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; }
There's no need to allocate a new packet for it. Signed-off-by: James Almer <jamrial@gmail.com> --- libavcodec/aac_adtstoasc_bsf.c | 33 ++++++++++++++------------------- 1 file changed, 14 insertions(+), 19 deletions(-)