X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fvideo_filter%2Fopencv_wrapper.c;h=a2e45ae63b647ebb6848102dccaa47bf378f66a7;hb=21e527a0498ce864c682525bf175ee38e64e038c;hp=1ccbaae89e4170856ad579d9f87e2076889be971;hpb=d9f560ed27fff19588dd01229c24a18e2865758b;p=vlc diff --git a/modules/video_filter/opencv_wrapper.c b/modules/video_filter/opencv_wrapper.c index 1ccbaae89e..a2e45ae63b 100644 --- a/modules/video_filter/opencv_wrapper.c +++ b/modules/video_filter/opencv_wrapper.c @@ -24,10 +24,6 @@ * Preamble *****************************************************************************/ -#include -#include -#include - #ifdef HAVE_CONFIG_H # include "config.h" #endif @@ -35,16 +31,17 @@ #include #include #include +#include #include #include -#include "vlc_filter.h" -#include "filter_common.h" -#include -#include "vlc_image.h" -#include "vlc_input.h" -#include "vlc_playlist.h" +#include +#include +#include + +#include +#include /***************************************************************************** @@ -88,19 +85,19 @@ vlc_module_begin () N_("Scale factor (0.1-2.0)"), N_("Ammount by which to scale the picture before sending it to the internal OpenCV filter"), false ) - add_string( "opencv-chroma", "input", NULL, + add_string( "opencv-chroma", "input", N_("OpenCV filter chroma"), 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, + add_string( "opencv-output", "input", N_("Wrapper filter output"), 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, + add_string( "opencv-verbosity", "error", N_("Wrapper filter verbosity"), N_("Determines wrapper filter verbosity level"), false); change_string_list( verbosity_list, verbosity_list_text, 0); - add_string( "opencv-filter-name", "none", NULL, + add_string( "opencv-filter-name", "none", N_("OpenCV internal filter name"), N_("Name of internal OpenCV plugin filter to use"), false); vlc_module_end () @@ -207,7 +204,8 @@ static int Create( vlc_object_t *p_this ) p_vout->pf_control = Control; /* Retrieve and apply config */ - if( !(psz_chroma = config_GetPsz( p_vout, "opencv-chroma" )) ) + psz_chroma = var_InheritString( p_vout, "opencv-chroma" ); + if( psz_chroma == NULL ) { msg_Err( p_vout, "configuration variable %s empty, using 'grey'", "opencv-chroma" ); @@ -229,7 +227,8 @@ static int Create( vlc_object_t *p_this ) } free( psz_chroma); - if( !(psz_output = config_GetPsz( p_vout, "opencv-output" )) ) + psz_output = var_InheritString( p_vout, "opencv-output" ); + if( psz_output == NULL ) { msg_Err( p_vout, "configuration variable %s empty, using 'input'", "opencv-output" ); @@ -251,7 +250,8 @@ static int Create( vlc_object_t *p_this ) } free( psz_output); - if( !(psz_verbosity = config_GetPsz( p_vout, "opencv-verbosity" )) ) + psz_verbosity = var_InheritString( p_vout, "opencv-verbosity" ); + if( psz_verbosity == NULL ) { msg_Err( p_vout, "configuration variable %s empty, using 'input'", "opencv-verbosity" ); @@ -273,10 +273,10 @@ static int Create( vlc_object_t *p_this ) } free( psz_verbosity); - p_vout->p_sys->psz_inner_name = config_GetPsz( p_vout, "opencv-filter-name" ); - + p_vout->p_sys->psz_inner_name = + var_InheritString( p_vout, "opencv-filter-name" ); p_vout->p_sys->f_scale = - config_GetFloat( p_vout, "opencv-scale" ); + var_InheritFloat( p_vout, "opencv-scale" ); if (p_vout->p_sys->i_verbosity > VERB_WARN) msg_Info(p_vout, "Configuration: opencv-scale: %f, opencv-chroma: %d, " @@ -318,9 +318,9 @@ static int Init( vout_thread_t *p_vout ) fmt.i_y_offset = fmt.i_y_offset * p_sys->f_scale; if (p_sys->i_internal_chroma == GREY) - fmt.i_chroma = VLC_FOURCC('I','4','2','0'); + fmt.i_chroma = VLC_CODEC_I420; else if (p_sys->i_internal_chroma == RGB) - fmt.i_chroma = VLC_FOURCC('R','V','3','2'); + fmt.i_chroma = VLC_CODEC_RGB32; } /* Load the internal opencv filter */ @@ -336,7 +336,6 @@ 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_release( p_sys->p_opencv ); p_sys->p_opencv = NULL; } @@ -356,7 +355,7 @@ static int Init( vout_thread_t *p_vout ) vout_filter_AllocateDirectBuffers( p_vout, VOUT_MAX_PICTURES ); - vout_filter_AddChild( p_vout, p_vout->p_sys->p_vout, NULL, NULL, true ); + vout_filter_AddChild( p_vout, p_vout->p_sys->p_vout, NULL ); return VLC_SUCCESS; } @@ -368,7 +367,7 @@ static void End( vout_thread_t *p_vout ) { vout_sys_t *p_sys = p_vout->p_sys; - vout_filter_DelChild( p_vout, p_sys->p_vout, NULL, NULL, true ); + vout_filter_DelChild( p_vout, p_sys->p_vout, NULL ); vout_CloseAndRelease( p_sys->p_vout ); vout_filter_ReleaseDirectBuffers( p_vout ); @@ -378,7 +377,6 @@ static void End( vout_thread_t *p_vout ) //release the internal opencv filter if( p_sys->p_opencv->p_module ) module_unneed( p_sys->p_opencv, p_sys->p_opencv->p_module ); - vlc_object_detach( p_sys->p_opencv ); vlc_object_release( p_sys->p_opencv ); p_sys->p_opencv = NULL; } @@ -463,13 +461,13 @@ static void VlcPictureToIplImage( vout_thread_t *p_vout, picture_t *p_in ) //rgb2 gives 3 separate planes, this gives 1 interleaved plane //rv24 gives is about 20% faster but gives r&b the wrong way round //and I cant think of an easy way to fix this - fmt_out.i_chroma = VLC_FOURCC('R','V','3','2'); + fmt_out.i_chroma = VLC_CODEC_RGB32; } else if (p_sys->i_internal_chroma == GREY) { //take the I (gray) plane (video seems to commonly be in this fmt so usually the //conversion does nothing) - fmt_out.i_chroma = VLC_FOURCC('I','4','2','0'); + fmt_out.i_chroma = VLC_CODEC_I420; } //convert from the input image @@ -511,7 +509,6 @@ static void VlcPictureToIplImage( vout_thread_t *p_vout, picture_t *p_in ) //Hack the above opencv image array into a picture_t so that it can be sent to //another video filter - p_sys->hacked_pic.p_data_orig = p_sys->p_cv_image; p_sys->hacked_pic.i_planes = planes; p_sys->hacked_pic.format.i_chroma = fmt_out.i_chroma; @@ -564,7 +561,7 @@ static void Render( vout_thread_t *p_vout, picture_t *p_pic ) if ((p_vout->p_sys->p_opencv) && (p_vout->p_sys->p_opencv->p_module)) p_vout->p_sys->p_opencv->pf_video_filter( p_vout->p_sys->p_opencv, &(p_vout->p_sys->hacked_pic)); //copy the processed image into the output image - if ((p_vout->p_sys->p_proc_image) && (p_vout->p_sys->p_proc_image->p_data)) + if ((p_vout->p_sys->p_proc_image) && (p_vout->p_sys->p_proc_image->i_planes > 0)) picture_Copy( p_outpic, p_vout->p_sys->p_proc_image ); }