dynamicoverlay.h
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:6k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * dynamicoverlay.h : dynamic overlay plugin for vlc
  3.  *****************************************************************************
  4.  * Copyright (C) 2008 the VideoLAN team
  5.  * $Id: 20ce46352dd88fff3d2e590ce8d3c4206a935734 $
  6.  *
  7.  * Author: Jean-Paul Saman <jpsaman@videolan.org>
  8.  *
  9.  * This program is free software; you can redistribute it and/or modify
  10.  * it under the terms of the GNU General Public License as published by
  11.  * the Free Software Foundation; either version 2 of the License, or
  12.  * (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  22.  *****************************************************************************/
  23. #ifndef DYNAMIC_OVERLAY_H
  24. #define DYNAMIC_OVERLAY_H   1
  25. #include <vlc_common.h>
  26. #include <vlc_filter.h>
  27. /*****************************************************************************
  28.  * buffer_t: Command and response buffer
  29.  *****************************************************************************/
  30. typedef struct buffer_t
  31. {
  32.     size_t i_size;                         /**< Size of the allocated memory */
  33.     size_t i_length;                          /**< Length of the stored data */
  34.     char *p_memory;                       /**< Start of the allocated memory */
  35.     char *p_begin;                             /**< Start of the stored data */
  36. } buffer_t;
  37. int BufferInit( buffer_t *p_buffer );
  38. int BufferDestroy( buffer_t *p_buffer );
  39. int BufferAdd( buffer_t *p_buffer, const char *p_data, size_t i_len );
  40. int BufferPrintf( buffer_t *p_buffer, const char *p_fmt, ... );
  41. int BufferDel( buffer_t *p_buffer, int i_len );
  42. char *BufferGetToken( buffer_t *p_buffer );
  43. /*****************************************************************************
  44.  * Command structures
  45.  *****************************************************************************/
  46. /** struct commandparams_t - command params structure */
  47. typedef struct commandparams_t
  48. {
  49.     int32_t i_id;       /*< overlay id */
  50.     int32_t i_shmid;    /*< shared memory identifier */
  51.     vlc_fourcc_t fourcc;/*< chroma */
  52.     int32_t i_x;        /*< x position of overlay */
  53.     int32_t i_y;        /*< y position of overlay */
  54.     int32_t i_width;    /*< width of overlay */
  55.     int32_t i_height;   /*< height of overlay */
  56.     int32_t i_alpha;    /*< alpha value of overlay */
  57.     struct text_style_t fontstyle; /*< text style */
  58.     bool b_visible; /*< visibility flag of overlay */
  59. } commandparams_t;
  60. typedef struct commanddesc_t
  61. {
  62.     const char *psz_command;
  63.     bool b_atomic;
  64.     int ( *pf_parser ) ( char *psz_command, char *psz_end,
  65.                          commandparams_t *p_params );
  66.     int ( *pf_execute ) ( filter_t *p_filter, const commandparams_t *p_params,
  67.                           commandparams_t *p_results );
  68.     int ( *pf_unparse ) ( const commandparams_t *p_results,
  69.                           buffer_t *p_output );
  70. } commanddesc_t;
  71. typedef struct command_t
  72. {
  73.     struct commanddesc_t *p_command;
  74.     int i_status;
  75.     commandparams_t params;
  76.     commandparams_t results;
  77.     struct command_t *p_next;
  78. } command_t;
  79. void RegisterCommand( filter_t *p_filter );
  80. void UnregisterCommand( filter_t *p_filter );
  81. /*****************************************************************************
  82.  * queue_t: Command queue
  83.  *****************************************************************************/
  84. typedef struct queue_t
  85. {
  86.     command_t *p_head;                  /**< Head (first entry) of the queue */
  87.     command_t *p_tail;                   /**< Tail (last entry) of the queue */
  88. } queue_t;
  89. int QueueInit( queue_t *p_queue );
  90. int QueueDestroy( queue_t *p_queue );
  91. int QueueEnqueue( queue_t *p_queue, command_t *p_cmd );
  92. command_t *QueueDequeue( queue_t *p_queue );
  93. int QueueTransfer( queue_t *p_sink, queue_t *p_source );
  94. /*****************************************************************************
  95.  * overlay_t: Overlay descriptor
  96.  *****************************************************************************/
  97. typedef struct overlay_t
  98. {
  99.     int i_x, i_y;
  100.     int i_alpha;
  101.     bool b_active;
  102.     video_format_t format;
  103.     struct text_style_t fontstyle;
  104.     union {
  105.         picture_t *p_pic;
  106.         char *p_text;
  107.     } data;
  108. } overlay_t;
  109. overlay_t *OverlayCreate( void );
  110. int OverlayDestroy( overlay_t *p_ovl );
  111. /*****************************************************************************
  112.  * list_t: Command queue
  113.  *****************************************************************************/
  114. typedef struct list_t
  115. {
  116.     overlay_t **pp_head, **pp_tail;
  117. } list_t;
  118. int ListInit( list_t *p_list );
  119. int ListDestroy( list_t *p_list );
  120. ssize_t ListAdd( list_t *p_list, overlay_t *p_new );
  121. int ListRemove( list_t *p_list, size_t i_idx );
  122. overlay_t *ListGet( list_t *p_list, size_t i_idx );
  123. overlay_t *ListWalk( list_t *p_list );
  124. /*****************************************************************************
  125.  * filter_sys_t: adjust filter method descriptor
  126.  *****************************************************************************/
  127. struct filter_sys_t
  128. {
  129.     buffer_t input, output;
  130.     int i_inputfd, i_outputfd;
  131.     char *psz_inputfile, *psz_outputfile;
  132.     commanddesc_t **pp_commands; /* array of commands */
  133.     size_t i_commands;
  134.     bool b_updated, b_atomic;
  135.     queue_t atomic, pending, processed;
  136.     list_t overlays;
  137.     vlc_mutex_t lock;   /* lock to protect psz_inputfile and psz_outputfile */
  138. };
  139. #endif