vlc | branch: master | Steve Lhomme <[email protected]> | Thu Oct 8 14:35:03 2020 +0200| [1c87e2904259201f0c0b08c44a30e38003c36848] | committer: Steve Lhomme
filters: use macro to set the typed Open callback for deinterlacers All deinterlacers have a priority of 0 since they are each specific to an input chroma/video context. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=1c87e2904259201f0c0b08c44a30e38003c36848 --- include/vlc_filter.h | 12 ++++++++++++ modules/hw/d3d11/d3d11_deinterlace.c | 3 +-- modules/hw/d3d11/d3d11_filters.c | 3 +-- modules/hw/d3d11/d3d11_filters.h | 2 +- modules/hw/d3d9/d3d9_filters.c | 3 +-- modules/hw/d3d9/d3d9_filters.h | 2 +- modules/hw/d3d9/dxva2_deinterlace.c | 3 +-- modules/hw/mmal/deinterlace.c | 9 +++------ modules/hw/vaapi/filters.c | 6 ++---- modules/hw/vdpau/deinterlace.c | 8 ++------ modules/video_filter/deinterlace/deinterlace.c | 11 ++++------- 11 files changed, 29 insertions(+), 33 deletions(-) diff --git a/include/vlc_filter.h b/include/vlc_filter.h index 1f130bcb7a..4497435420 100644 --- a/include/vlc_filter.h +++ b/include/vlc_filter.h @@ -140,6 +140,18 @@ struct vlc_filter_operations void (*close)(filter_t *); }; +typedef int (*vlc_open_deinterlace)(filter_t *); + + +#define set_deinterlace_callback( activate ) \ + { \ + vlc_open_deinterlace open__ = activate; \ + (void) open__; \ + set_callback(activate) \ + } \ + set_capability( "video filter", 0 ) \ + add_shortcut( "deinterlace" ) + /** Structure describing a filter * @warning BIG FAT WARNING : the code relies on the first 4 members of * filter_t and decoder_t to be the same, so if you have anything to add, diff --git a/modules/hw/d3d11/d3d11_deinterlace.c b/modules/hw/d3d11/d3d11_deinterlace.c index feaea04507..d37b3c8e05 100644 --- a/modules/hw/d3d11/d3d11_deinterlace.c +++ b/modules/hw/d3d11/d3d11_deinterlace.c @@ -245,9 +245,8 @@ static const struct vlc_filter_operations filter_ops = { .filter_video = Deinterlace, .flush = Flush, .close = D3D11CloseDeinterlace, }; -int D3D11OpenDeinterlace(vlc_object_t *obj) +int D3D11OpenDeinterlace(filter_t *filter) { - filter_t *filter = (filter_t *)obj; HRESULT hr; if (!is_d3d11_opaque(filter->fmt_in.video.i_chroma)) diff --git a/modules/hw/d3d11/d3d11_filters.c b/modules/hw/d3d11/d3d11_filters.c index a887fc131a..53070a76bc 100644 --- a/modules/hw/d3d11/d3d11_filters.c +++ b/modules/hw/d3d11/d3d11_filters.c @@ -593,8 +593,7 @@ vlc_module_begin() add_submodule() set_description(N_("Direct3D11 deinterlace filter")) - set_callback( D3D11OpenDeinterlace ) - add_shortcut ("deinterlace") + set_deinterlace_callback( D3D11OpenDeinterlace ) add_submodule() set_capability( "video converter", 10 ) diff --git a/modules/hw/d3d11/d3d11_filters.h b/modules/hw/d3d11/d3d11_filters.h index fbc1e2fd6a..411afda4b9 100644 --- a/modules/hw/d3d11/d3d11_filters.h +++ b/modules/hw/d3d11/d3d11_filters.h @@ -28,7 +28,7 @@ #include "../../video_chroma/d3d11_fmt.h" -int D3D11OpenDeinterlace(vlc_object_t *); +int D3D11OpenDeinterlace(filter_t *); int D3D11OpenConverter(vlc_object_t *); int D3D11OpenCPUConverter(vlc_object_t *); diff --git a/modules/hw/d3d9/d3d9_filters.c b/modules/hw/d3d9/d3d9_filters.c index 8f211a3e2c..deb6b06744 100644 --- a/modules/hw/d3d9/d3d9_filters.c +++ b/modules/hw/d3d9/d3d9_filters.c @@ -513,8 +513,7 @@ vlc_module_begin() add_submodule() set_description(N_("Direct3D9 deinterlace filter")) - set_callback( D3D9OpenDeinterlace ) - add_shortcut ("deinterlace") + set_deinterlace_callback( D3D9OpenDeinterlace ) add_submodule() set_capability( "video converter", 10 ) diff --git a/modules/hw/d3d9/d3d9_filters.h b/modules/hw/d3d9/d3d9_filters.h index c098e07a1b..219b079bbc 100644 --- a/modules/hw/d3d9/d3d9_filters.h +++ b/modules/hw/d3d9/d3d9_filters.h @@ -28,7 +28,7 @@ #include "../../video_chroma/d3d9_fmt.h" -int D3D9OpenDeinterlace(vlc_object_t *); +int D3D9OpenDeinterlace(filter_t *); int D3D9OpenConverter(vlc_object_t *); int D3D9OpenCPUConverter(vlc_object_t *); diff --git a/modules/hw/d3d9/dxva2_deinterlace.c b/modules/hw/d3d9/dxva2_deinterlace.c index a520fb3bbc..4e28f52c81 100644 --- a/modules/hw/d3d9/dxva2_deinterlace.c +++ b/modules/hw/d3d9/dxva2_deinterlace.c @@ -338,9 +338,8 @@ static const struct vlc_filter_operations filter_ops = { .filter_video = Deinterlace, .flush = Flush, .close = D3D9CloseDeinterlace, }; -int D3D9OpenDeinterlace(vlc_object_t *obj) +int D3D9OpenDeinterlace(filter_t *filter) { - filter_t *filter = (filter_t *)obj; filter_sys_t *sys; HINSTANCE hdecoder_dll = NULL; HRESULT hr; diff --git a/modules/hw/mmal/deinterlace.c b/modules/hw/mmal/deinterlace.c index 45df307ee6..e70def780b 100644 --- a/modules/hw/mmal/deinterlace.c +++ b/modules/hw/mmal/deinterlace.c @@ -60,16 +60,14 @@ #define MMAL_DEINTERLACE_FULL_RATE_TEXT N_("Full output framerate") #define MMAL_DEINTERLACE_FULL_RATE_LONGTEXT N_("Full output framerate. 1 output frame for each interlaced field input") -static int OpenMmalDeinterlace(vlc_object_t *); +static int OpenMmalDeinterlace(filter_t *); vlc_module_begin() set_shortname(N_("MMAL deinterlace")) set_description(N_("MMAL-based deinterlace filter plugin")) - set_capability("video filter", 900) set_category(CAT_VIDEO) set_subcategory(SUBCAT_VIDEO_VFILTER) - set_callback(OpenMmalDeinterlace) - add_shortcut("deinterlace") + set_deinterlace_callback(OpenMmalDeinterlace) add_bool(MMAL_DEINTERLACE_NO_QPU, false, MMAL_DEINTERLACE_NO_QPU_TEXT, MMAL_DEINTERLACE_NO_QPU_LONGTEXT, true); add_bool(MMAL_DEINTERLACE_ADV, false, MMAL_DEINTERLACE_ADV_TEXT, @@ -418,9 +416,8 @@ static const struct vlc_filter_operations filter_pass_ops = { .filter_video = pass_deinterlace, .close = CloseMmalDeinterlace, }; -static int OpenMmalDeinterlace(vlc_object_t *p_this) +static int OpenMmalDeinterlace(filter_t *filter) { - filter_t *filter = (filter_t*)p_this; int32_t frame_duration = filter->fmt_in.video.i_frame_rate != 0 ? CLOCK_FREQ * filter->fmt_in.video.i_frame_rate_base / filter->fmt_in.video.i_frame_rate : 0; diff --git a/modules/hw/vaapi/filters.c b/modules/hw/vaapi/filters.c index e9a7768cf8..de79b4b663 100644 --- a/modules/hw/vaapi/filters.c +++ b/modules/hw/vaapi/filters.c @@ -1096,10 +1096,9 @@ static const struct vlc_filter_operations Deinterlace_ops = { }; static int -OpenDeinterlace(vlc_object_t * obj) +OpenDeinterlace(filter_t *filter) { VAProcPipelineCaps pipeline_caps; - filter_t *const filter = (filter_t *)obj; struct deint_data *const p_data = calloc(1, sizeof(*p_data)); if (!p_data) return VLC_ENOMEM; @@ -1146,8 +1145,7 @@ vlc_module_begin() add_shortcut("adjust") add_submodule() - set_callback(OpenDeinterlace) - add_shortcut("deinterlace") + set_deinterlace_callback(OpenDeinterlace) add_submodule() set_callback(OpenDenoiseFilter) diff --git a/modules/hw/vdpau/deinterlace.c b/modules/hw/vdpau/deinterlace.c index f14ed515a0..c2c4f85083 100644 --- a/modules/hw/vdpau/deinterlace.c +++ b/modules/hw/vdpau/deinterlace.c @@ -106,10 +106,8 @@ static const struct vlc_filter_operations filter_ops = { .filter_video = Deinterlace, .close = Close, }; -static int Open(vlc_object_t *obj) +static int Open(filter_t *filter) { - filter_t *filter = (filter_t *)obj; - if ( filter->vctx_in == NULL || vlc_video_context_GetType(filter->vctx_in) != VLC_VIDEO_CONTEXT_VDPAU ) return VLC_EGENERIC; @@ -138,9 +136,7 @@ static int Open(vlc_object_t *obj) vlc_module_begin() set_description(N_("VDPAU deinterlacing filter")) - set_capability("video filter", 0) set_category(CAT_VIDEO) set_subcategory(SUBCAT_VIDEO_VFILTER) - set_callback(Open) - add_shortcut ("deinterlace") + set_deinterlace_callback(Open) vlc_module_end() diff --git a/modules/video_filter/deinterlace/deinterlace.c b/modules/video_filter/deinterlace/deinterlace.c index 4822377e2c..62bd077c0a 100644 --- a/modules/video_filter/deinterlace/deinterlace.c +++ b/modules/video_filter/deinterlace/deinterlace.c @@ -106,7 +106,7 @@ static picture_t *Deinterlace( filter_t *p_filter, picture_t *p_pic ); * Open() is atomic: if an error occurs, the state of p_this * is left as it was before the call to this function. * - * @param p_this The filter instance as vlc_object_t. + * @param p_filter The filter instance. * @return VLC error code * @retval VLC_SUCCESS All ok, filter set up and started. * @retval VLC_ENOMEM Memory allocation error, initialization aborted. @@ -114,7 +114,7 @@ static picture_t *Deinterlace( filter_t *p_filter, picture_t *p_pic ); * @see IsChromaSupported() * @see SetFilterMethod() */ -static int Open( vlc_object_t *p_this ); +static int Open( filter_t *p_filter ); /** * Resets the filter state, including resetting all algorithm-specific state @@ -290,7 +290,6 @@ static int Mouse( filter_t *p_filter, vlc_module_begin () set_description( N_("Deinterlacing video filter") ) set_shortname( N_("Deinterlace" )) - set_capability( "video filter", 0 ) set_category( CAT_VIDEO ) set_subcategory( SUBCAT_VIDEO_VFILTER ) @@ -306,8 +305,7 @@ vlc_module_begin () PHOSPHOR_DIMMER_LONGTEXT, true ) change_integer_list( phosphor_dimmer_list, phosphor_dimmer_list_text ) change_safe () - add_shortcut( "deinterlace" ) - set_callback( Open ) + set_deinterlace_callback( Open ) vlc_module_end () /***************************************************************************** @@ -497,9 +495,8 @@ static const struct vlc_filter_operations filter_ops = { * Open *****************************************************************************/ -int Open( vlc_object_t *p_this ) +int Open( filter_t *p_filter ) { - filter_t *p_filter = (filter_t*)p_this; filter_sys_t *p_sys; const vlc_fourcc_t fourcc = p_filter->fmt_in.video.i_chroma; _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
