h261defs.h
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:10k
源码类别:

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
  5.  *      
  6.  * The contents of this file, and the files included with this file, are 
  7.  * subject to the current version of the RealNetworks Public Source License 
  8.  * Version 1.0 (the "RPSL") available at 
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed 
  10.  * the file under the RealNetworks Community Source License Version 1.0 
  11.  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
  12.  * in which case the RCSL will apply. You may also obtain the license terms 
  13.  * directly from RealNetworks.  You may not use this file except in 
  14.  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
  15.  * applicable to this file, the RCSL.  Please see the applicable RPSL or 
  16.  * RCSL for the rights, obligations and limitations governing use of the 
  17.  * contents of the file.  
  18.  *  
  19.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  20.  * developer of the Original Code and owns the copyrights in the portions 
  21.  * it created. 
  22.  *  
  23.  * This file, and the files included with this file, is distributed and made 
  24.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  25.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  26.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  27.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  28.  * 
  29.  * Technology Compatibility Kit Test Suite(s) Location: 
  30.  *    http://www.helixcommunity.org/content/tck 
  31.  * 
  32.  * Contributor(s): 
  33.  *  
  34.  * ***** END LICENSE BLOCK ***** */ 
  35. #ifndef _INC_H261DEFS
  36. #define _INC_H261DEFS   1
  37. #include "machine.h"
  38. // Set up endianness.  We assume Mac is big endian, we assume 
  39. // Windows is little endian and we assume Unix must specify
  40. // endianness externally
  41. #if defined(FOR_MAC)
  42. #define BIG_ENDIAN
  43. #elif !defined(FOR_UNIX)
  44. #define LITTLE_ENDIAN           // Intel X86
  45. #else
  46. #if defined(_LITTLE_ENDIAN)
  47. #define LITTLE_ENDIAN
  48. #endif
  49. #if defined(_BIG_ENDIAN)
  50. #define BIG_ENDIAN
  51. #endif
  52. #if !defined(LITTLE_ENDIAN) && !defined(BIG_ENDIAN)
  53. #error Unix systems must define LITTLE_ENDIAN or BIG_ENDIAN in its makefile
  54. #endif
  55. #endif
  56. #define YES                 (1)
  57. #define NO                  (0)
  58. #define OK                  (1)
  59. #define H261_ERROR          (-1)    // Temporary fix
  60. #ifndef ERROR
  61. #define ERROR               (-1)
  62. #endif
  63. // Replace the previous three lines with the following once ERROR has been replaced by H261_ERROR everywhere
  64. //#undef ERROR
  65. // Coding method
  66. #define H261_CODING         (0)
  67. #define H263_CODING         (1)
  68.  
  69. // Resolution 
  70. #define SQCIF               (2)
  71. #define CIF                 (1)
  72. #define QCIF                (0)
  73. #define CIF4 (3)
  74. #define CIF16 (4)
  75. #define ANYSIZE (5)
  76. // Decoder's non-standard output DIB types.
  77. // BI_RGB is defined in windows.h
  78. #define VIVO_RGB555  (0)
  79. #define VIVO_RGB565 (1)
  80. #define VIVO_RGB888 (2)
  81. #define VIVO_YUV9 (3) //YUV 4:1:1 Format - Intel YUV9
  82. #define VIVO_YUV16 (4) //YUV 4:2:2 Format
  83. #define VIVO_YUV32 (5)
  84. #define VIVO_YVU9 (6) // YVU Planar
  85. #define VIVO_YUY2 (7) // YUYV interleaved
  86. #define VIVO_YUV12 (8) // yuv 420
  87. // Masks for Temporal Reference
  88. #define H263_TR_MASK    (0xff)  // Mask off 8 LSBs
  89. #define H261_TR_MASK    (0x1f)  // Mask off 5 LSBs
  90. #define TRB_MASK    (0x7)   // Mask off 3 LSBs
  91. // Define bits in PTYPE (13 bits) for H.263
  92. #define PTYPE263_BLANK1             (0x1000)    // Bit 1 always "1".
  93. #define PTYPE263_BLANK2             (0x000)     // Bit 2 always "0".
  94. #define PTYPE263_SPLITSCREEN        (0x400)     // Bit 3: "0"=split screen off, "1"=on.
  95. #define PTYPE263_DOCCAMERA          (0x200)     // Bit 4: "0"=document camera off, "1"=on.
  96. #define PTYPE263_FP_RELEASE         (0x100)     // Bit 5: "0"=Freeze Picture Release off, "1"=on.
  97. #define PTYPE263_RESERVED           (0xc0)      // Bits 6-8 are source format:"111" reserved
  98. #define PTYPE263_EPTYPE             (0xe0)      // "110" = Extended PTYPE (reserved in H.263)
  99. #define PTYPE263_16CIF              (0xa0)      // "101" = 16CIF
  100. #define PTYPE263_4CIF               (0x80)      // "100" = 4CIF
  101. #define PTYPE263_CIF                (0x60)      // "011" = CIF
  102. #define PTYPE263_QCIF               (0x40)      // "010" = QCIF
  103. #define PTYPE263_SQCIF              (0x20)      // "001" = sub-QCIF
  104. #define PTYPE263_INTER              (0x10)      // Bit 9: "0"=INTRA picture, "1"=INTER.
  105. #define PTYPE263_UNRESTRICTED_MV    (0x8)       // Bit 10: "0"=unrestricted MV mode off, "1"=on.
  106. #define PTYPE263_SYNTAX_BASED_AC    (0x4)       // Bit 11: "0"=arithmetic coding off, "1"=on.
  107. #define PTYPE263_ADVANCED_PRED      (0x2)       // Bit 12: "0"=advanced pred off, "1"=on.
  108. #define PTYPE263_PB_FRAME           (0x1)       // Bit 13: "0"=normal I-orP picture, "1"=PB frame.
  109. // Define bits in PTYPE
  110. #define FLAG_SPLITSCREEN    (0x20)
  111. #define FLAG_DOCCAMERA      (0x10)
  112. #define FLAG_FP_RELEASE     (0x8)
  113. #define FLAG_CIF_FORMAT     (0x4)
  114. #define FLAG_HI_RES         (0x2)   // 0 = on, 1 = off
  115. #define FLAG_SPARE          (0x1)
  116. // Macroblock types
  117. #define MTYPE_SKIP          (0)
  118. #define MTYPE_INTRA         (1)
  119. #define MTYPE_INTRA_MQUANT  (2)
  120. #define MTYPE_INTER         (3)
  121. #define MTYPE_INTER_MQUANT  (4)
  122. #define MTYPE_MC_NOCBP      (5)
  123. #define MTYPE_MC_CBP        (6)
  124. #define MTYPE_MC_MQUANT     (7)
  125. #define MTYPE_MCFILT_NOCBP  (8)
  126. #define MTYPE_MCFILT_CBP    (9)
  127. #define MTYPE_MCFILT_MQUANT (10)
  128. #define MTYPE_MIN           (0)
  129. #define MTYPE_MAX           (10)
  130. // H.263 macroblock types
  131. #define MTYPE263_INTER      (3 << 2)
  132. #define MTYPE263_INTER_Q    (4 << 2)
  133. #define MTYPE263_INTER4V    (5 << 2)
  134. #define MTYPE263_INTRA      (6 << 2)
  135. #define MTYPE263_INTRA_Q    (7 << 2)
  136. #define MTYPE263_MIN        (3 << 2)
  137. #define MTYPE263_MAX        (7 << 2)
  138. #define MTYPE263_INTRA_MIN  (6 << 2)
  139. #define MTYPE263_INTRA_MAX  (7 << 2)
  140. #define MTYPE263_STUFFING   (8 << 2)
  141. #define MTYPE263_STARTCODE  (9 << 2)
  142. /* Symbol types */
  143. #define SYM_EXIT            (-1)
  144. #define SYM_ESCAPE          (-2)
  145. #define SYM_EOB             (-64)
  146. #define SYM_INTRA_DC        (-65)
  147. #define SYM_MBA             (-66)
  148. #define SYM_STARTCODE       (-67)
  149. #define SYM_MBA_STUFFING    (-68)
  150. #define SYM_MTYPE           (-69)
  151. #define SYM_MVD             (-70)
  152. #define SYM_CBP             (-71)
  153. #define SYM_QUANT_TR        (-72)
  154. #define SYM_GEI_PEI         (-73)
  155. #define SYM_SPARE           (-74)
  156. #define SYM_GN              (-75)
  157. #define SYM_PTYPE           (-76)
  158. #define SYM_ESC_RUN         (-77)
  159. #define SYM_ESC_LEVEL       (-78)
  160. // Symbol types for H.263
  161. #define SYM_MCBPC           (-79)
  162. #define SYM_MCBPC_STUFFING  (-80)
  163. #define SYM_MODB            (-81)
  164. #define SYM_CBPY            (-82)
  165. #define SYM_DQUANT          (-83)
  166. // Symbol types for H.263+
  167. #define SYM_INTRA_MODE      (-84)
  168. // Limits for Macroblock address
  169. #define MBA_MIN             (1)
  170. #define MBA_MAX             (33)
  171. // Limits for motion vectors
  172. #define MV_MIN          (-15)
  173. #define MV_MAX          15
  174. // Limits for motion vector differences; larger differences (up to +/- 30)
  175. // are represented as MVD +/- MV_WRAP
  176. #define MVD_MIN         (-16)
  177. #define MVD_MAX         (15)
  178. #define MV_WRAP         (32)
  179. #define MVD263_MIN      (-32)
  180. #define MVD263_MAX      (31)
  181. #define MV263_WRAP      (64)
  182. // Limits for motion vectors in UMV mode (1 fraactional bit)
  183. #define UMV_MIN         (-63)
  184. #define UMV_MAX         (63)
  185. #define UMV_NEG_THRESH  (-31)
  186. #define UMV_POS_THRESH  (32)
  187. // Limits for Coded block Pattern
  188. #define CBP_MIN             (0)
  189. #define CBP_MAX             (63)
  190. #define CBPY_MIN            (0)
  191. #define CBPY_MAX            (15)
  192. // Limits for QUANT
  193. #define QUANT_MIN           (1)
  194. #define QUANT_MAX           (31)
  195. #define DQUANT_MIN          (-2)
  196. #define DQUANT_MAX          (2)
  197. #define DBQUANT_MIN         (0)
  198. #define DBQUANT_MAX         (3)
  199. #define N_SYM_INDICES       256     // Number of "level" symbols
  200. #define FORCED_UPDATE       (33)    // Forced update interval
  201. #define FORCED_THRESH       (50)   // Forced update threshold
  202. /* BCH defines  */
  203. #define BCH_WORDS_PER_BLK       16  // Each block is 16 words * 32 b/word = 512 bits
  204. #define BCH_BYTES_PER_BLK       (4 * BCH_WORDS_PER_BLK)
  205. #define BCH_INFO_BITS           492
  206. #define BCH_PARITY_BITS         18
  207. #define BCH_FRAMING_BIT         0x80
  208. #define BCH_FILL_INDICATOR      0x40
  209. #define BCH_INFO_BITS_1ST_BYTE  6
  210. #define BCH_INFO_BYTES          ((BCH_INFO_BITS + 7 + 8 - BCH_INFO_BITS_1ST_BYTE) / 8)
  211. #define BCH_PARBITS_LAST_INFO_BYTE  (BCH_PARITY_BITS % 8)
  212. #define BCH_LAST_INFO_MASK      (0xfc)  // Mask out bits 7 to 2
  213. #define BCH_G_POLY              0x25724000L
  214. #define BCH_FRAME_PATTERN       (0x1b)  // "0001 1011"
  215. /* From vlc.h 10/29/93 md   */
  216. #define U32_BITS            (32)
  217. #define MAX_CODELENGTH      (U32_BITS - 7)
  218. #define MAX_STRING_VLC      (MAX_CODELENGTH + 7)
  219. #define N_RL_PAIRS          (128)
  220. #define RUN_DIM             (64)
  221. #define N_TCOEFF            (N_RL_PAIRS + RUN_DIM)
  222. #define N_RL263_PAIRS       (116)
  223. #define N_TCOEF263          (N_RL263_PAIRS + RUN_DIM)
  224. #define N_LAST_RL263_PAIRS  (88)
  225. #define N_LAST_TCOEF263     (N_LAST_RL263_PAIRS + RUN_DIM)
  226. #define LEVEL_DIM           (256)
  227. #define DIM_DCT_FIRST       (2)
  228. // Defines for DCT type
  229. #define DCT_TYPE_8x8            0
  230. #define DCT_TYPE_4x4            1
  231. #define DCT_TYPE_MAHKEENAC      2
  232. #define DCT_TYPE_NONE           (-1)
  233. #define QUANT_8x8_COEFFS        64
  234. #define QUANT_4x4_COEFFS        10
  235. #define QUANT_MAHKEENAC_COEFFS  3
  236. // Enumerate blocks for H.263 Advanced Prediction mode (4 motion vectors per MB)
  237. #define UPPER_LEFT_BLK          (0)
  238. #define UPPER_RIGHT_BLK         (1)
  239. #define LOWER_LEFT_BLK          (2)
  240. #define LOWER_RIGHT_BLK         (3)
  241. #define WHOLE_MACROBLOCK        (4)
  242. #endif