mpeg_decode.h
上传用户:wstnjxml
上传日期:2014-04-03
资源大小:7248k
文件大小:3k
源码类别:

Windows CE

开发平台:

C/C++

  1. /*****************************************************************************
  2.  *
  3.  * This program is free software ; you can redistribute it and/or modify
  4.  * it under the terms of the GNU General Public License as published by
  5.  * the Free Software Foundation; either version 2 of the License, or
  6.  * (at your option) any later version.
  7.  *
  8.  * This program is distributed in the hope that it will be useful,
  9.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11.  * GNU General Public License for more details.
  12.  *
  13.  * You should have received a copy of the GNU General Public License
  14.  * along with this program; if not, write to the Free Software
  15.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  16.  *
  17.  * $Id: mpeg_decode.h 603 2006-01-19 13:00:33Z picard $
  18.  *
  19.  * The Core Pocket Media Player
  20.  * Copyright (c) 2004-2005 Gabor Kovacs
  21.  *
  22.  ****************************************************************************/
  23. #ifndef __MPEG_DECODE_H
  24. #define __MPEG_DECODE_H
  25. // maximun picture size in macroblocks (16x16)
  26. // example MB_X2=6 -> 2^6=64 macroblocks -> 1024 pixels
  27. #define MB_X2 6
  28. #define MB_Y2 6
  29. #define MB_X (1<<MB_X2)
  30. #define MB_Y (1<<MB_Y2)
  31. #define SEQ_END_CODE 0x1B7
  32. #define SEQ_START_CODE 0x1B3
  33. #define GOP_START_CODE 0x1B8
  34. #define PICTURE_START_CODE 0x100
  35. #define SLICE_MIN_START_CODE 0x101
  36. #define SLICE_MAX_START_CODE 0x1AF
  37. #define EXT_START_CODE 0x1B5
  38. #define USER_START_CODE 0x1B2
  39. #define I_VOP 1
  40. #define P_VOP 2
  41. #define B_VOP 3
  42. #define POSX(pos) ((pos) & (MB_X-1))
  43. #define POSY(pos) ((pos) >> MB_X2)
  44. #define MB_QUANT 0x01
  45. #define MB_FOR 0x02
  46. #define MB_BACK 0x04
  47. #define MB_PAT 0x08
  48. #define MB_INTRA 0x10
  49. #define MPEG1_FRAME_RATE_BASE 1001
  50. typedef struct mpeg_decode
  51. {
  52. codecidct Codec;
  53. // bitstream
  54. int bits;
  55. int bitpos;
  56. const uint8_t *bitptr;
  57. const uint8_t *bitend;
  58. boolmem_t ValidSeq;
  59. boolmem_t ErrorShowed;
  60. boolmem_t SliceFound;
  61. boolmem_t OnlyIVOP;
  62. int Frame;
  63. tick_t StartTime;
  64. int32_t StartState;
  65. int bufframe; // frame number of buffer's previous state
  66. int refframe;
  67. int lastrefframe; // frame number of last refframe
  68. int mapofs; // mapofs + (framemap[pos] >> 1) is the last time that block was updated
  69. int currframemap; // (frame - mapofs) << 1
  70. int qscale;
  71. int skip;
  72.     int last_dc[3]; 
  73.     int fmv[1+6]; // last y, new y[4], new uv[2]
  74.     int bmv[1+6]; // last y, new y[4], new uv[2]
  75. idct_block_t* blockptr;
  76. IDCT_BLOCK_DECLARE
  77. int mb_xsize;
  78. int mb_ysize;
  79. int pos_end;
  80. int prediction_type;
  81. int frame_state; // -1:no info 0:decoding 1:need startframe
  82. int full_pixel[2];
  83. int fcode[2];
  84. uint8_t zigzag[64];
  85.     uint8_t IntraMatrix[64];
  86.     uint8_t InterMatrix[64];
  87. uint8_t framemap[MB_X*MB_Y]; // when the last time the block changed (and resuce needed flag)
  88. int width;
  89. int height;
  90. int aspect;
  91. } mpeg_decode;
  92. #endif