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.
This commit is contained in:
Steve Lhomme 2020-10-08 14:35:03 +02:00
parent f5a493f7f4
commit 1c87e29042
11 changed files with 29 additions and 33 deletions

View File

@ -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,

View File

@ -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))

View File

@ -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 )

View File

@ -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 *);

View File

@ -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 )

View File

@ -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 *);

View File

@ -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;

View File

@ -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;

View File

@ -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)

View File

@ -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()

View File

@ -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;