MP4_VARS.H
上传用户:hxb_1234
上传日期:2010-03-30
资源大小:8328k
文件大小:4k
源码类别:

VC书籍

开发平台:

Visual C++

  1. #include "portab.h"
  2. #include "decore.h"
  3. #include "mp4_header.h"
  4. #include "mp4_vld.h"
  5. #include "postprocess.h"
  6. //宏定义
  7. #define mmax(a, b)      ((a) > (b) ? (a) : (b))
  8. #define mmin(a, b)      ((a) < (b) ? (a) : (b))
  9. #define mnint(a)        ((a) < 0 ? (int)(a - 0.5) : (int)(a + 0.5))
  10. #define sign(a)         ((a) < 0 ? -1 : 1)
  11. #define abs(a) ((a)>0 ? (a) : -(a))
  12. #define sign(a) ((a) < 0 ? -1 : 1)
  13. #define mnint(a) ((a) < 0 ? (int)(a - 0.5) : (int)(a + 0.5))
  14. #define _div_div(a, b) (a>0) ? (a+(b>>1))/b : (a-(b>>1))/b
  15. //解码器数据结构的定义
  16. // mpeg4流的数据结构定义
  17. typedef struct 
  18. {
  19. // 位输入
  20. int infile;
  21. unsigned char rdbfr[2051];
  22. unsigned char *rdptr;
  23. unsigned char inbfr[16];
  24. int incnt;
  25. int bitcnt;
  26. int length;
  27. // 块数据
  28. short block[64];
  29. } MP4_STREAM;
  30. // AC/DC预测的数据结构定义
  31. typedef struct _ac_dc
  32. {
  33. int dc_store_lum[2*DEC_MBR+1][2*DEC_MBC+1];
  34. int ac_left_lum[2*DEC_MBR+1][2*DEC_MBC+1][7];
  35. int ac_top_lum[2*DEC_MBR+1][2*DEC_MBC+1][7];
  36. int dc_store_chr[2][DEC_MBR+1][DEC_MBC+1];
  37. int ac_left_chr[2][DEC_MBR+1][DEC_MBC+1][7];
  38. int ac_top_chr[2][DEC_MBR+1][DEC_MBC+1][7];
  39. int predict_dir;
  40. } ac_dc;
  41. typedef void (* pfun_convert_yuv)(unsigned char *puc_y, int stride_y,
  42. unsigned char *puc_u, unsigned char *puc_v, int stride_uv,
  43. unsigned char *bmp, int width_y, int height_y,
  44. unsigned int stride_out);
  45. //mpeg4状态的数据结构定义
  46. typedef struct _MP4_STATE_
  47. {
  48. mp4_header hdr;
  49. int modemap[DEC_MBR+1][DEC_MBC+2];
  50. int quant_store[DEC_MBR+1][DEC_MBC+1]; 
  51. int MV[2][6][DEC_MBR+1][DEC_MBC+2];
  52. ac_dc coeff_pred;
  53. short iclp_data[1024];       
  54. short *iclp;
  55. unsigned char clp_data[1024];
  56. unsigned char *clp;
  57. pfun_convert_yuv convert_yuv;
  58. int flag_invert;
  59. int horizontal_size;
  60. int vertical_size;
  61. int mb_width;
  62. int mb_height;
  63. int juice_hor;
  64. int juice_ver;
  65. int coded_picture_width;
  66. int coded_picture_height;
  67. int chrom_width;
  68. int chrom_height;
  69. int juice_flag;
  70. int post_flag;
  71. int pp_options;
  72. #ifndef _DECORE
  73. char *infilename;
  74. char * outputname;
  75. int output_flag;
  76. #endif
  77. MP4_STATE;
  78. // mpeg4表的数据结构定义
  79. typedef struct _MP4_TABLES_
  80. {
  81. unsigned int zig_zag_scan[64];
  82. unsigned int alternate_vertical_scan[64];
  83. unsigned int alternate_horizontal_scan[64];
  84. unsigned int intra_quant_matrix[64];
  85. unsigned int nonintra_quant_matrix[64];
  86. unsigned int msk[33];
  87. int roundtab[16];
  88. int saiAcLeftIndex[8];
  89. int DQtab[4];
  90. tab_type MCBPCtabIntra[32];
  91. tab_type MCBPCtabInter[256];
  92. tab_type CBPYtab[48];
  93. tab_type MVtab0[14];
  94. tab_type MVtab1[96];
  95. tab_type MVtab2[124];
  96. tab_type tableB16_1[112];
  97. tab_type tableB16_2[96];
  98. tab_type tableB16_3[120];
  99. tab_type tableB17_1[112];
  100. tab_type tableB17_2[96];
  101. tab_type tableB17_3[120];
  102. MP4_TABLES;
  103. //全局的变量
  104. extern unsigned char *edged_ref[3],
  105. *edged_for[3],
  106. *frame_ref[3],
  107. *frame_for[3],
  108. *display_frame[3];
  109. extern MP4_STATE  *mp4_state;
  110. extern MP4_TABLES  *mp4_tables;
  111. extern MP4_STREAM  *ld;
  112. //全局函数的原型
  113. int decore_init (int hor_size, int ver_size, int output_format, int time_incr, DEC_BUFFERS buffers);
  114. int decore_frame (unsigned char *stream, int length, unsigned char *bmp, unsigned int stride, int render_flag);
  115. int decore_release ();
  116. int decore_setoutput (int output_format);
  117. void closedecoder ();
  118. void initdecoder (DEC_BUFFERS buffers);
  119. void save_tables (MP4_TABLES * tables);
  120. void idct (short *block);
  121. void reconstruct (int bx, int by, int mode);
  122. void get_mp4picture (unsigned char *bmp, unsigned int stride, int render_flag);
  123. void PictureDisplay (unsigned char *bmp, unsigned int stride, int render_flag);