codectypes.h
上传用户:mony888
上传日期:2022-07-26
资源大小:1247k
文件大小:7k
源码类别:

Windows CE

开发平台:

Visual C++

  1.   /*************************************************************************/
  2. /*                                                                       */
  3. /* Copyright (c) 2000-2004 Linuos Design                                 */
  4. /*                                     领驰设计中心  版权所有 2000-2004  */
  5. /*                                                                       */
  6. /* PROPRIETARY RIGHTS of Linuos Design  are involved in the subject      */
  7. /* matter of this material.  All manufacturing, reproduction, use, and   */
  8. /* sales rights pertaining to this subject matter are governed by the    */
  9. /* license agreement.  The recipient of this software implicitly accepts */ 
  10. /* the terms of the license.                                             */
  11. /* 本软件文档资料是领驰设计中心的资产,任何人士阅读和使用本资料必须获得   */
  12. /* 相应的书面授权,承担保密责任和接受相应的法律约束.                      */
  13. /*                                                                       */
  14. /*************************************************************************/
  15. /************************************************************************* 
  16. CODECTYPES.h
  17. Author gaowei
  18. date 2004.12.7
  19. Note:
  20. History:
  21.  *************************************************************************/
  22. #ifndef _CODECTYPES_H_
  23. #define _CODECTYPES_H_
  24. enum PixelFormat {
  25.     PIX_FMT_YUV420P,   ///< Planar YUV 4:2:0 (1 Cr & Cb sample per 2x2 Y samples)
  26.     PIX_FMT_YUV422,    
  27.     PIX_FMT_RGB24,     ///< Packed pixel, 3 bytes per pixel, RGBRGB...
  28.     PIX_FMT_BGR24,     ///< Packed pixel, 3 bytes per pixel, BGRBGR...
  29.     PIX_FMT_YUV422P,   ///< Planar YUV 4:2:2 (1 Cr & Cb sample per 2x1 Y samples)
  30.     PIX_FMT_YUV444P,   ///< Planar YUV 4:4:4 (1 Cr & Cb sample per 1x1 Y samples)
  31.     PIX_FMT_RGBA32,    ///< Packed pixel, 4 bytes per pixel, BGRABGRA..., stored in cpu endianness
  32.     PIX_FMT_YUV410P,   ///< Planar YUV 4:1:0 (1 Cr & Cb sample per 4x4 Y samples)
  33.     PIX_FMT_YUV411P,   ///< Planar YUV 4:1:1 (1 Cr & Cb sample per 4x1 Y samples)
  34.     PIX_FMT_RGB565,    ///< always stored in cpu endianness 
  35.     PIX_FMT_RGB555,    ///< always stored in cpu endianness, most significant bit to 1 
  36.     PIX_FMT_GRAY8,
  37.     PIX_FMT_MONOWHITE, ///< 0 is white 
  38.     PIX_FMT_MONOBLACK, ///< 0 is black 
  39.     PIX_FMT_PAL8,      ///< 8 bit with RGBA palette 
  40.     PIX_FMT_YUVJ420P,  ///< Planar YUV 4:2:0 full scale (jpeg)
  41.     PIX_FMT_YUVJ422P,  ///< Planar YUV 4:2:2 full scale (jpeg)
  42.     PIX_FMT_YUVJ444P,  ///< Planar YUV 4:4:4 full scale (jpeg)
  43.     PIX_FMT_XVMC_MPEG2_MC,///< XVideo Motion Acceleration via common packet passing(xvmc_render.h)
  44.     PIX_FMT_XVMC_MPEG2_IDCT,
  45.     PIX_FMT_NB
  46. };
  47. enum CodecType {
  48.     CODEC_TYPE_UNKNOWN = -1,
  49. CODEC_TYPE_VIDEO,
  50. CODEC_TYPE_AUDIO,
  51. CODEC_TYPE_DATA
  52. };
  53. /************************************************************************* 
  54. 以下是通用便解码器模型,与播放器接口。
  55.  *************************************************************************/
  56. typedef struct CodecContext{
  57. DWORD magic_code; //例如 "AAC!" -> ('!'<<24) + ('C'<<16) + ('A'<<8) + 'A').
  58. //由编解码器自己填写,进行参数合法性判断
  59. void *priv_data; //一般用来存放编解码器句柄
  60. /********************* common part*********************************/    
  61.     enum CodecType codec_type; /* i.e  CODEC_TYPE_AUDIO */
  62.     INT32 codec_id; /* i.e  CODEC_ID_AAC */
  63.     void *extradata; //mpeg4: global headers (they can be in the bitstream or here)
  64.     INT32 extradata_size; //size of extradata 
  65. INT32 bit_rate; //the average bitrate.
  66. INT32 dts; //decompression time stamp in AV_TIME_BASE units (or
  67. //pts_den units in muxers or demuxers)
  68. INT32 pts; //presentation time stamp in AV_TIME_BASE units (or
  69. //pts_den units in muxers or demuxers)
  70. INT32 duration; //presentation duration (0 if not available)
  71. INT32 totle_frame_count;
  72. INT32 time_base_den; //for rescale 
  73. INT32 time_base_num; //for rescale 
  74. INT32 frame_index;
  75. //UInt8* outbuf;
  76. //INT32 one_frame_size;
  77. /********************* audio only *********************************/ 
  78. INT32 bits_per_sample;
  79.     INT32 sample_rate; //采样率 
  80.     INT32 channels; //通道
  81.     INT32 sample_fmt; //采样格式 
  82. /********************* video only *********************************/
  83. //Frame rate
  84.     INT32 frame_rate; //frames per sec multiplied by frame_rate_base.
  85. INT32 frame_rate_base; //(frame_rate_f) = frame_rate * 1.0 / frame_rate_base
  86.     INT32 width, height; //width / height.
  87. INT32 csp; // color space, output format
  88. void* dec_stats;
  89. /********************* encode only *********************************/
  90. INT32 rate_emu; //编码使用 Frame rate emulation.
  91. INT32 delay;
  92. INT32 qmin; // maximum quantizer. 通过控制量化来控制码率!
  93. INT32 qmax; // minimum quantizer.
  94. INT32 max_qdiff;  // maximum quantizer difference etween frames.
  95. INT32 max_b_frames; // maximum number of b frames between non b frames.
  96. // note: the output will be delayed by max_b_frames+1 relative to the input
  97. INT32 frame_bits; // number of bits used for the previously encoded frame.
  98. INT32 luma_elim_threshold; //luma single coeff elimination threshold.
  99. INT32 chroma_elim_threshold; //chroma single coeff elimination threshold.
  100. INT32 has_b_frames;
  101. INT32 mpeg_quant;
  102.     float qcompress;  ///< amount of qscale change between easy & hard scenes (0.0-1.0)
  103.     float qblur;      ///< amount of qscale smoothing over time (0.0-1.0) 
  104. float b_quant_factor; // qscale factor between ip and b frames.
  105. float b_quant_offset; //qscale offset between ip and b frames.
  106. }CodecContext;
  107. /************************************************************************* 
  108. 通用解码器接口函数集
  109.  *************************************************************************/
  110. typedef struct CodecInterfaceType {
  111. CHAR* name;
  112.     enum CodecType codec_type; /* i.e  CODEC_TYPE_AUDIO */
  113.     INT32 codec_id; /* i.e  CODEC_ID_AAC */
  114.     INT32 priv_data_size;
  115. /********************* 必须实现部分 *********************************/
  116.     INT32 (*init)  (CodecContext *Data);
  117.     INT32 (*close) (CodecContext *Data);
  118. /********************* 可选实现部分 *********************************/
  119.     INT32 (*decode)(CodecContext *pData, void *pDecData, INT32 *pcbDecDataSize,
  120. UINT8 *pInbuf, INT32* pcbInbufSize, INT32 skip); 
  121.     INT32 (*encode)(CodecContext *pData, void **ppEncdata, INT32 *pcbEncDataSize,
  122. UINT8 *pInbuf, INT32* pcbInbufSize);
  123.     void (*flush)(CodecContext *Data);
  124. struct CodecInterfaceType *next;
  125. } CodecInterfaceType;
  126. #endif //_CODECTYPES_H_