X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_vout.h;h=ad08f3975f9d39d0e8356727b7544cefc8b71da7;hb=c12acbd7d48431d7b5029d765e69e87378aca7a2;hp=0d64ccbefb5d3563959fbcb135349f0ac3c8ff8a;hpb=fd584ea3aea2d53f08ff05b47ea393012531cb85;p=vlc diff --git a/include/vlc_vout.h b/include/vlc_vout.h index 0d64ccbefb..ad08f3975f 100644 --- a/include/vlc_vout.h +++ b/include/vlc_vout.h @@ -35,59 +35,10 @@ #include #include -/** - * Video picture heap, either render (to store pictures used - * by the decoder) or output (to store pictures displayed by the vout plugin) - */ -struct picture_heap_t -{ - int i_pictures; /**< current heap size */ - - /* \name Picture static properties - * Those properties are fixed at initialization and should NOT be modified - * @{ - */ - unsigned int i_width; /**< picture width */ - unsigned int i_height; /**< picture height */ - vlc_fourcc_t i_chroma; /**< picture chroma */ - unsigned int i_aspect; /**< aspect ratio */ - /**@}*/ - - /* Real pictures */ - picture_t* pp_picture[VOUT_MAX_PICTURES]; /**< pictures */ - int i_last_used_pic; /**< last used pic in heap */ - bool b_allow_modify_pics; - - /* Stuff used for truecolor RGB planes */ - uint32_t i_rmask; int i_rrshift, i_lrshift; - uint32_t i_gmask; int i_rgshift, i_lgshift; - uint32_t i_bmask; int i_rbshift, i_lbshift; - - /** Stuff used for palettized RGB planes */ - void (* pf_setpalette) ( vout_thread_t *, uint16_t *, uint16_t *, uint16_t * ); -}; - -/* Default subpicture channel ID */ -#define DEFAULT_CHAN 1 - /***************************************************************************** * Prototypes *****************************************************************************/ -/** - * Initialise different fields of a picture_t and allocates the picture buffer. - * \param p_this a vlc object - * \param p_pic pointer to the picture structure. - * \param i_chroma the wanted chroma for the picture. - * \param i_width the wanted width for the picture. - * \param i_height the wanted height for the picture. - * \param i_aspect the wanted aspect ratio for the picture. - */ -#define vout_AllocatePicture(a,b,c,d,e,f) \ - __vout_AllocatePicture(VLC_OBJECT(a),b,c,d,e,f) -VLC_EXPORT( int, __vout_AllocatePicture,( vlc_object_t *p_this, picture_t *p_pic, uint32_t i_chroma, int i_width, int i_height, int i_aspect ) ); - - /** * \defgroup video_output Video Output * This module describes the programming interface for video output threads. @@ -96,6 +47,17 @@ VLC_EXPORT( int, __vout_AllocatePicture,( vlc_object_t *p_this, picture_t *p_pic * @{ */ +/** + * Vout configuration + */ +typedef struct { + vout_thread_t *vout; + vlc_object_t *input; + bool change_fmt; + const video_format_t *fmt; + unsigned dpb_size; +} vout_configuration_t; + /** * Video ouput thread private structure */ @@ -108,107 +70,13 @@ typedef struct vout_thread_sys_t vout_thread_sys_t; * is represented by a video output thread, and described using the following * structure. */ -struct vout_thread_t -{ +struct vout_thread_t { VLC_COMMON_MEMBERS - /** \name Thread properties and locks */ - /**@{*/ - vlc_mutex_t picture_lock; /**< picture heap lock */ - vlc_mutex_t change_lock; /**< thread change lock */ - vout_sys_t * p_sys; /**< system output method */ - /**@}*/ - - /** \name Current display properties */ - /**@{*/ - uint16_t i_changes; /**< changes made to the thread. - \see \ref vout_changes */ - unsigned b_fullscreen:1; /**< toogle fullscreen display */ - unsigned b_autoscale:1; /**< auto scaling picture or not */ - unsigned b_on_top:1; /**< stay always on top of other windows */ - int i_zoom; /**< scaling factor if no auto */ - unsigned int i_window_width; /**< video window width */ - unsigned int i_window_height; /**< video window height */ - unsigned int i_alignment; /**< video alignment in window */ - - /**@}*/ - - /** \name Plugin used and shortcuts to access its capabilities */ - /**@{*/ - module_t * p_module; - int ( *pf_init ) ( vout_thread_t * ); - void ( *pf_end ) ( vout_thread_t * ); - int ( *pf_manage ) ( vout_thread_t * ); - void ( *pf_render ) ( vout_thread_t *, picture_t * ); - void ( *pf_display ) ( vout_thread_t *, picture_t * ); - void ( *pf_swap ) ( vout_thread_t * ); /* OpenGL only */ - int ( *pf_lock ) ( vout_thread_t * ); /* OpenGL only */ - void ( *pf_unlock ) ( vout_thread_t * ); /* OpenGL only */ - int ( *pf_control ) ( vout_thread_t *, int, va_list ); - /**@}*/ - - /** \name Video heap and translation tables */ - /**@{*/ - int i_heap_size; /**< heap size */ - picture_heap_t render; /**< rendered pictures */ - picture_heap_t output; /**< direct buffers */ - - video_format_t fmt_render; /* render format (from the decoder) */ - video_format_t fmt_in; /* input (modified render) format */ - video_format_t fmt_out; /* output format (for the video output) */ - /**@}*/ - - /* Picture heap */ - picture_t p_picture[2*VOUT_MAX_PICTURES+1]; /**< pictures */ - - /* Subpicture unit */ - spu_t *p_spu; - - /* Video output configuration */ - config_chain_t *p_cfg; - /* Private vout_thread data */ vout_thread_sys_t *p; }; -#define I_OUTPUTPICTURES p_vout->output.i_pictures -#define PP_OUTPUTPICTURE p_vout->output.pp_picture -#define I_RENDERPICTURES p_vout->render.i_pictures -#define PP_RENDERPICTURE p_vout->render.pp_picture - -/** \defgroup vout_changes Flags for changes - * These flags are set in the vout_thread_t::i_changes field when another - * thread changed a variable - * @{ - */ -/** b_info changed */ -#define VOUT_INFO_CHANGE 0x0001 -/** b_interface changed */ -#define VOUT_INTF_CHANGE 0x0004 -/** b_autoscale changed */ -#define VOUT_SCALE_CHANGE 0x0008 -/** b_on_top changed */ -#define VOUT_ON_TOP_CHANGE 0x0010 -/** b_cursor changed */ -#define VOUT_CURSOR_CHANGE 0x0020 -/** b_fullscreen changed */ -#define VOUT_FULLSCREEN_CHANGE 0x0040 -/** i_zoom changed */ -#define VOUT_ZOOM_CHANGE 0x0080 -/** size changed */ -#define VOUT_SIZE_CHANGE 0x0200 -/** depth changed */ -#define VOUT_DEPTH_CHANGE 0x0400 -/** change chroma tables */ -#define VOUT_CHROMA_CHANGE 0x0800 -/** cropping parameters changed */ -#define VOUT_CROP_CHANGE 0x1000 -/** aspect ratio changed */ -#define VOUT_ASPECT_CHANGE 0x2000 -/** change/recreate picture buffers */ -#define VOUT_PICTURE_BUFFERS_CHANGE 0x4000 -/**@}*/ - /* Alignment flags */ #define VOUT_ALIGN_LEFT 0x0001 #define VOUT_ALIGN_RIGHT 0x0002 @@ -217,52 +85,29 @@ struct vout_thread_t #define VOUT_ALIGN_BOTTOM 0x0008 #define VOUT_ALIGN_VMASK 0x000C -#define MAX_JITTER_SAMPLES 20 - -/* scaling factor (applied to i_zoom in vout_thread_t) */ -#define ZOOM_FP_FACTOR 1000 - /***************************************************************************** * Prototypes *****************************************************************************/ /** - * This function will - * - returns a suitable vout (if requested by a non NULL p_fmt) - * - recycles an old vout (if given) by either destroying it or by saving it - * for latter usage. + * Returns a suitable vout or release the given one. * - * The purpose of this function is to avoid unnecessary creation/destruction of - * vout (and to allow optional vout reusing). + * If cfg->fmt is non NULL and valid, a vout will be returned, reusing cfg->vout + * is possible, otherwise it returns NULL. + * If cfg->vout is not used, it will be closed and released. * - * You can call vout_Request on a vout created by vout_Create or by a previous - * call to vout_Request. * You can release the returned value either by vout_Request or vout_Close() * followed by a vlc_object_release() or shorter vout_CloseAndRelease() * - * \param p_this a vlc object - * \param p_vout a vout candidate - * \param p_fmt the video format requested or NULL - * \return a vout if p_fmt is non NULL and the request is successfull, NULL - * otherwise + * \param object a vlc object + * \param cfg the video configuration requested. + * \return a vout */ -#define vout_Request(a,b,c) __vout_Request(VLC_OBJECT(a),b,c) -VLC_EXPORT( vout_thread_t *, __vout_Request, ( vlc_object_t *p_this, vout_thread_t *p_vout, video_format_t *p_fmt ) ); +VLC_EXPORT( vout_thread_t *, vout_Request, ( vlc_object_t *object, const vout_configuration_t *cfg ) ); +#define vout_Request(a,b) vout_Request(VLC_OBJECT(a),b) /** - * This function will create a suitable vout for a given p_fmt. It will never - * reuse an already existing unused vout. - * - * You have to call either vout_Close or vout_Request on the returned value - * \param p_this a vlc object to which the returned vout will be attached - * \param p_fmt the video format requested - * \return a vout if the request is successfull, NULL otherwise - */ -#define vout_Create(a,b) __vout_Create(VLC_OBJECT(a),b) -VLC_EXPORT( vout_thread_t *, __vout_Create, ( vlc_object_t *p_this, video_format_t *p_fmt ) ); - -/** - * This function will close a vout created by vout_Create or vout_Request. + * This function will close a vout created by vout_Request. * The associated vout module is closed. * Note: It is not released yet, you'll have to call vlc_object_release() * or use the convenient vout_CloseAndRelease(). @@ -301,55 +146,18 @@ VLC_EXPORT( int, vout_GetSnapshot, ( vout_thread_t *p_vout, const char *psz_format, mtime_t i_timeout ) ); /* */ -VLC_EXPORT( int, vout_ChromaCmp, ( uint32_t, uint32_t ) ); - -VLC_EXPORT( picture_t *, vout_CreatePicture, ( vout_thread_t *, bool, bool, unsigned int ) ); -VLC_EXPORT( void, vout_DestroyPicture, ( vout_thread_t *, picture_t * ) ); -VLC_EXPORT( void, vout_DisplayPicture, ( vout_thread_t *, picture_t * ) ); -VLC_EXPORT( void, vout_LinkPicture, ( vout_thread_t *, picture_t * ) ); -VLC_EXPORT( void, vout_UnlinkPicture, ( vout_thread_t *, picture_t * ) ); -VLC_EXPORT( void, vout_PlacePicture, ( const vout_thread_t *, unsigned int, unsigned int, unsigned int *, unsigned int *, unsigned int *, unsigned int * ) ); - -/** - * Return the spu_t object associated to a vout_thread_t. - * - * The return object is valid only as long as the vout is. You must not - * release the spu_t object returned. - * It cannot return NULL so no need to check. - */ -VLC_EXPORT( spu_t *, vout_GetSpu, ( vout_thread_t * ) ); - -void vout_IntfInit( vout_thread_t * ); -VLC_EXPORT( void, vout_EnableFilter, ( vout_thread_t *, char *,bool , bool ) ); +VLC_EXPORT( picture_t *, vout_GetPicture, ( vout_thread_t * ) ); +VLC_EXPORT( void, vout_PutPicture, ( vout_thread_t *, picture_t * ) ); +VLC_EXPORT( void, vout_HoldPicture, ( vout_thread_t *, picture_t * ) ); +VLC_EXPORT( void, vout_ReleasePicture, ( vout_thread_t *, picture_t * ) ); -static inline int vout_vaControl( vout_thread_t *p_vout, int i_query, - va_list args ) -{ - if( p_vout->pf_control ) - return p_vout->pf_control( p_vout, i_query, args ); - else - return VLC_EGENERIC; -} - -static inline int vout_Control( vout_thread_t *p_vout, int i_query, ... ) -{ - va_list args; - int i_result; - - va_start( args, i_query ); - i_result = vout_vaControl( p_vout, i_query, args ); - va_end( args ); - return i_result; -} +/* */ +VLC_EXPORT( void, vout_PutSubpicture, ( vout_thread_t *, subpicture_t * ) ); +VLC_EXPORT( int, vout_RegisterSubpictureChannel, ( vout_thread_t * ) ); +VLC_EXPORT( void, vout_FlushSubpictureChannel, ( vout_thread_t *, int ) ); -enum output_query_e -{ - VOUT_SET_SIZE, /* arg1= unsigned int, arg2= unsigned int, res= */ - VOUT_SET_STAY_ON_TOP, /* arg1= bool res= */ - VOUT_SET_VIEWPORT, /* arg1= view rect, arg2=clip rect, res= */ - VOUT_REDRAW_RECT, /* arg1= area rect, res= */ -}; +VLC_EXPORT( void, vout_EnableFilter, ( vout_thread_t *, const char *,bool , bool ) ); /**@}*/