X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fvideo_filter%2Fopencv_wrapper.c;h=2b7562e4da6d99afa919dfbf04634b5284401f20;hb=78a1fdbcd67c5308f07a0ce3371596fbc7f7eb0c;hp=dfa964e16f055384d8b4843968b401872cd8478d;hpb=5e15258c9ef28558fe2abc941fc1527e02b04c21;p=vlc diff --git a/modules/video_filter/opencv_wrapper.c b/modules/video_filter/opencv_wrapper.c index dfa964e16f..2b7562e4da 100644 --- a/modules/video_filter/opencv_wrapper.c +++ b/modules/video_filter/opencv_wrapper.c @@ -32,7 +32,7 @@ # include "config.h" #endif -#include +#include #include #include @@ -191,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 ); @@ -337,7 +334,7 @@ static int Init( vout_thread_t *p_vout ) if (p_vout->p_sys->psz_inner_name) p_sys->p_opencv->p_module = - module_Need( p_sys->p_opencv, p_sys->psz_inner_name, 0, 0 ); + module_need( p_sys->p_opencv, p_sys->psz_inner_name, 0, 0 ); if( !p_sys->p_opencv->p_module ) { @@ -377,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 ; ) { @@ -388,12 +389,13 @@ static void End( vout_thread_t *p_vout ) { //release the internal opencv filter 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 ); + 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_release( p_vout->p_sys->p_opencv ); p_vout->p_sys->p_opencv = NULL; } + vout_CloseAndRelease( p_vout->p_sys->p_vout ); } /***************************************************************************** @@ -405,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 ) @@ -442,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) @@ -558,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 ); } @@ -572,7 +565,7 @@ static void Render( vout_thread_t *p_vout, picture_t *p_pic ) //This copy is a bit unfortunate but image_Convert can't write into an existing image so it is better to copy the //(say) 16bit YUV image here than a 32bit RGB image somehwere else. //It is also not that expensive in time. - vout_CopyPicture( p_vout, p_outpic, p_pic ); + picture_Copy( p_outpic, p_pic ); VlcPictureToIplImage( p_vout, p_pic); //pass the image to the internal opencv filter for processing if ((p_vout->p_sys->p_opencv) && (p_vout->p_sys->p_opencv->p_module)) @@ -586,7 +579,7 @@ static void Render( vout_thread_t *p_vout, picture_t *p_pic ) 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)) - vout_CopyPicture( p_vout, p_outpic, p_vout->p_sys->p_proc_image ); + picture_Copy( p_outpic, p_vout->p_sys->p_proc_image ); } //calculate duration