X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvideo_output.h;h=781609d1a26fd7c42336c1a2f083801bab2eb2fa;hb=744adcaa056f0c8051d8db9311bb0e4220a31d1f;hp=d3fd4b7fa92f5219a20c396a8e293e24c2d7e015;hpb=5f2aa46677df7327d3a961eb72cf07a2501fa8b9;p=vlc diff --git a/include/video_output.h b/include/video_output.h index d3fd4b7fa9..781609d1a2 100644 --- a/include/video_output.h +++ b/include/video_output.h @@ -1,8 +1,8 @@ /***************************************************************************** * video_output.h : video output thread ***************************************************************************** - * Copyright (C) 1999, 2000 VideoLAN - * $Id: video_output.h,v 1.101 2003/11/05 09:16:55 gbazin Exp $ + * Copyright (C) 1999, 2000 the VideoLAN team + * $Id$ * * Authors: Vincent Seguin * Samuel Hocevar @@ -11,7 +11,7 @@ * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -73,7 +73,7 @@ struct vout_thread_t 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. @@ -89,8 +89,11 @@ struct vout_thread_t unsigned int i_window_width; /**< video window width */ unsigned int i_window_height; /**< video window height */ unsigned int i_alignment; /**< video alignment in window */ + + intf_thread_t *p_parent_intf; /**< parent interface for embedded + vout (if any) */ /**@}*/ - + /** \name Plugin used and shortcuts to access its capabilities */ /**@{*/ module_t * p_module; @@ -99,6 +102,10 @@ struct 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 Statistics @@ -116,11 +123,17 @@ struct vout_thread_t picture_heap_t output; /**< direct buffers */ vlc_bool_t b_direct; /**< rendered are like direct ? */ vout_chroma_t chroma; /**< translation tables */ + + 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 and subpicture heaps */ - picture_t p_picture[2*VOUT_MAX_PICTURES]; /**< pictures */ - subpicture_t p_subpicture[VOUT_MAX_PICTURES]; /**< subpictures */ + /* Picture heap */ + picture_t p_picture[2*VOUT_MAX_PICTURES+1]; /**< pictures */ + + /* Subpicture unit */ + spu_t *p_spu; /* Statistics */ count_t c_loops; @@ -136,13 +149,8 @@ struct vout_thread_t char *psz_filter_chain; vlc_bool_t b_filter_change; - /* text renderer data */ - text_renderer_sys_t * p_text_renderer_data; /**< private data for - the text renderer */ - module_t * p_text_renderer_module; /**< text renderer module */ - /** callback used when a new string needs to be shown on the vout */ - int ( *pf_add_string ) ( vout_thread_t *, char *, text_style_t *, int, - int, int, mtime_t, mtime_t ); + /* Misc */ + vlc_bool_t b_snapshot; /**< take one snapshot on the next loop */ }; #define I_OUTPUTPICTURES p_vout->output.i_pictures @@ -156,13 +164,13 @@ struct vout_thread_t * @{ */ /** b_info changed */ -#define VOUT_INFO_CHANGE 0x0001 +#define VOUT_INFO_CHANGE 0x0001 /** b_grayscale changed */ -#define VOUT_GRAYSCALE_CHANGE 0x0002 +#define VOUT_GRAYSCALE_CHANGE 0x0002 /** b_interface changed */ -#define VOUT_INTF_CHANGE 0x0004 +#define VOUT_INTF_CHANGE 0x0004 /** b_scale changed */ -#define VOUT_SCALE_CHANGE 0x0008 +#define VOUT_SCALE_CHANGE 0x0008 /** gamma changed */ #define VOUT_GAMMA_CHANGE 0x0010 /** b_cursor changed */ @@ -175,6 +183,8 @@ struct vout_thread_t #define VOUT_DEPTH_CHANGE 0x0400 /** change chroma tables */ #define VOUT_CHROMA_CHANGE 0x0800 +/** change/recreate picture buffers */ +#define VOUT_PICTURE_BUFFERS_CHANGE 0x1000 /**@}*/ /* Alignment flags */ @@ -190,10 +200,10 @@ struct vout_thread_t /***************************************************************************** * Prototypes *****************************************************************************/ -#define vout_Request(a,b,c,d,e,f) __vout_Request(VLC_OBJECT(a),b,c,d,e,f) -VLC_EXPORT( vout_thread_t *, __vout_Request, ( vlc_object_t *, vout_thread_t *, unsigned int, unsigned int, uint32_t, unsigned int ) ); -#define vout_Create(a,b,c,d,e) __vout_Create(VLC_OBJECT(a),b,c,d,e) -VLC_EXPORT( vout_thread_t *, __vout_Create, ( vlc_object_t *, unsigned int, unsigned int, uint32_t, unsigned int ) ); +#define vout_Request(a,b,c) __vout_Request(VLC_OBJECT(a),b,c) +VLC_EXPORT( vout_thread_t *, __vout_Request, ( vlc_object_t *, vout_thread_t *, video_format_t * ) ); +#define vout_Create(a,b) __vout_Create(VLC_OBJECT(a),b) +VLC_EXPORT( vout_thread_t *, __vout_Create, ( vlc_object_t *, video_format_t * ) ); VLC_EXPORT( void, vout_Destroy, ( vout_thread_t * ) ); VLC_EXPORT( int, vout_VarCallback, ( vlc_object_t *, const char *, vlc_value_t, vlc_value_t, void * ) ); @@ -201,8 +211,6 @@ VLC_EXPORT( int, vout_ChromaCmp, ( uint32_t, uint32_t ) ); VLC_EXPORT( picture_t *, vout_CreatePicture, ( vout_thread_t *, vlc_bool_t, vlc_bool_t, unsigned int ) ); VLC_EXPORT( void, vout_InitFormat, ( video_frame_format_t *, uint32_t, int, int, int ) ); -VLC_EXPORT( void, vout_InitPicture, ( vlc_object_t *, picture_t *, uint32_t, int, int, int ) ); -VLC_EXPORT( void, vout_AllocatePicture,( vout_thread_t *, picture_t *, uint32_t, int, int, 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_DatePicture, ( vout_thread_t *, picture_t *, mtime_t ) ); @@ -211,18 +219,44 @@ VLC_EXPORT( void, vout_UnlinkPicture, ( vout_thread_t *, picture_t * VLC_EXPORT( void, vout_PlacePicture, ( vout_thread_t *, unsigned int, unsigned int, unsigned int *, unsigned int *, unsigned int *, unsigned int * ) ); picture_t * vout_RenderPicture ( vout_thread_t *, picture_t *, subpicture_t * ); -/** - * \addtogroup subpicture - * @{ - */ -VLC_EXPORT( subpicture_t *, vout_CreateSubPicture, ( vout_thread_t *, int ) ); -VLC_EXPORT( void, vout_DestroySubPicture, ( vout_thread_t *, subpicture_t * ) ); -VLC_EXPORT( void, vout_DisplaySubPicture, ( vout_thread_t *, subpicture_t * ) ); - -subpicture_t * vout_SortSubPictures ( vout_thread_t *, mtime_t ); -void vout_RenderSubPictures ( vout_thread_t *, picture_t *, - subpicture_t * ); -/** @}*/ + +VLC_EXPORT( int, vout_vaControlDefault, ( vout_thread_t *, int, va_list ) ); +VLC_EXPORT( void *, vout_RequestWindow, ( vout_thread_t *, int *, int *, unsigned int *, unsigned int * ) ); +VLC_EXPORT( void, vout_ReleaseWindow, ( vout_thread_t *, void * ) ); +VLC_EXPORT( int, vout_ControlWindow, ( vout_thread_t *, void *, int, va_list ) ); +void vout_IntfInit( vout_thread_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; +} + +enum output_query_e +{ + VOUT_SET_ZOOM, /* arg1= double res= */ + VOUT_SET_STAY_ON_TOP, /* arg1= vlc_bool_t res= */ + VOUT_REPARENT, + VOUT_SNAPSHOT, + VOUT_CLOSE, + VOUT_SET_FOCUS /* arg1= vlc_bool_t res= */ +}; + /** * @} */