From: lilo_booter Date: Thu, 1 Sep 2005 07:08:50 +0000 (+0000) Subject: + Changed license of plugins to LGPL X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=66ee48cf0b9448e670cfa19dfbbdc06193288181;p=mlt + Changed license of plugins to LGPL + Added a chroma hold filter + Small optimisation/correction to chroma filter git-svn-id: https://mlt.svn.sourceforge.net/svnroot/mlt/trunk/mlt@821 d19143bc-622f-0410-bfdd-b5b2a6649095 --- diff --git a/src/modules/vmfx/Makefile b/src/modules/vmfx/Makefile index 98eb5474..13f59ad8 100644 --- a/src/modules/vmfx/Makefile +++ b/src/modules/vmfx/Makefile @@ -4,6 +4,7 @@ TARGET = ../libmltvmfx$(LIBSUF) OBJS = factory.o \ filter_chroma.o \ + filter_chroma_hold.o \ filter_shape.o \ producer_pgm.o diff --git a/src/modules/vmfx/configure b/src/modules/vmfx/configure index 37230f95..a1946329 100755 --- a/src/modules/vmfx/configure +++ b/src/modules/vmfx/configure @@ -9,6 +9,7 @@ EOF cat << EOF >> ../filters.dat chroma libmltvmfx$LIBSUF +chroma_hold libmltvmfx$LIBSUF shape libmltvmfx$LIBSUF EOF diff --git a/src/modules/vmfx/factory.c b/src/modules/vmfx/factory.c index cd67d5ce..35bb78f7 100644 --- a/src/modules/vmfx/factory.c +++ b/src/modules/vmfx/factory.c @@ -4,16 +4,16 @@ * Author: Charles Yates * * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by + * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License + * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ @@ -21,6 +21,7 @@ #include #include "filter_chroma.h" +#include "filter_chroma_hold.h" #include "filter_shape.h" #include "producer_pgm.h" @@ -35,6 +36,8 @@ void *mlt_create_filter( char *id, void *arg ) { if ( !strcmp( id, "chroma" ) ) return filter_chroma_init( arg ); + if ( !strcmp( id, "chroma_hold" ) ) + return filter_chroma_hold_init( arg ); if ( !strcmp( id, "shape" ) ) return filter_shape_init( arg ); return NULL; diff --git a/src/modules/vmfx/filter_chroma.c b/src/modules/vmfx/filter_chroma.c index 565ac029..6d9384c5 100644 --- a/src/modules/vmfx/filter_chroma.c +++ b/src/modules/vmfx/filter_chroma.c @@ -4,16 +4,16 @@ * Author: Charles Yates * * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by + * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License + * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ @@ -27,7 +27,7 @@ static inline int in_range( uint8_t v, uint8_t c, int var ) { - return ( v >= c - var ) && ( v <= c + var ); + return ( ( int )v >= c - var ) && ( ( int )v <= c + var ); } static inline uint8_t alpha_value( uint8_t a, uint8_t *p, uint8_t u, uint8_t v, int var ) @@ -42,7 +42,7 @@ static int filter_get_image( mlt_frame frame, uint8_t **image, mlt_image_format { mlt_filter this = mlt_frame_pop_service( frame ); char *key = mlt_properties_get( MLT_FILTER_PROPERTIES( this ), "key" ); - int variance = 255 * mlt_properties_get_double( MLT_FILTER_PROPERTIES( this ), "variance" ) + 0.5; + int variance = 200 * mlt_properties_get_double( MLT_FILTER_PROPERTIES( this ), "variance" ); int32_t key_val = strtol( key, &key, 0 ); uint8_t b = key_val & 0xff; uint8_t g = ( key_val >> 8 ) & 0xff; @@ -55,14 +55,15 @@ static int filter_get_image( mlt_frame frame, uint8_t **image, mlt_image_format { uint8_t *alpha = mlt_frame_get_alpha_mask( frame ); uint8_t *p = *image; - int size = *width * *height; - int odd = 0; + int size = *width * *height / 2; while ( size -- ) { *alpha = alpha_value( *alpha, p, u, v, variance ); - if ( odd ) p += 4; - odd = !odd; + *alpha ++; + p += 2; + *alpha = alpha_value( *alpha, p, v, u, variance ); alpha ++; + p += 2; } } diff --git a/src/modules/vmfx/filter_chroma.h b/src/modules/vmfx/filter_chroma.h index 13c7a13c..7d878576 100644 --- a/src/modules/vmfx/filter_chroma.h +++ b/src/modules/vmfx/filter_chroma.h @@ -4,16 +4,16 @@ * Author: Charles Yates * * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by + * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License + * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff --git a/src/modules/vmfx/filter_chroma_hold.c b/src/modules/vmfx/filter_chroma_hold.c new file mode 100644 index 00000000..2992ceb5 --- /dev/null +++ b/src/modules/vmfx/filter_chroma_hold.c @@ -0,0 +1,103 @@ +/* + * filter_chroma.c -- Maps a chroma key to the alpha channel + * Copyright (C) 2005 Visual Media Fx Inc. + * Author: Charles Yates + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "filter_chroma.h" +#include +#include +#include +#include +#include + +static inline int in_range( uint8_t v, uint8_t c, int var ) +{ + return ( ( int )v >= c - var ) && ( ( int )v <= c + var ); +} + +static inline uint8_t alpha_value( uint8_t a, uint8_t *p, uint8_t u, uint8_t v, int var ) +{ + return ( in_range( *( p + 1 ), u, var ) && in_range( *( p + 3 ), v, var ) ) ? 0 : a; +} + +/** Get the images and map the chroma to the alpha of the frame. +*/ + +static int filter_get_image( mlt_frame frame, uint8_t **image, mlt_image_format *format, int *width, int *height, int writable ) +{ + mlt_filter this = mlt_frame_pop_service( frame ); + char *key = mlt_properties_get( MLT_FILTER_PROPERTIES( this ), "key" ); + int variance = 200 * mlt_properties_get_double( MLT_FILTER_PROPERTIES( this ), "variance" ); + int32_t key_val = strtol( key, &key, 0 ); + uint8_t b = key_val & 0xff; + uint8_t g = ( key_val >> 8 ) & 0xff; + uint8_t r = ( key_val >> 16 ) & 0xff; + uint8_t y, u, v; + + RGB2YUV( r, g, b, y, u, v ); + + if ( mlt_frame_get_image( frame, image, format, width, height, writable ) == 0 ) + { + uint8_t alpha = 0; + uint8_t *p = *image; + int size = *width * *height / 2; + while ( size -- ) + { + alpha = alpha_value( 255, p, u, v, variance ); + p ++; + if ( alpha ) + *p ++ = 128; + else + p ++; + alpha = alpha_value( 255, p, v, u, variance ); + p ++; + if ( alpha ) + *p ++ = 128; + else + p ++; + } + } + + return 0; +} + +/** Filter processing. +*/ + +static mlt_frame filter_process( mlt_filter this, mlt_frame frame ) +{ + mlt_frame_push_service( frame, this ); + mlt_frame_push_service( frame, filter_get_image ); + return frame; +} + +/** Constructor for the filter. +*/ + +mlt_filter filter_chroma_hold_init( char *arg ) +{ + mlt_filter this = mlt_filter_new( ); + if ( this != NULL ) + { + mlt_properties_set( MLT_FILTER_PROPERTIES( this ), "key", arg == NULL ? "0xc00000" : arg ); + mlt_properties_set_double( MLT_FILTER_PROPERTIES( this ), "variance", 0.3 ); + this->process = filter_process; + } + return this; +} + diff --git a/src/modules/vmfx/filter_chroma_hold.h b/src/modules/vmfx/filter_chroma_hold.h new file mode 100644 index 00000000..5f393607 --- /dev/null +++ b/src/modules/vmfx/filter_chroma_hold.h @@ -0,0 +1,28 @@ +/* + * filter_chroma.h -- Maps a chroma key to the alpha channel + * Copyright (C) 2005 Visual Media Fx Inc. + * Author: Charles Yates + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef _FILTER_CHROMA_HOLD_H_ +#define _FILTER_CHROMA_HOLD_H_ + +#include + +extern mlt_filter filter_chroma_hold_init( char *arg ); + +#endif diff --git a/src/modules/vmfx/filter_shape.c b/src/modules/vmfx/filter_shape.c index 63019474..1edaa1c1 100644 --- a/src/modules/vmfx/filter_shape.c +++ b/src/modules/vmfx/filter_shape.c @@ -4,16 +4,16 @@ * Author: Charles Yates * * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by + * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License + * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff --git a/src/modules/vmfx/filter_shape.h b/src/modules/vmfx/filter_shape.h index 57bfc08b..1cc347dc 100644 --- a/src/modules/vmfx/filter_shape.h +++ b/src/modules/vmfx/filter_shape.h @@ -4,16 +4,16 @@ * Author: Charles Yates * * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by + * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License + * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff --git a/src/modules/vmfx/gpl b/src/modules/vmfx/gpl deleted file mode 100644 index e69de29b..00000000 diff --git a/src/modules/vmfx/producer_pgm.c b/src/modules/vmfx/producer_pgm.c index 369f6d9e..e9d333be 100644 --- a/src/modules/vmfx/producer_pgm.c +++ b/src/modules/vmfx/producer_pgm.c @@ -4,16 +4,16 @@ * Author: Charles Yates * * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by + * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License + * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff --git a/src/modules/vmfx/producer_pgm.h b/src/modules/vmfx/producer_pgm.h index 3c97dddc..29836c4e 100644 --- a/src/modules/vmfx/producer_pgm.h +++ b/src/modules/vmfx/producer_pgm.h @@ -4,16 +4,16 @@ * Author: Charles Yates * * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by + * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License + * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */