X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fvideo_filter%2Fopencv_wrapper.c;h=e6b1dd160e75463de469dbbce76b6004e8c5d4c9;hb=f2b2e37c04b2921e29daa3260dc696646ad4f10c;hp=2e3b91e47efe0aeb6538d1325803a6c48e931f09;hpb=e40d134c69b144327fd1d2001e8b85640f5c7cb9;p=vlc diff --git a/modules/video_filter/opencv_wrapper.c b/modules/video_filter/opencv_wrapper.c index 2e3b91e47e..e6b1dd160e 100644 --- a/modules/video_filter/opencv_wrapper.c +++ b/modules/video_filter/opencv_wrapper.c @@ -28,7 +28,12 @@ #include #include -#include +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include #include #include @@ -61,21 +66,21 @@ static void VlcPictureToIplImage( vout_thread_t *p_vout, picture_t *p_in ); * Module descriptor *****************************************************************************/ -static char *chroma_list[] = { "input", "I420", "RGB32"}; -static char *chroma_list_text[] = { N_("Use input chroma unaltered"), +static const char *const chroma_list[] = { "input", "I420", "RGB32"}; +static const char *const chroma_list_text[] = { N_("Use input chroma unaltered"), N_("I420 - first plane is greyscale"), N_("RGB32")}; -static char *output_list[] = { "none", "input", "processed"}; -static char *output_list_text[] = { N_("Don't display any video"), +static const char *const output_list[] = { "none", "input", "processed"}; +static const char *const output_list_text[] = { N_("Don't display any video"), N_("Display the input video"), N_("Display the processed video")}; -static char *verbosity_list[] = { "error", "warning", "debug"}; -static char *verbosity_list_text[] = { N_("Show only errors"), +static const char *const verbosity_list[] = { "error", "warning", "debug"}; +static const char *const verbosity_list_text[] = { N_("Show only errors"), N_("Show errors and warnings"), N_("Show everything including debug messages")}; vlc_module_begin(); - set_description( _("OpenCV video filter wrapper") ); - set_shortname( _("OpenCV" )); + set_description( N_("OpenCV video filter wrapper") ); + set_shortname( N_("OpenCV" )); set_category( CAT_VIDEO ); set_subcategory( SUBCAT_VIDEO_VFILTER ); set_capability( "video filter", 0 ); @@ -84,22 +89,22 @@ vlc_module_begin(); add_float_with_range( "opencv-scale", 1.0, 0.1, 2.0, NULL, N_("Scale factor (0.1-2.0)"), N_("Ammount by which to scale the picture before sending it to the internal OpenCV filter"), - VLC_FALSE ); + false ); add_string( "opencv-chroma", "input", NULL, N_("OpenCV filter chroma"), - N_("Chroma to convert picture to before sending it to the internal OpenCV filter"), VLC_FALSE); + N_("Chroma to convert picture to before sending it to the internal OpenCV filter"), false); change_string_list( chroma_list, chroma_list_text, 0); add_string( "opencv-output", "input", NULL, N_("Wrapper filter output"), - N_("Determines what (if any) video is displayed by the wrapper filter"), VLC_FALSE); + N_("Determines what (if any) video is displayed by the wrapper filter"), false); change_string_list( output_list, output_list_text, 0); add_string( "opencv-verbosity", "error", NULL, N_("Wrapper filter verbosity"), - N_("Determines wrapper filter verbosity level"), VLC_FALSE); + N_("Determines wrapper filter verbosity level"), false); change_string_list( verbosity_list, verbosity_list_text, 0); add_string( "opencv-filter-name", "none", NULL, N_("OpenCV internal filter name"), - N_("Name of internal OpenCV plugin filter to use"), VLC_FALSE); + N_("Name of internal OpenCV plugin filter to use"), false); vlc_module_end(); @@ -186,10 +191,7 @@ static int Create( vlc_object_t *p_this ) /* Allocate structure */ p_vout->p_sys = malloc( sizeof( vout_sys_t ) ); if( p_vout->p_sys == NULL ) - { - msg_Err( p_vout, "out of memory" ); return VLC_ENOMEM; - } /* Init structure */ p_vout->p_sys->p_image = image_HandlerCreate( p_vout ); @@ -339,7 +341,7 @@ static int Init( vout_thread_t *p_vout ) msg_Err( p_vout, "can't open internal opencv filter: %s", p_vout->p_sys->psz_inner_name ); p_vout->p_sys->psz_inner_name = NULL; vlc_object_detach( p_sys->p_opencv ); - vlc_object_destroy( p_sys->p_opencv ); + vlc_object_release( p_sys->p_opencv ); p_sys->p_opencv = NULL; } @@ -372,6 +374,10 @@ static void End( vout_thread_t *p_vout ) { int i_index; + DEL_PARENT_CALLBACKS( SendEventsToChild ); + + DEL_CALLBACKS( p_vout->p_sys->p_vout, SendEvents ); + /* Free the fake output buffers we allocated */ for( i_index = I_OUTPUTPICTURES ; i_index ; ) { @@ -385,10 +391,11 @@ static void End( vout_thread_t *p_vout ) if( p_vout->p_sys->p_opencv->p_module ) module_Unneed( p_vout->p_sys->p_opencv, p_vout->p_sys->p_opencv->p_module ); vlc_object_detach( p_vout->p_sys->p_opencv ); - vlc_object_destroy( p_vout->p_sys->p_opencv ); + vlc_object_release( p_vout->p_sys->p_opencv ); p_vout->p_sys->p_opencv = NULL; } + vout_CloseAndRelease( p_vout->p_sys->p_vout ) } /***************************************************************************** @@ -400,15 +407,6 @@ static void Destroy( vlc_object_t *p_this ) { vout_thread_t *p_vout = (vout_thread_t *)p_this; - if( p_vout->p_sys->p_vout ) - { - DEL_CALLBACKS( p_vout->p_sys->p_vout, SendEvents ); - vlc_object_detach( p_vout->p_sys->p_vout ); - vout_Destroy( p_vout->p_sys->p_vout ); - } - - DEL_PARENT_CALLBACKS( SendEventsToChild ); - ReleaseImages(p_vout); if( p_vout->p_sys->p_image ) @@ -437,7 +435,7 @@ static void ReleaseImages(vout_thread_t *p_vout) /* Release temp picture_t if it exists */ if (p_vout->p_sys->p_to_be_freed) { - p_vout->p_sys->p_to_be_freed->pf_release( p_vout->p_sys->p_to_be_freed ); + picture_Release( p_vout->p_sys->p_to_be_freed ); p_vout->p_sys->p_to_be_freed = NULL; } if (p_vout->p_sys->i_verbosity > VERB_WARN) @@ -553,7 +551,7 @@ static void Render( vout_thread_t *p_vout, picture_t *p_pic ) while( ( p_outpic = vout_CreatePicture( p_vout->p_sys->p_vout, 0, 0, 0 ) ) == NULL ) { - if( p_vout->b_die || p_vout->b_error ) + if( !vlc_object_alive (p_vout) || p_vout->b_error ) { return; } msleep( VOUT_OUTMEM_SLEEP ); } @@ -592,7 +590,7 @@ static void Render( vout_thread_t *p_vout, picture_t *p_pic ) ReleaseImages(p_vout); vout_DatePicture( p_vout->p_sys->p_vout, p_outpic, p_pic->date ); - + vout_UnlinkPicture( p_vout->p_sys->p_vout, p_outpic ); vout_DisplayPicture( p_vout->p_sys->p_vout, p_outpic ); }