📄 dynamicoverlay.h
字号:
/***************************************************************************** * dynamicoverlay.h : dynamic overlay plugin for vlc ***************************************************************************** * Copyright (C) 2008 the VideoLAN team * $Id$ * * Author: Jean-Paul Saman <jpsaman@videolan.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 DYNAMIC_OVERLAY_H#define DYNAMIC_OVERLAY_H 1#include <vlc_common.h>#include <vlc_filter.h>/***************************************************************************** * buffer_t: Command and response buffer *****************************************************************************/typedef struct buffer_t{ size_t i_size; /**< Size of the allocated memory */ size_t i_length; /**< Length of the stored data */ char *p_memory; /**< Start of the allocated memory */ char *p_begin; /**< Start of the stored data */} buffer_t;int BufferInit( buffer_t *p_buffer );int BufferDestroy( buffer_t *p_buffer );int BufferAdd( buffer_t *p_buffer, const char *p_data, size_t i_len );int BufferPrintf( buffer_t *p_buffer, const char *p_fmt, ... );int BufferDel( buffer_t *p_buffer, int i_len );char *BufferGetToken( buffer_t *p_buffer );/***************************************************************************** * Command structures *****************************************************************************//** struct commandparams_t - command params structure */typedef struct commandparams_t{ int32_t i_id; /*< overlay id */ int32_t i_shmid; /*< shared memory identifier */ vlc_fourcc_t fourcc;/*< chroma */ int32_t i_x; /*< x position of overlay */ int32_t i_y; /*< y position of overlay */ int32_t i_width; /*< width of overlay */ int32_t i_height; /*< height of overlay */ int32_t i_alpha; /*< alpha value of overlay */ struct text_style_t fontstyle; /*< text style */ bool b_visible; /*< visibility flag of overlay */} commandparams_t;typedef struct commanddesc_t{ const char *psz_command; bool b_atomic; int ( *pf_parser ) ( char *psz_command, char *psz_end, commandparams_t *p_params ); int ( *pf_execute ) ( filter_t *p_filter, const commandparams_t *p_params, commandparams_t *p_results ); int ( *pf_unparse ) ( const commandparams_t *p_results, buffer_t *p_output );} commanddesc_t;typedef struct command_t{ struct commanddesc_t *p_command; int i_status; commandparams_t params; commandparams_t results; struct command_t *p_next;} command_t;void RegisterCommand( filter_t *p_filter );void UnregisterCommand( filter_t *p_filter );/***************************************************************************** * queue_t: Command queue *****************************************************************************/typedef struct queue_t{ command_t *p_head; /**< Head (first entry) of the queue */ command_t *p_tail; /**< Tail (last entry) of the queue */} queue_t;int QueueInit( queue_t *p_queue );int QueueDestroy( queue_t *p_queue );int QueueEnqueue( queue_t *p_queue, command_t *p_cmd );command_t *QueueDequeue( queue_t *p_queue );int QueueTransfer( queue_t *p_sink, queue_t *p_source );/***************************************************************************** * overlay_t: Overlay descriptor *****************************************************************************/typedef struct overlay_t{ int i_x, i_y; int i_alpha; bool b_active; video_format_t format; struct text_style_t fontstyle; union { picture_t *p_pic; char *p_text; } data;} overlay_t;overlay_t *OverlayCreate( void );int OverlayDestroy( overlay_t *p_ovl );/***************************************************************************** * list_t: Command queue *****************************************************************************/typedef struct list_t{ overlay_t **pp_head, **pp_tail;} list_t;int ListInit( list_t *p_list );int ListDestroy( list_t *p_list );ssize_t ListAdd( list_t *p_list, overlay_t *p_new );int ListRemove( list_t *p_list, size_t i_idx );overlay_t *ListGet( list_t *p_list, size_t i_idx );overlay_t *ListWalk( list_t *p_list );/***************************************************************************** * filter_sys_t: adjust filter method descriptor *****************************************************************************/struct filter_sys_t{ buffer_t input, output; int i_inputfd, i_outputfd; char *psz_inputfile, *psz_outputfile; commanddesc_t **pp_commands; /* array of commands */ size_t i_commands; bool b_updated, b_atomic; queue_t atomic, pending, processed; list_t overlays;};#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -