mirror of https://code.videolan.org/videolan/vlc
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:
parent
f5a493f7f4
commit
1c87e29042
|
@ -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,
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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 )
|
||||
|
|
|
@ -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 *);
|
||||
|
||||
|
|
|
@ -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 )
|
||||
|
|
|
@ -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 *);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue