?? vlc_vout.h
字號:
/***************************************************************************** * vlc_video.h: common video definitions ***************************************************************************** * Copyright (C) 1999 - 2008 the VideoLAN team * $Id: 6cbf9321f5c1ed77dc2699afa6576688336c675c $ * * Authors: Vincent Seguin <seguin@via.ecp.fr> * Samuel Hocevar <sam@via.ecp.fr> * Olivier Aubert <oaubert 47 videolan d07 org> * * This program is free software; you can redistribute it and/or modify * 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 * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/#ifndef VLC_VOUT_H_#define VLC_VOUT_H_ 1/** * \file * This file defines common video output structures and functions in vlc */#include <vlc_es.h>#include <vlc_filter.h>/** Description of a planar graphic field */typedef struct plane_t{ uint8_t *p_pixels; /**< Start of the plane's data */ /* Variables used for fast memcpy operations */ int i_lines; /**< Number of lines, including margins */ int i_pitch; /**< Number of bytes in a line, including margins */ /** Size of a macropixel, defaults to 1 */ int i_pixel_pitch; /* Variables used for pictures with margins */ int i_visible_lines; /**< How many visible lines are there ? */ int i_visible_pitch; /**< How many visible pixels are there ? */} plane_t;/** * Video picture * * Any picture destined to be displayed by a video output thread should be * stored in this structure from it's creation to it's effective display. * Picture type and flags should only be modified by the output thread. Note * that an empty picture MUST have its flags set to 0. */struct picture_t{ /** * The properties of the picture */ video_frame_format_t format; /** Picture data - data can always be freely modified, but p_data may * NEVER be modified. A direct buffer can be handled as the plugin * wishes, it can even swap p_pixels buffers. */ uint8_t *p_data; void *p_data_orig; /**< pointer before memalign */ plane_t p[ VOUT_MAX_PLANES ]; /**< description of the planes */ int i_planes; /**< number of allocated planes */ /** \name Type and flags * Should NOT be modified except by the vout thread * @{*/ int i_status; /**< picture flags */ int i_type; /**< is picture a direct buffer ? */ bool b_slow; /**< is picture in slow memory ? */ /**@}*/ /** \name Picture management properties * These properties can be modified using the video output thread API, * but should never be written directly */ /**@{*/ unsigned i_refcount; /**< link reference counter */ mtime_t date; /**< display date */ bool b_force; /**@}*/ /** \name Picture dynamic properties * Those properties can be changed by the decoder * @{ */ bool b_progressive; /**< is it a progressive frame ? */ unsigned int i_nb_fields; /**< # of displayed fields */ bool b_top_field_first; /**< which field is first */ uint8_t *p_q; /**< quantification table */ int i_qstride; /**< quantification stride */ int i_qtype; /**< quantification style */ /**@}*/ /** The picture heap we are attached to */ picture_heap_t* p_heap; /* Some vouts require the picture to be locked before it can be modified */ int (* pf_lock) ( vout_thread_t *, picture_t * ); int (* pf_unlock) ( vout_thread_t *, picture_t * ); /** Private data - the video output plugin might want to put stuff here to * keep track of the picture */ picture_sys_t * p_sys; /** This way the picture_Release can be overloaded */ void (*pf_release)( picture_t * ); /** Next picture in a FIFO a pictures */ struct picture_t *p_next;};/** * This function will create a new picture. * The picture created will implement a default release management compatible * with picture_Hold and picture_Release. This default management will release * picture_sys_t *p_sys field if non NULL. */VLC_EXPORT( picture_t *, picture_New, ( vlc_fourcc_t i_chroma, int i_width, int i_height, int i_aspect ) );/** * This function will force the destruction a picture. * The value of the picture reference count should be 0 before entering this * function. * Unless used for reimplementing pf_release, you should not use this * function but picture_Release. */VLC_EXPORT( void, picture_Delete, ( picture_t * ) );/** * This function will increase the picture reference count. * It will not have any effect on picture obtained from vout */static inline void picture_Hold( picture_t *p_picture ){ if( p_picture->pf_release ) p_picture->i_refcount++;}/** * This function will release a picture. * It will not have any effect on picture obtained from vout */static inline void picture_Release( picture_t *p_picture ){ /* FIXME why do we let pf_release handle the i_refcount ? */ if( p_picture->pf_release ) p_picture->pf_release( p_picture );}/** * Cleanup quantization matrix data and set to 0 */static inline void picture_CleanupQuant( picture_t *p_pic ){ free( p_pic->p_q ); p_pic->p_q = NULL; p_pic->i_qstride = 0; p_pic->i_qtype = 0;}/** * This function will copy all picture dynamic properties. */static inline void picture_CopyProperties( picture_t *p_dst, const picture_t *p_src ){ p_dst->date = p_src->date; p_dst->b_force = p_src->b_force; p_dst->b_progressive = p_src->b_progressive; p_dst->i_nb_fields = p_src->i_nb_fields; p_dst->b_top_field_first = p_src->b_top_field_first; /* FIXME: copy ->p_q and ->p_qstride */}/** * This function will copy the picture pixels. * You can safely copy between pictures that do not have the same size, * only the compatible(smaller) part will be copied. */VLC_EXPORT( void, picture_CopyPixels, ( picture_t *p_dst, const picture_t *p_src ) );VLC_EXPORT( void, plane_CopyPixels, ( plane_t *p_dst, const plane_t *p_src ) );/** * This function will copy both picture dynamic properties and pixels. * You have to notice that sometime a simple picture_Hold may do what * you want without the copy overhead. * Provided for convenience. * * \param p_dst pointer to the destination picture. * \param p_src pointer to the source picture. */static inline void picture_Copy( picture_t *p_dst, const picture_t *p_src ){ picture_CopyPixels( p_dst, p_src ); picture_CopyProperties( p_dst, p_src );}/** * 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 * );};/***************************************************************************** * Flags used to describe the status of a picture *****************************************************************************//* Picture type * FIXME are the values meaningfull ? */enum{ EMPTY_PICTURE = 0, /* empty buffer */ MEMORY_PICTURE = 100, /* heap-allocated buffer */ DIRECT_PICTURE = 200, /* direct buffer */};/* Picture status */enum{ FREE_PICTURE, /* free and not allocated */ RESERVED_PICTURE, /* allocated and reserved */ READY_PICTURE, /* ready for display */ DISPLAYED_PICTURE, /* been displayed but is linked */ DESTROYED_PICTURE, /* allocated but no more used */};/* Quantification type */enum{ QTYPE_MPEG1, QTYPE_MPEG2, QTYPE_H264,};/***************************************************************************** * Shortcuts to access image components *****************************************************************************//* Plane indices */enum{ Y_PLANE = 0, U_PLANE = 1, V_PLANE = 2, A_PLANE = 3,};/* Shortcuts */#define Y_PIXELS p[Y_PLANE].p_pixels#define Y_PITCH p[Y_PLANE].i_pitch#define U_PIXELS p[U_PLANE].p_pixels#define U_PITCH p[U_PLANE].i_pitch#define V_PIXELS p[V_PLANE].p_pixels#define V_PITCH p[V_PLANE].i_pitch#define A_PIXELS p[A_PLANE].p_pixels#define A_PITCH p[A_PLANE].i_pitch/** * \defgroup subpicture Video Subpictures * Subpictures are pictures that should be displayed on top of the video, like * subtitles and OSD * \ingroup video_output * @{ *//** * Video subtitle region spu core private */typedef struct subpicture_region_private_t subpicture_region_private_t;/** * Video subtitle region * * A subtitle region is defined by a picture (graphic) and its rendering * coordinates. * Subtitles contain a list of regions. */struct subpicture_region_t{ video_format_t fmt; /**< format of the picture */ picture_t *p_picture; /**< picture comprising this region */ int i_x; /**< position of region */ int i_y; /**< position of region */ int i_align; /**< alignment within a region */ int i_alpha; /**< transparency */ char *psz_text; /**< text string comprising this region */ char *psz_html; /**< HTML version of subtitle (NULL = use psz_text) */ text_style_t *p_style; /**< a description of the text style formatting */ subpicture_region_t *p_next; /**< next region in the list */ subpicture_region_private_t *p_private; /**< Private data for spu_t *only* */};/* Subpicture region position flags */#define SUBPICTURE_ALIGN_LEFT 0x1#define SUBPICTURE_ALIGN_RIGHT 0x2#define SUBPICTURE_ALIGN_TOP 0x4#define SUBPICTURE_ALIGN_BOTTOM 0x8#define SUBPICTURE_ALIGN_MASK ( SUBPICTURE_ALIGN_LEFT|SUBPICTURE_ALIGN_RIGHT| \ SUBPICTURE_ALIGN_TOP |SUBPICTURE_ALIGN_BOTTOM )/** * This function will create a new subpicture region. * * You must use subpicture_region_Delete to destroy it. */VLC_EXPORT( subpicture_region_t *, subpicture_region_New, ( const video_format_t *p_fmt ) );/** * This function will destroy a subpicture region allocated by * subpicture_region_New. * * You may give it NULL. */VLC_EXPORT( void, subpicture_region_Delete, ( subpicture_region_t *p_region ) );/** * This function will destroy a list of subpicture regions allocated by * subpicture_region_New. * * Provided for convenience. */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -