X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fnoise_bsf.c;h=6ebd36963326a75ad0fb146e2d19ce6ed643add6;hb=420cedd49745b284c35d97b936b71ff79b43bdf7;hp=84b94032ad3f3af89e8fadb1c0d30cb9646440dc;hpb=fa2d28567e3514323c440c4b7935a3d711eded8d;p=ffmpeg diff --git a/libavcodec/noise_bsf.c b/libavcodec/noise_bsf.c index 84b94032ad3..6ebd3696332 100644 --- a/libavcodec/noise_bsf.c +++ b/libavcodec/noise_bsf.c @@ -19,13 +19,11 @@ */ #include -#include -#include "avcodec.h" #include "bsf.h" +#include "bsf_internal.h" #include "libavutil/log.h" -#include "libavutil/mem.h" #include "libavutil/opt.h" typedef struct NoiseContext { @@ -35,52 +33,45 @@ 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; + int i, ret; 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); - if (ret < 0) - goto fail; - - ret = av_packet_copy_props(out, in); - if (ret < 0) - goto fail; - - memcpy(out->data, in->data, in->size); + ret = av_packet_make_writable(pkt); + if (ret < 0) { + av_packet_unref(pkt); + return ret; + } - 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); - return ret; + + return 0; } #define OFFSET(x) offsetof(NoiseContext, x) +#define FLAGS (AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_AUDIO_PARAM|AV_OPT_FLAG_BSF_PARAM) static const AVOption options[] = { - { "amount", NULL, OFFSET(amount), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX }, - { "dropamount", NULL, OFFSET(dropamount), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX }, + { "amount", NULL, OFFSET(amount), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FLAGS }, + { "dropamount", NULL, OFFSET(dropamount), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FLAGS }, { NULL }, };