[FFmpeg-devel] [PATCH] Add crop filter
Michael Niedermayer
michaelni
Tue Oct 6 15:01:32 CEST 2009
On Tue, Oct 06, 2009 at 12:58:41AM +0200, Stefano Sabatini wrote:
> Hi,
>
> let's start to add some filter to the main repo.
>
> As long as I'll add them, I plan to remove them from the soc repo, so
> that further changes will be directly applied to the main repo.
>
> In the meaningwhile though regression tests will be yet performed in
> soc.
>
> In attachment there is the exact copy of the crop filter you can find
> in the soc repo.
>
> Regards.
> --
> FFmpeg = Fundamental & Friendly Merciless Portable Epic Geisha
> Makefile | 2
> allfilters.c | 3 -
> vf_crop.c | 160 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 162 insertions(+), 3 deletions(-)
> 32cd7ccf67a2827a81eb82007922aee682411066 add-crop-filter.patch
> Index: ffmpeg/libavfilter/Makefile
> ===================================================================
> --- ffmpeg.orig/libavfilter/Makefile 2009-10-06 00:37:21.000000000 +0200
> +++ ffmpeg/libavfilter/Makefile 2009-10-06 00:37:45.000000000 +0200
> @@ -11,6 +11,6 @@
> defaults.o \
> formats.o \
>
> -#OBJS-$(CONFIG_XXX_FILTER) += vf_xxx.o
> +OBJS-$(CONFIG_CROP_FILTER) += vf_crop.o
>
> include $(SUBDIR)../subdir.mak
> Index: ffmpeg/libavfilter/allfilters.c
> ===================================================================
> --- ffmpeg.orig/libavfilter/allfilters.c 2009-10-06 00:37:55.000000000 +0200
> +++ ffmpeg/libavfilter/allfilters.c 2009-10-06 00:38:06.000000000 +0200
> @@ -34,6 +34,5 @@
> return;
> initialized = 1;
>
> -// REGISTER_FILTER (CROP,crop,vf);
> -
> + REGISTER_FILTER (CROP,crop,vf);
> }
> Index: ffmpeg/libavfilter/vf_crop.c
> ===================================================================
> --- /dev/null 1970-01-01 00:00:00.000000000 +0000
> +++ ffmpeg/libavfilter/vf_crop.c 2009-10-06 00:37:11.000000000 +0200
> @@ -0,0 +1,160 @@
> +/*
> + * video crop filter
> + * copyright (c) 2007 Bobby Bingham
> + *
> + * This file is part of FFmpeg.
> + *
> + * FFmpeg is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2.1 of the License, or (at your option) any later version.
> + *
> + * FFmpeg is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with FFmpeg; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> + */
> +
> +#include <stdio.h>
> +
> +#include "avfilter.h"
> +
> +typedef struct
> +{
> + int x, y, w, h;
> + int cx, cy, cw, ch;
these are missing doxygen comments explaining what they are
> +
> + int bpp; //< bytes per pixel
> + int hsub, vsub; //< chroma subsampling
> +} CropContext;
> +
> +static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque)
> +{
> + CropContext *crop = ctx->priv;
> +
> + /* default parameters */
> + crop->x = 0;
> + crop->y = 0;
i would assume that the context is zeroed when its allocated, is that not so?
> + crop->w = -1;
> + crop->h = -1;
> +
> + if(args)
> + sscanf(args, "%d:%d:%d:%d", &crop->x, &crop->y, &crop->w, &crop->h);
> +
> + return 0;
> +}
> +
> +static int config_input(AVFilterLink *link)
> +{
> + CropContext *crop = link->dst->priv;
> +
> + crop->cx = FFMIN(crop->x, link->w - 1);
> + crop->cy = FFMIN(crop->y, link->h - 1);
> + crop->cw = FFMIN(crop->w, link->w - crop->cx);
> + crop->ch = FFMIN(crop->h, link->h - crop->cy);
> +
> + if(crop->cw <= 0) crop->cw = link->w - crop->cx;
> + if(crop->ch <= 0) crop->ch = link->h - crop->cy;
this seems to check for w/h < 0 while x/y are not checked ...
> +
> + switch(link->format) {
> + case PIX_FMT_RGB32:
> + case PIX_FMT_BGR32:
> + crop->bpp = 4;
> + break;
> + case PIX_FMT_RGB24:
> + case PIX_FMT_BGR24:
> + crop->bpp = 3;
> + break;
> + case PIX_FMT_RGB565:
> + case PIX_FMT_RGB555:
> + case PIX_FMT_BGR565:
> + case PIX_FMT_BGR555:
> + case PIX_FMT_GRAY16BE:
> + case PIX_FMT_GRAY16LE:
> + crop->bpp = 2;
> + break;
> + default:
> + crop->bpp = 1;
> + }
> +
> + avcodec_get_chroma_sub_sample(link->format, &crop->hsub, &crop->vsub);
> + crop->cx &= ~((1 << crop->hsub) - 1);
> + crop->cw &= ~((1 << crop->hsub) - 1);
> + crop->ch &= ~((1 << crop->vsub) - 1);
and cy?
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
In a rich man's house there is no place to spit but his face.
-- Diogenes of Sinope
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20091006/9d887ff3/attachment.pgp>
More information about the ffmpeg-devel
mailing list