X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fvideo_filter%2Fmotiondetect.c;h=a7062cfac662f7be0f0317b192c847acbc9cfd89;hb=addf17f0887177964c56bd27856f88de3f0e3509;hp=34b6ed72eaeda69cf9867141a2e4a2fced03f199;hpb=7fa8ead1a2192a06c8d5f7709bb18a614337199c;p=vlc diff --git a/modules/video_filter/motiondetect.c b/modules/video_filter/motiondetect.c index 34b6ed72ea..a7062cfac6 100644 --- a/modules/video_filter/motiondetect.c +++ b/modules/video_filter/motiondetect.c @@ -32,9 +32,8 @@ #include #include #include -#include -#include "vlc_filter.h" +#include #include "filter_picture.h" /***************************************************************************** @@ -45,16 +44,16 @@ static void Destroy ( vlc_object_t * ); #define FILTER_PREFIX "motiondetect-" -vlc_module_begin(); - set_description( N_("Motion detect video filter") ); - set_shortname( N_( "Motion Detect" )); - set_category( CAT_VIDEO ); - set_subcategory( SUBCAT_VIDEO_VFILTER ); - set_capability( "video filter2", 0 ); +vlc_module_begin () + set_description( N_("Motion detect video filter") ) + set_shortname( N_( "Motion Detect" )) + set_category( CAT_VIDEO ) + set_subcategory( SUBCAT_VIDEO_VFILTER ) + set_capability( "video filter2", 0 ) - add_shortcut( "motion" ); - set_callbacks( Create, Destroy ); -vlc_module_end(); + add_shortcut( "motion" ) + set_callbacks( Create, Destroy ) +vlc_module_end () /***************************************************************************** @@ -104,7 +103,7 @@ static int Create( vlc_object_t *p_this ) break; default: - msg_Err( p_filter, "Unsupported input chroma (%4s)", + msg_Err( p_filter, "Unsupported input chroma (%4.4s)", (char*)&(p_fmt->i_chroma) ); return VLC_EGENERIC; } @@ -115,8 +114,7 @@ static int Create( vlc_object_t *p_this ) return VLC_ENOMEM; p_sys->b_old = false; - p_sys->p_old = picture_New( p_fmt->i_chroma, - p_fmt->i_width, p_fmt->i_height, 0 ); + p_sys->p_old = picture_NewFromFormat( p_fmt ); p_sys->p_buf = calloc( p_fmt->i_width * p_fmt->i_height, sizeof(*p_sys->p_buf) ); p_sys->p_buf2 = calloc( p_fmt->i_width * p_fmt->i_height, sizeof(*p_sys->p_buf) ); @@ -157,9 +155,6 @@ static picture_t *Filter( filter_t *p_filter, picture_t *p_inpic ) picture_t *p_outpic; - const uint8_t *p_inpix = p_inpic->p[Y_PLANE].p_pixels; - const int i_src_pitch = p_inpic->p[Y_PLANE].i_pitch; - uint8_t *p_oldpix = p_sys->p_old->p[Y_PLANE].p_pixels; const int i_old_pitch = p_sys->p_old->p[Y_PLANE].i_pitch; uint32_t *p_buf = p_sys->p_buf; @@ -170,12 +165,8 @@ static picture_t *Filter( filter_t *p_filter, picture_t *p_inpic ) if( !p_inpic ) return NULL; - if( !p_sys->b_old ) - { - picture_Copy( p_sys->p_old, p_inpic ); - p_sys->b_old = true; - return p_inpic; - } + const uint8_t *p_inpix = p_inpic->p[Y_PLANE].p_pixels; + const int i_src_pitch = p_inpic->p[Y_PLANE].i_pitch; p_outpic = filter_NewPicture( p_filter ); if( !p_outpic ) @@ -185,6 +176,14 @@ static picture_t *Filter( filter_t *p_filter, picture_t *p_inpic ) } picture_Copy( p_outpic, p_inpic ); + if( !p_sys->b_old ) + { + picture_Copy( p_sys->p_old, p_inpic ); + picture_Release( p_inpic ); + p_sys->b_old = true; + return p_outpic; + } + /** * Substract Y planes */ @@ -198,16 +197,15 @@ static picture_t *Filter( filter_t *p_filter, picture_t *p_inpic ) int i_chroma_dy; switch( p_inpic->format.i_chroma ) { - case VLC_FOURCC('I','4','2','0'): - case VLC_FOURCC('I','Y','U','V'): - case VLC_FOURCC('J','4','2','0'): - case VLC_FOURCC('Y','V','1','2'): + case VLC_CODEC_I420: + case VLC_CODEC_J420: + case VLC_CODEC_YV12: i_chroma_dx = 2; i_chroma_dy = 2; break; - case VLC_FOURCC('I','4','2','2'): - case VLC_FOURCC('J','4','2','2'): + case VLC_CODEC_I422: + case VLC_CODEC_J422: i_chroma_dx = 2; i_chroma_dy = 1; break; @@ -294,7 +292,7 @@ static picture_t *FilterPacked( filter_t *p_filter, picture_t *p_inpic ) if( GetPackedYuvOffsets( p_fmt->i_chroma, &i_y_offset, &i_u_offset, &i_v_offset ) ) { - msg_Warn( p_filter, "Unsupported input chroma (%4s)", + msg_Warn( p_filter, "Unsupported input chroma (%4.4s)", (char*)&p_fmt->i_chroma ); return p_inpic; }