global.h
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:1k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. #ifndef _GLOBAL_H_
  2. #define _GLOBAL_H_
  3. #include "xvid.h"
  4. #include "portab.h"
  5. /* --- macroblock stuff --- */
  6. #define MODE_INTER 0
  7. #define MODE_INTER_Q 1
  8. #define MODE_INTER4V 2
  9. #define MODE_INTRA 3
  10. #define MODE_INTRA_Q 4
  11. #define MODE_STUFFING 7
  12. #define MODE_NOT_CODED 16
  13. typedef struct
  14. {
  15. uint32_t bufa;
  16. uint32_t bufb;
  17. uint32_t buf;
  18. uint32_t pos;
  19. uint32_t *tail;
  20. uint32_t *start;
  21. uint32_t length;
  22. Bitstream;
  23. #define MBPRED_SIZE  15
  24. typedef struct
  25. {
  26. // decoder/encoder 
  27. VECTOR mvs[4];
  28. uint32_t sad8[4]; // SAD values for inter4v-VECTORs
  29. uint32_t sad16; // SAD value for inter-VECTOR
  30.     short int pred_values[6][MBPRED_SIZE];
  31.     int acpred_directions[6];
  32.     
  33. int mode;
  34. int quant; // absolute quant
  35. int field_dct;
  36. int field_pred;
  37. int field_for_top;
  38. int field_for_bot;
  39. // encoder specific
  40. VECTOR pmvs[4];
  41. int dquant;
  42. int cbp;
  43. } MACROBLOCK;
  44. static __inline int8_t get_dc_scaler(int32_t quant, uint32_t lum)
  45. {
  46.     int8_t dc_scaler;
  47. if(quant > 0 && quant < 5) {
  48.         dc_scaler = 8;
  49. return dc_scaler;
  50. }
  51. if(quant < 25 && !lum) {
  52.         dc_scaler = (quant + 13) >> 1;
  53. return dc_scaler;
  54. }
  55. if(quant < 9) {
  56.         dc_scaler = quant << 1;
  57. return dc_scaler;
  58. }
  59.     if(quant < 25) {
  60.         dc_scaler = quant + 8;
  61. return dc_scaler;
  62. }
  63. if(lum)
  64. dc_scaler = (quant << 1) - 16;
  65. else
  66.         dc_scaler = quant - 6;
  67.     return dc_scaler;
  68. }
  69. #endif /* _GLOBAL_H_ */