h261defs.h
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:11k
源码类别:

Symbian

开发平台:

Visual C++

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