pbdll.h 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535
  1. /****************************************************************************
  2. *
  3. * Module Title : PBDLL
  4. *
  5. * Description : Video CODEC DEMO playback dll header
  6. *
  7. * AUTHOR : Paul Wilkins
  8. *
  9. *****************************************************************************
  10. * Revision History
  11. *
  12. * 1.40 YWX 17-Dec-02 Added DeInteralceMode
  13. * 1.39 YWX 06-Nov-01 Changed to align the MB coeffs buffer memory
  14. * 1.38 AWG 22-MAY-01 Added support for DCT16
  15. * 1.37 JBB 01-MAY-01 Added features to support vp5
  16. * 1.36 JBB 06-Apr-01 Added cpufree variable
  17. * 1.35 JBB 23-Mar-01 New data structure defined for DC prediction
  18. * 1.34 JBX 22-Mar-01 Merged with vp4-mapca bitstream
  19. * 1.33.PGW 08 Feb 01 Added LastFrameQIndex.
  20. * 1.32 PGW 25 Jan 01 Changes to support new motion vector entropy coding in VP5.
  21. * 1.31 JBB 26-JAN-01 Fixes for New Huffman Strategy
  22. * 1.30 YWX 27-Nov-00 Added function Pointers for simple deblocker, i.e.
  23. * Deblocking filter for low end machines
  24. * 1.29 YWX 02-Nov-00 Added function pointers for new loopfilter
  25. * 1.28 PGW 16 Nov 00 Deleted redundant data structures.
  26. * Added BlockPatternPredictor.
  27. * 1.27 YWX 02-Nov-00 Added function pointers for new loopfilter
  28. * 1.26 YWX 19_Oct-00 Added function pointers for 1-2 scaling
  29. * 1.25 JBB 17-oct-00 Ifdefs around version information
  30. * 1.24 YWX 17-Oct-00 Added *FragCoordinates for new loop filter strategy
  31. * 1.23 PGW 15 Oct 00 Added select_InterUV_quantiser() and related data structures.
  32. * 1.22 PGW 11 Oct 00 Added CreateHuffmanTrees() and DestroyHuffmanTrees()
  33. * Added void SelectHuffmanSet() and Huffman selector variables.
  34. * 1.23 YWX 11-Oct-00 Added LastFrameNoMvRecon and LastFrameNoMvReconAlloc
  35. * 1.22 YWX 04 Oct 00 Merged scaling and new loop filtering code
  36. * 1.21 YWX 06 Sep 00 Added new deringing functions pointers
  37. * 1.21 PGW 18 Sep 00 QThreshTable[] made instance specific.
  38. * Added InitQTables().
  39. * 1.20 JBB 25 Aug 00 Versioning differences
  40. * 1.19 JBB 21 Aug 00 New More Blurry in high variance area deringer
  41. * 1.18 YWX 2 Aug 00 Added function pointers for Postproc
  42. * 1.17 JBB 28 Jul 00 Added Fragment Variance Value for eliminating deringer
  43. * in some cases...
  44. * 1.16 JBB 27 Jul 00 Moved kernel modifiers to pbi, malloc checks
  45. * 1.15 SJL 24Jul00 Changes for Mac
  46. * 1.14 YWX 15/05/00 More variable and function pointersf for postprocessor
  47. * 1.13 YWX 08/05/00 Added #ifdef s and function pointers for postprocessor
  48. * 1.12 JYX 05/05/00 Added PostProcessing (PostProcessBuffer + PostProcessLevel)
  49. * 1.11 SJL 20/04/00 Added ability to enable new dequant code for the dxer.
  50. * 1.10 JYX 06/04/00 Alligned Small Buffers & Live Codec Reordering
  51. * 1.09 SJL 22/03/00 Added func ptr for the loop filter.
  52. * 1.08 JBB 20/03/00 32 Byte alligned buffers, Back to Integer Forward DCT
  53. * Additional function pointers for optimized code
  54. * 1.07 PGW 20/03/00 Removed InterIntra.
  55. * 1.06 PGW 17/03/00 Changes to support seperate Y and UV entropy tables.
  56. * 1.05 JBB 29/01/00 Removed Globals added Playback only function externs !
  57. * 1.04 PGW 17/12/99 Draw dib functionality removed.
  58. * 1.03 PGW 22/11/99 Changes relating to restructuring of block map stuff.
  59. * 1.02 PGW 15/07/99 Added bit extraction variables.
  60. * 1.01 PGW 09/07/99 Added code to support profile timing
  61. * 1.00 PGW 28/06/99 New Configuration baseline.
  62. *
  63. *****************************************************************************
  64. */
  65. #ifndef __INC_PBDLL_H
  66. #define __INC_PBDLL_H
  67. #define VAL_RANGE 256
  68. #include "codec_common.h"
  69. #include "huffman.h"
  70. #include "tokenentropy.h"
  71. #include "vfw_pb_interface.h"
  72. #include "postproc_if.h"
  73. #include "vputil_if.h"
  74. #include "quantize.h"
  75. #include "boolhuff.h"
  76. /****************************************************************************
  77. * Module constants.
  78. *****************************************************************************
  79. */
  80. #ifdef MAPCA
  81. // switch to turn on the Data streamer
  82. #define DMAREADREFERENCE
  83. #define DMAWRITERECON
  84. #define RECONSTRUCTMBATONCE
  85. #define __inline
  86. #endif
  87. /****************************************************************************
  88. * Types
  89. *****************************************************************************
  90. */
  91. typedef enum
  92. {
  93. CODE_INTER_NO_MV = 0x0, // INTER prediction, (0,0) motion vector implied.
  94. CODE_INTRA = 0x1, // INTRA i.e. no prediction.
  95. CODE_INTER_PLUS_MV = 0x2, // INTER prediction, non zero motion vector.
  96. CODE_INTER_NEAREST_MV = 0x3, // Use Last Motion vector
  97. CODE_INTER_NEAR_MV = 0x4, // Prior last motion vector
  98. CODE_USING_GOLDEN = 0x5, // 'Golden frame' prediction (no MV).
  99. CODE_GOLDEN_MV = 0x6, // 'Golden frame' prediction plus MV.
  100. CODE_INTER_FOURMV = 0x7, // Inter prediction 4MV per macro block.
  101. CODE_GOLD_NEAREST_MV = 0x8, // Use Last Motion vector
  102. CODE_GOLD_NEAR_MV = 0x9, // Prior last motion vector
  103. DO_NOT_CODE = 0x10 // Fake Mode
  104. } CODING_MODE;
  105. typedef struct
  106. {
  107. unsigned int DisplayFragment : 1;
  108. unsigned int FragCodingMode : 4;
  109. int MVectorX : 6;
  110. int MVectorY : 6;
  111. } FRAG_INFO;
  112. typedef struct _DCINFO
  113. {
  114. Q_LIST_ENTRY dc;
  115. short frame;
  116. } DCINFO;
  117. // defined so i don't have to remember which block goes where
  118. typedef enum
  119. {
  120. TOP_LEFT_Y_BLOCK = 0,
  121. TOP_RIGHT_Y_BLOCK = 1,
  122. BOTTOM_LEFT_Y_BLOCK = 2,
  123. BOTTOM_RIGHT_Y_BLOCK = 3,
  124. U_BLOCK = 4,
  125. V_BLOCK = 5
  126. } BLOCK_POSITION;
  127. // all the information gathered from a block to be used as context in the next block
  128. typedef struct
  129. {
  130. UINT8 Tokens[64];
  131. CODING_MODE Mode;
  132. UINT16 Frame;
  133. Q_LIST_ENTRY Dc;
  134. UINT32 EOBPos;
  135. UINT32 unused;
  136. } BLOCK_CONTEXT;
  137. typedef struct
  138. {
  139. UINT32 EOBPos;
  140. CODING_MODE Mode;
  141. UINT16 Frame;
  142. Q_LIST_ENTRY Dc;
  143. UINT8 Tokens[1];
  144. UINT8 unused[3];
  145. } BLOCK_CONTEXTA;
  146. typedef struct
  147. {
  148. INT16 x;
  149. INT16 y;
  150. } MOTION_VECTORA;
  151. // all the contexts maintained for a frame
  152. typedef struct
  153. {
  154. BLOCK_CONTEXT LeftY[2]; // 1 for each block row in a macroblock
  155. BLOCK_CONTEXT LeftU;
  156. BLOCK_CONTEXT LeftV;
  157. BLOCK_CONTEXTA *AboveY;
  158. BLOCK_CONTEXTA *AboveU;
  159. BLOCK_CONTEXTA *AboveV;
  160. BLOCK_CONTEXTA *AboveYAlloc;
  161. BLOCK_CONTEXTA *AboveUAlloc;
  162. BLOCK_CONTEXTA *AboveVAlloc;
  163. Q_LIST_ENTRY LastDcY[3]; // 1 for each frame
  164. Q_LIST_ENTRY LastDcU[3];
  165. Q_LIST_ENTRY LastDcV[3];
  166. } FRAME_CONTEXT;
  167. // Structure to hold last token values at each position in block
  168. typedef UINT8 TOKENBUFFER[256];
  169. //#define BIT_STATS 1
  170. #ifdef BIT_STATS
  171. #define BIT_STAT_CATEGORIES 8
  172. extern UINT32 BitStats[BIT_STAT_CATEGORIES];
  173. extern UINT8 BitStatCategory;
  174. #endif
  175. typedef struct
  176. {
  177. Q_LIST_ENTRY (*CoeffsAlloc)[72]; // coefficients 64 per frag 4 y in raster order, u then v
  178. Q_LIST_ENTRY (*Coeffs)[72]; // coefficients 64 per frag 4 y in raster order, u then v
  179. CODING_MODE Mode; // mode macroblock coded as
  180. CODING_MODE BlockMode[6]; // mode macroblock coded as
  181. MOTION_VECTOR Mv[6]; // one motion vector per block u and v calculated from rest
  182. MOTION_VECTOR NearestInterMVect;// nearest mv in last frame
  183. MOTION_VECTOR NearInterMVect; // near mv in last frame
  184. MOTION_VECTOR NearestGoldMVect; // nearest mv in gold frame
  185. MOTION_VECTOR NearGoldMVect; // near mv in gold frame
  186. UINT32 MBrow; // mb row
  187. UINT32 MBcol; // mb col
  188. BLOCK_POSITION bp; // block number 0 - 5
  189. UINT32 Source; // address for source (compressor only)
  190. UINT32 SourceY; // starting row
  191. UINT32 SourceX; // starting column
  192. INT32 CurrentSourceStride; // pitch of source (compressor only)
  193. UINT32 Recon; // address in reconstruction buffer of block
  194. INT32 CurrentReconStride; // pitch of reconstruction
  195. UINT32 Plane; // plane block is from
  196. INT32 MvShift; // motion vector shift value
  197. INT32 MvModMask; // motion vector mod mask
  198. INT32 FrameSourceStride; // Stride of the frame
  199. INT32 FrameReconStride; // Stride of the frame
  200. #ifdef RECONSTRUCTMBATONCE
  201. UINT32 ReconIndex[6]; // ReconIndex for each block
  202. #endif
  203. UINT32 SourcePtr[6]; // address for source (compressor only)
  204. UINT32 ReconPtr[6]; // address for source (compressor only)
  205. UINT32 StripPtr[6];
  206. #ifdef DMAREADREFERENCE
  207. INT32 Offset[6];
  208. UINT32 BoundaryX[6];
  209. UINT32 BoundaryY[6];
  210. #endif
  211. BLOCK_CONTEXTA *Above; // above block context
  212. BLOCK_CONTEXT *Left; // left block context
  213. Q_LIST_ENTRY *LastDc; // last dc value seen
  214. INT32 Interlaced; // is the macroblock interlaced?
  215. } MACROBLOCK_INFO;
  216. /****************************************************************************
  217. * MACROS
  218. *****************************************************************************
  219. */
  220. // Enumeration of how block is coded
  221. #define CURRENT_ENCODE_VERSION 5
  222. #define CURRENT_DECODE_VERSION 5
  223. #define UMV_BORDER 32
  224. #define STRIDE_EXTRA (UMV_BORDER * 2)
  225. #define MAX_MV_EXTENT 31 // Max search distance in half pixel increments
  226. #define MV_ENTROPY_TABLES 16
  227. #define MV_ENTROPY_TOKENS ((MAX_MV_EXTENT * 2) + 1)
  228. #define PPROC_QTHRESH 64
  229. #define MAX_MODES 10
  230. #define DCT_KEY_FRAME 0
  231. #define DEFAULT_HALF_PIXEL_PROB 85
  232. #define DCProbOffset(A,B) \
  233. ( (A) * (MAX_ENTROPY_TOKENS-1) \
  234. + (B) )
  235. #define DCContextOffset(A,B,C,D) \
  236. ( (A) * TOKEN_CONTEXTS * TOKEN_CONTEXTS * CONTEXT_NODES \
  237. + (B) * TOKEN_CONTEXTS * CONTEXT_NODES \
  238. + (C) * CONTEXT_NODES \
  239. + (D) )
  240. #define ACProbOffset(A,B,C,D) \
  241. ( (A) * PREC_CASES * VP5_AC_BANDS * (MAX_ENTROPY_TOKENS-1) \
  242. + (B) * VP5_AC_BANDS * (MAX_ENTROPY_TOKENS-1) \
  243. + (C) * (MAX_ENTROPY_TOKENS-1) \
  244. + (D) )
  245. #define ACContextOffset(A,B,C,D,E) \
  246. ( (A) * PREC_CASES * (VP5_AC_BANDS-3) * TOKEN_CONTEXTS * CONTEXT_NODES \
  247. + (B) * (VP5_AC_BANDS-3) * TOKEN_CONTEXTS * CONTEXT_NODES \
  248. + (C) * TOKEN_CONTEXTS * CONTEXT_NODES \
  249. + (D) * CONTEXT_NODES \
  250. + (E) )
  251. #define MBOffset(row,col) ( (row) * pbi->MBCols + (col) )
  252. /****************************************************************************
  253. * Global Variables
  254. *****************************************************************************
  255. */
  256. extern UINT8 LimitVal_VP31[VAL_RANGE * 3];
  257. extern BOOL VP5_ModeUsesMC[MAX_MODES]; // table to indicate if the given mode uses motion estimation
  258. extern const int VP5_Mode2Frame[DO_NOT_CODE];
  259. extern const INT32 CoeffToBand[65];
  260. //****************************************************************
  261. // Function Pointers some probably could be library globals!
  262. // all the information we ever need about a macroblock
  263. typedef struct PB_INSTANCE
  264. {
  265. // Should be able to delete these entries when VP5 complete
  266. INT32 CodedBlockIndex;
  267. UINT8 *DataOutputInPtr;
  268. FRAG_INFO *FragInfo;
  269. FRAG_INFO *FragInfoAlloc;
  270. /* Current access points fopr input and output buffers */
  271. BOOL_CODER br;
  272. //****************************************************************************************
  273. // Decoder and Frame Type Information
  274. UINT8 Vp3VersionNo;
  275. UINT32 DeInterlaceMode;
  276. UINT32 PostProcessingLevel; /* Perform post processing */
  277. UINT32 ProcessorFrequency; /* CPU frequency */
  278. UINT32 CPUFree;
  279. UINT8 FrameType;
  280. UINT8 KeyFrameType;
  281. //****************************************************************************************
  282. //****************************************************************************************
  283. // Frame Size & Index Information
  284. CONFIG_TYPE Configuration; // frame configuration
  285. UINT32 CurrentFrameSize;
  286. UINT32 YPlaneSize;
  287. UINT32 UVPlaneSize;
  288. UINT32 VFragments;
  289. UINT32 HFragments;
  290. UINT32 UnitFragments;
  291. UINT32 YPlaneFragments;
  292. UINT32 UVPlaneFragments;
  293. UINT32 ReconYPlaneSize;
  294. UINT32 ReconUVPlaneSize;
  295. UINT32 YDataOffset;
  296. UINT32 UDataOffset;
  297. UINT32 VDataOffset;
  298. UINT32 ReconYDataOffset;
  299. UINT32 ReconUDataOffset;
  300. UINT32 ReconVDataOffset;
  301. UINT32 MacroBlocks; // Number of Macro-Blocks in Y component
  302. UINT32 MBRows; // Number of rows of MacroBlocks in a Y frame
  303. UINT32 MBCols; // Number of cols of MacroBlocks in a Y frame
  304. UINT32 ScaleWidth;
  305. UINT32 ScaleHeight;
  306. UINT32 OutputWidth;
  307. UINT32 OutputHeight;
  308. UINT32 OutputStride;
  309. //****************************************************************************************
  310. //****************************************************************************************
  311. // Frames
  312. YUV_BUFFER_ENTRY *ThisFrameRecon;
  313. YUV_BUFFER_ENTRY *ThisFrameReconAlloc;
  314. YUV_BUFFER_ENTRY *GoldenFrame;
  315. YUV_BUFFER_ENTRY *GoldenFrameAlloc;
  316. YUV_BUFFER_ENTRY *LastFrameRecon;
  317. YUV_BUFFER_ENTRY *LastFrameReconAlloc;
  318. YUV_BUFFER_ENTRY *PostProcessBuffer;
  319. YUV_BUFFER_ENTRY *PostProcessBufferAlloc;
  320. YUV_BUFFER_ENTRY *ScaleBuffer; /* new buffer for testing new loop filtering scheme */
  321. YUV_BUFFER_ENTRY *ScaleBufferAlloc;
  322. //****************************************************************************************
  323. //****************************************************************************************
  324. Q_LIST_ENTRY *quantized_list;
  325. #ifdef RECONSTRUCTMBATONCE
  326. INT16 (*ReconDataBuffer)[64];
  327. INT16 (*ReconDataBufferAlloc)[64];
  328. #else
  329. INT16 *ReconDataBuffer;
  330. INT16 *ReconDataBufferAlloc;
  331. #endif
  332. UINT8 FragCoefEOB; // Position of last non 0 coef within QFragData
  333. INT16 *TmpReconBuffer;
  334. INT16 *TmpReconBufferAlloc;
  335. INT16 *TmpDataBuffer;
  336. INT16 *TmpDataBufferAlloc;
  337. UINT8 *LoopFilteredBlockAlloc;
  338. UINT8 *LoopFilteredBlock;
  339. #ifdef DMAREADREFERENCE
  340. UINT8 (*ReferenceBlocksAlloc)[192];
  341. UINT8 (*ReferenceBlocks)[192]; // Six Reference Blocks
  342. UINT32 mvX[6], mvY[6];
  343. #endif
  344. #ifdef DMAWRITERECON
  345. #ifdef RECONSTRUCTMBATONCE
  346. UINT8 *ThisBandReconPtr[6]; //Current Band to write to
  347. #else
  348. UINT8 *ThisBandReconPtr; //Current Band to write to
  349. #endif
  350. UINT8 *ReconstructedMBs; //bandbuffer for DMA reconstructed MB row.
  351. UINT8 *ReconstructedMBsAlloc;
  352. UINT8 *FillMem;
  353. #endif
  354. //****************************************************************
  355. void (**idct)(INT16 *InputData, INT16 *QuantMatrix, INT16 * OutputData );
  356. POSTPROC_INST postproc;
  357. QUANTIZER *quantizer;
  358. MACROBLOCK_INFO mbi; // all the information needed for one macroblock
  359. FRAME_CONTEXT fc; // all of the context information needed for a frame
  360. TOKENBUFFER LastToken; // LTIndex of tokens at each position in block
  361. CODING_MODE LastMode; // Last Mode decoded;
  362. UINT8 DcProbs[2*(MAX_ENTROPY_TOKENS-1)];
  363. UINT8 AcProbs[2*PREC_CASES*VP5_AC_BANDS*(MAX_ENTROPY_TOKENS-1)];
  364. UINT8 DcNodeContexts[2*TOKEN_CONTEXTS*TOKEN_CONTEXTS*CONTEXT_NODES]; // Plane, Node, Contexts, Contexts
  365. UINT8 AcNodeContexts[2*PREC_CASES*(VP5_AC_BANDS-3)*TOKEN_CONTEXTS*CONTEXT_NODES]; // Prec, Plane, AcBand, Context, Node
  366. UINT8 ZeroCount;
  367. UINT8 MBModeProb[11];
  368. UINT8 BModeProb[11];
  369. UINT8 Inter00Prob;
  370. UINT32 AvgFrameQIndex;
  371. BOOL testMode;
  372. UINT32 mvNearOffset[16];
  373. int probInterlaced;
  374. char *MBInterlaced;
  375. char *predictionMode;
  376. MOTION_VECTORA *MBMotionVector;
  377. char *MBInterlacedAlloc;
  378. char *predictionModeAlloc;
  379. MOTION_VECTORA *MBMotionVectorAlloc;
  380. UINT8 MvSignProbs[2];
  381. UINT8 MvZeroProbs[2];
  382. UINT8 MvHalfPixelProbs[2];
  383. UINT8 MvLowBitProbs[2];
  384. UINT8 MvSizeProbs[2][((MAX_MV_EXTENT+1) >> 2) - 1];
  385. UINT8 probXmitted[4][2][MAX_MODES];
  386. UINT8 probModeSame[4][MAX_MODES];
  387. UINT8 probMode[4][MAX_MODES][MAX_MODES-1]; // nearest+near,nearest only, nonearest+nonear, 10 preceding modes, 9 nodes
  388. UINT32 maxTimePerFrame;
  389. UINT32 thisDecodeTime;
  390. UINT32 avgDecodeTime;
  391. UINT32 avgPPTime[10];
  392. UINT32 avgBlitTime;
  393. UINT32 BlackClamp;
  394. UINT32 WhiteClamp;
  395. } PB_INSTANCE;
  396. /****************************************************************************
  397. * Functions.
  398. *****************************************************************************
  399. */
  400. //****************************************************************
  401. // Function Pointers now library globals!
  402. //extern void (*ReadTokens)( xPB_INST pbi, UINT32 BlockSize, UINT32 Hpos );
  403. //****************************************************************
  404. extern PB_INSTANCE * VP5_CreatePBInstance(void);
  405. extern void VP5_DeletePBInstance(PB_INSTANCE **);
  406. extern BOOL VP5_LoadFrame(PB_INSTANCE *pbi);
  407. extern void VP5_SetFrameType(PB_INSTANCE *pbi, UINT8 FrType );
  408. extern UINT8 VP5_GetFrameType(PB_INSTANCE *pbi);
  409. extern BOOL VP5_InitFrameDetails(PB_INSTANCE *pbi);
  410. extern void VP5_ErrorTrap( PB_INSTANCE *pbi, int ErrorCode );
  411. extern BOOL VP5_AllocateFragmentInfo(PB_INSTANCE * pbi);
  412. extern BOOL VP5_AllocateFrameInfo(PB_INSTANCE * pbi, unsigned int FrameSize);
  413. extern void VP5_DeleteFragmentInfo(PB_INSTANCE * pbi);
  414. extern void VP5_DeleteFrameInfo(PB_INSTANCE * pbi);
  415. extern void VP5_DMachineSpecificConfig(void);
  416. INLINE UINT32 VP5_bitread1(BOOL_CODER *br)
  417. {
  418. return (DecodeBool128(br));
  419. }
  420. INLINE UINT32 VP5_bitread(BOOL_CODER *br, int bits)
  421. {
  422. UINT32 z = 0;
  423. int bit;
  424. for(bit=bits-1;bit>=0;bit--)
  425. {
  426. z|=(DecodeBool128(br)<<bit);
  427. }
  428. return z;
  429. }
  430. extern void vp5_appendframe(PB_INSTANCE *pbi);
  431. extern void VP5_readTSC(unsigned long *tsc);
  432. extern void ConfigureContexts(PB_INSTANCE *pbi);
  433. // dx\generic\decodembs.c
  434. extern void ResetAboveContext(PB_INSTANCE* pbi);
  435. extern void ResetLeftContext(PB_INSTANCE* pbi);
  436. extern void UpdateContext(PB_INSTANCE* pbi, BLOCK_CONTEXT* c, BLOCK_POSITION bp);
  437. extern void UpdateContextA(PB_INSTANCE* pbi, BLOCK_CONTEXTA* c, BLOCK_POSITION bp);
  438. extern void PredictDC(PB_INSTANCE* pbi, BLOCK_POSITION bp, Q_LIST_ENTRY* LastDC, BLOCK_CONTEXTA* Above, BLOCK_CONTEXT* Left);
  439. // dx\generic\recon.c
  440. extern void ReconstructBlock(PB_INSTANCE* pbi, BLOCK_POSITION bp);
  441. // dx\generic\decodemode.c
  442. extern CODING_MODE DecodeBlockMode(PB_INSTANCE *pbi);
  443. extern CODING_MODE DecodeMode(PB_INSTANCE *pbi, CODING_MODE lastmode, UINT32 type);
  444. #endif