[FFmpeg-devel] [PATCH 2/2] mcfps filter WIP
wm4
nfxjfg at googlemail.com
Sun Jul 26 21:41:51 CEST 2015
On Fri, 24 Jul 2015 20:50:56 +0200
Michael Niedermayer <michaelni at gmx.at> wrote:
> Works well with some scenes, works really not well with others
> More work needed
> if you can improve it, i would not be unhappy
>
> this should not be optimized yet except trivial things, first the code
> should work well then it should be made to work fast
>
> Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
> ---
> libavcodec/internal.h | 3 +
> libavcodec/snow.c | 30 ++
> libavcodec/utils.c | 10 +
> libavfilter/Makefile | 1 +
> libavfilter/allfilters.c | 1 +
> libavfilter/vf_mcfps.c | 853 ++++++++++++++++++++++++++++++++++++++++++++++
> 6 files changed, 898 insertions(+)
> create mode 100644 libavfilter/vf_mcfps.c
>
> diff --git a/libavcodec/utils.c b/libavcodec/utils.c
> index d926a26..8bc7b65 100644
> --- a/libavcodec/utils.c
> +++ b/libavcodec/utils.c
> @@ -3906,3 +3906,13 @@ const uint8_t *avpriv_find_start_code(const uint8_t *av_restrict p,
>
> return p + 4;
> }
> +
> +int avpriv_get_mvs(AVCodecContext *avctx, int16_t (*mvs)[2], int8_t *refs, int width, int height)
> +{
> + switch (avctx->codec_id) {
> + case AV_CODEC_ID_SNOW:
> + return ff_get_mvs_snow(avctx, mvs, refs, width, height);
> + default:
> + return AVERROR(EINVAL);
> + }
> +}
> diff --git a/libavfilter/vf_mcfps.c b/libavfilter/vf_mcfps.c
> new file mode 100644
> index 0000000..784275d
> --- /dev/null
> +++ b/libavfilter/vf_mcfps.c
> +static int extract_mvs(MCFPSContext *mcfps, InputFrame *f, int dir)
> +{
> + if (!f->mv[dir])
> + f->mv[dir] = av_malloc(mcfps->b_width * mcfps->b_height * sizeof(*f->mv[0]));
> + if (!f->ref[dir])
> + f->ref[dir] = av_malloc(mcfps->b_width * mcfps->b_height * sizeof(*f->ref[0]));
> + if (!f->mv[dir] || !f->ref[0])
> + return AVERROR(ENOMEM);
> +
> + return avpriv_get_mvs(mcfps->avctx_enc[dir],
> + f->mv[dir],
> + f->ref[dir],
> + mcfps->b_width,
> + mcfps->b_height);
> +}
That reminds me of MPlayer's filter using libavcodec internals. I'm
very against this. It's a very awful form of code reuse.
More information about the ffmpeg-devel
mailing list