diff options
author | James Almer <jamrial@gmail.com> | 2018-03-20 01:19:19 -0300 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2018-03-23 22:28:27 -0300 |
commit | dc99ee6b08e54de13b4c82ff265609b6ab83e3d8 (patch) | |
tree | 78cf87da5ebc44fa1af0729d3638c8385e7b9d0b /libavcodec/noise_bsf.c | |
parent | ed1f08bfb5500340463e630290360609a90d2886 (diff) | |
download | ffmpeg-dc99ee6b08e54de13b4c82ff265609b6ab83e3d8.tar.gz |
avcodec/noise_bsf: move the reference in the bsf internal buffer
There's no need to allocate a new packet for it.
Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
Signed-off-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'libavcodec/noise_bsf.c')
-rw-r--r-- | libavcodec/noise_bsf.c | 25 |
1 files changed, 9 insertions, 16 deletions
diff --git a/libavcodec/noise_bsf.c b/libavcodec/noise_bsf.c index 6bb89507fc..d79f63b777 100644 --- a/libavcodec/noise_bsf.c +++ b/libavcodec/noise_bsf.c @@ -35,45 +35,38 @@ typedef struct NoiseContext { unsigned int state; } NoiseContext; -static int noise(AVBSFContext *ctx, AVPacket *out) +static int noise(AVBSFContext *ctx, AVPacket *pkt) { NoiseContext *s = ctx->priv_data; - AVPacket *in; int amount = s->amount > 0 ? s->amount : (s->state % 10001 + 1); int i, ret = 0; if (amount <= 0) return AVERROR(EINVAL); - ret = ff_bsf_get_packet(ctx, &in); + ret = ff_bsf_get_packet_ref(ctx, pkt); if (ret < 0) return ret; if (s->dropamount > 0 && s->state % s->dropamount == 0) { s->state++; - av_packet_free(&in); + av_packet_unref(pkt); return AVERROR(EAGAIN); } - ret = av_new_packet(out, in->size); + ret = av_packet_make_writable(pkt); if (ret < 0) goto fail; - ret = av_packet_copy_props(out, in); - if (ret < 0) - goto fail; - - memcpy(out->data, in->data, in->size); - - for (i = 0; i < out->size; i++) { - s->state += out->data[i] + 1; + for (i = 0; i < pkt->size; i++) { + s->state += pkt->data[i] + 1; if (s->state % amount == 0) - out->data[i] = s->state; + pkt->data[i] = s->state; } fail: if (ret < 0) - av_packet_unref(out); - av_packet_free(&in); + av_packet_unref(pkt); + return ret; } |