subtitle.h
上传用户:riyaled888
上传日期:2009-03-27
资源大小:7338k
文件大小:8k
源码类别:

多媒体

开发平台:

MultiPlatform

  1. /*****************************************************************************
  2.  * subtitle.h : Common SVCD and CVD subtitles header
  3.  *****************************************************************************
  4.  * Copyright (C) 2003,2004 VideoLAN
  5.  * $Id: subtitle.h 7991 2004-06-17 03:37:03Z yoann $
  6.  *
  7.  * Author: Rocky Bernstein
  8.  *   based on code from:
  9.  *       Julio Sanchez Fernandez (http://subhandler.sourceforge.net)
  10.  *       Sam Hocevar <sam@zoy.org>
  11.  *
  12.  * This program is free software; you can redistribute it and/or modify
  13.  * it under the terms of the GNU General Public License as published by
  14.  * the Free Software Foundation; either version 2 of the License, or
  15.  * (at your option) any later version.
  16.  *
  17.  * This program is distributed in the hope that it will be useful,
  18.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  19.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20.  * GNU General Public License for more details.
  21.  *
  22.  * You should have received a copy of the GNU General Public License
  23.  * along with this program; if not, write to the Free Software
  24.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
  25.  *****************************************************************************/
  26. #include "pixmap.h"
  27. #define DECODE_DBG_EXT         1 /* Calls from external routines */
  28. #define DECODE_DBG_CALL        2 /* all calls */
  29. #define DECODE_DBG_PACKET      4 /* packet assembly info */
  30. #define DECODE_DBG_IMAGE       8 /* image bitmaps */
  31. #define DECODE_DBG_TRANSFORM  16 /* bitmap transformations */
  32. #define DECODE_DBG_RENDER     32 /* rendering information */
  33. #define DECODE_DBG_PNG        64 /* Extract subtitles to PNG files. */
  34. #define DECODE_DBG_INFO      128
  35. #define DEBUG_TEXT N_( 
  36.      "If nonzero, this gives additional debug information." 
  37.      )
  38. #define DEBUG_LONGTEXT N_( 
  39.     "This integer when viewed in binary is a debugging maskn" 
  40.     "external call          1n" 
  41.     "all calls              2n" 
  42.     "packet assembly info   4n" 
  43.     "image bitmaps          8n" 
  44.     "image transformations 16n" 
  45.     "rendering information 32n" 
  46.     "extract subtitles     64n" 
  47.     "misc info            128n" )
  48. #define SUB_ASPECT_RATIO_TEXT N_("Subtitle aspect-ratio correction")
  49. #define SUB_ASPECT_RATIO_LONGTEXT N_( 
  50.     "Use this to force the subtitle aspect ratio. If you give a null string " 
  51.     "the right value will be determined automatically. Usually this is what " 
  52.     "you want. For OGT and CVD subtitles this undoes the effect " 
  53.     "of the underlying video scaling. And using a value of 1 will cause " 
  54.     "no correction; subtitles will be scaled with the same aspect " 
  55.     "ratio as as the underlying video (which not correct for OGT or " 
  56.     "CVD subtitles). You can also force another ratio by giving a pair of " 
  57.     "integers x:y where y should between x and twice x. For example 4:3, or " 
  58.     "16:9. Alternatively, you can give a float value expressing pixel " 
  59.     "squareness. For example 1.25 or 1.3333 which mean the same thing as " 
  60.     "4:3 and 16:9 respectively." 
  61.     )
  62. #define DURATION_SCALE_TEXT N_("Factor to increase subtitle display interval")
  63. #define DURATION_SCALE_LONGTEXT N_( 
  64.   "If you find you need extra time for reading subtitles, " 
  65.   "you can set this higher and it will multiply the display " 
  66.   "time by that amount. Use 0 to mean until the next " 
  67.   "subtitle.")
  68. #define HORIZONTAL_CORRECT 
  69.   N_("Add this to starting horizontal position of subtitle.")
  70. #define HORIZONTAL_CORRECT_LONGTEXT N_( 
  71.   "If you need to adjust the subtitle starting position horizontally, " 
  72.   "set this. Negative values shift left and positive values right. 0 would " 
  73.   "be no deviation from where the position specified in the subtitle." 
  74.   )
  75. #define VERTICAL_CORRECT 
  76.   N_("Add this to starting vertical position of subtitle.")
  77. #define VERTICAL_CORRECT_LONGTEXT N_( 
  78.   "If you need to adjust the subtitle starting position vertically, " 
  79.   "set this. Negative values shift up, positive values down. 0 would " 
  80.   "be no deviation from where the position specified in the subtitle." 
  81.   )
  82. #define DECODE_DEBUG 1
  83. #if DECODE_DEBUG
  84. #define dbg_print(mask, s, args...) 
  85.    if (p_sys && p_sys->i_debug & mask) 
  86.      msg_Dbg(p_dec, "%s: "s, __func__ , ##args)
  87. #else
  88. #define dbg_print(mask, s, args...)
  89. #endif
  90. #define LOG_ERR(args...)  msg_Err( p_input, args )
  91. #define LOG_WARN(args...) msg_Warn( p_input, args )
  92. #define GETINT16(p) ( (p[0] <<  8) +   p[1] )  ; p +=2;
  93. #define GETINT32(p) ( (p[0] << 24) +  (p[1] << 16) +    
  94.                       (p[2] <<  8) +  (p[3]) ) ; p += 4;
  95. /* The number of color palette entries allowed in a subtitle. */
  96. #define NUM_SUBTITLE_COLORS 4
  97. typedef enum  {
  98.   SUBTITLE_BLOCK_EMPTY,
  99.   SUBTITLE_BLOCK_PARTIAL,
  100.   SUBTITLE_BLOCK_COMPLETE
  101. } packet_state_t;
  102. /* The byte storage used by one pixel */
  103. #define PIXEL_SIZE 4
  104. /* Size in bytes of YUV portion above. */
  105. #define YUV_SIZE 3
  106. /* Transparency plane. NOTE: see vlc_video.h for V_PLANE */
  107. #define T_PLANE  V_PLANE+1
  108. struct decoder_sys_t
  109. {
  110.   int            i_debug; /* debugging mask */
  111.   mtime_t        i_pts;   /* Start PTS of subtitle block */
  112.   int            i_spu;
  113.   packet_state_t state;   /* data-gathering state for this subtitle */
  114.   uint16_t       i_image; /* image number in the subtitle stream; 0 is the
  115.                              first one. */
  116.   uint8_t        i_packet;/* packet number for above image number; 0 is the
  117.                              first one. */
  118.   block_t        *p_block;/* Bytes of the packet. */
  119.   uint8_t buffer[65536 + 20 ]; /* we will never overflow more than 11
  120.                                   bytes if I'm right */
  121.   int     b_packetizer;
  122.   int     i_spu_size;     /* goal for subtitle_data_pos while gathering,
  123.                              size of used subtitle_data later */
  124.   vout_thread_t *p_vout;
  125.   int i_subpic_channel;   /* Subpicture channel in which subtitles will
  126.                              be written */
  127.   /* FIXME: Remove this? */
  128.   uint8_t *subtitle_data;   /* buffer used to accumulate data from
  129.                                successive packets in the same subtitle */
  130.   int subtitle_data_size;   /* size of the allocated subtitle_data */
  131.   /* Move into subpicture_sys_t? */
  132.   uint16_t i_image_offset;      /* offset from subtitle_data to compressed
  133.                                    image data */
  134.   int i_image_length;           /* size of the compressed image data */
  135.   int first_field_offset;       /* offset of even raster lines. Used
  136.                                    only for CVD. */
  137.   int second_field_offset;      /* offset of odd raster lines */
  138.   int metadata_offset;          /* offset to data describing the image */
  139.   int metadata_length;          /* length of metadata */
  140.   int subtitle_data_pos;    /* where to write next chunk */
  141.   mtime_t i_duration;   /* how long to display the image, 0 stands
  142.                            for "until next subtitle" */
  143.   uint16_t i_x_start, i_y_start; /* position of top leftmost pixel of
  144.                                     image when displayed */
  145.   uint16_t i_width, i_height;    /* dimensions in pixels of image */
  146.   ogt_yuvt_t p_palette[NUM_SUBTITLE_COLORS];  /* Palette of colors used
  147.                                                  in subtitle */
  148.   ogt_yuvt_t p_palette_highlight[NUM_SUBTITLE_COLORS]; /* Only used
  149.                                                           for CVD */
  150.   uint8_t i_options;
  151.   uint8_t i_options2;
  152.   uint8_t i_cmd;
  153.   uint32_t i_cmd_arg;
  154. };
  155. struct subpicture_sys_t
  156. {
  157.   int     i_debug;              /* debugging mask */
  158.   mtime_t i_pts;                /* presentation timestamp */
  159.   uint8_t *p_data;             /* Image data one byte T, Y, U, V */
  160.   /* Link to our input */
  161.   vlc_object_t * p_input;
  162.   /* Cropping properties */
  163.   vlc_mutex_t  lock;
  164.   vlc_bool_t   b_crop;
  165.   unsigned int i_x_start, i_y_start, i_x_end, i_y_end;
  166.   /* This is only used for color palette Chromas like RGB2. */
  167.   ogt_yuvt_t p_palette[NUM_SUBTITLE_COLORS];  /* Palette of colors used
  168.                                                  in subtitle */
  169. };