kinf.h
上传用户:poi891205
上传日期:2013-07-15
资源大小:9745k
文件大小:10k
源码类别:

DVD

开发平台:

C/C++

  1. //
  2. // FILE
  3. // kinf.h
  4. //
  5. // DESCRIPTION
  6. // This file is to provide an interface between kernel programs
  7. // and upper software.  Don't place anything other than kernel
  8. // definitions.
  9. // Also always make sure this file is coherent with the kernel
  10. // program.
  11. //
  12. #ifndef __KINF_H
  13. #define __KINF_H
  14. #include "types.h"
  15. #include "cpu.h"
  16. #include "framebuf.h"
  17. #include "viddec.h"
  18. extern const UINT8 KernelVersion[];
  19. // NAV
  20. extern  UINT8   new_cell;
  21. // DIP
  22. extern  UINT8   dip_sel;
  23. extern  UINT8   dip_enable;
  24. // MB22
  25. extern  UINT8   mb22_en;
  26. // hardware clock gating
  27. extern  UINT8   kernel_clock_gating;
  28. // error concealment
  29. extern  UINT32  kernel_error_counter;
  30. extern  UINT8   kernel_error_concealment;
  31. extern  UINT8   kernel_error_mb_threshold;
  32. // for portable
  33. extern UINT8 kernel_portable_bonding;
  34. // system-layer
  35. extern  UINT8   kiPckType;
  36. #define KI_PCKTYPE_VOB              0
  37. #define KI_PCKTYPE_AOB              1
  38. #define KI_IS_VOB_PCK()             (KI_PCKTYPE_VOB == kiPckType)
  39. #define KI_IS_AOB_PCK()             (KI_PCKTYPE_AOB == kiPckType)
  40. extern  UINT8   kiAuStream;
  41. extern  UINT8   kiAuStreamNum;
  42. #define KI_AU_STREAM_PCM            0xa0
  43. #define KI_AU_STREAM_AC3            0x80
  44. #define KI_AU_STREAM_DTS            0x88
  45. #define KI_AU_STREAM_MPG            0xc0
  46. #define KI_AU_TYPE_MASK             0xf8
  47. #define KI_AU_MPG_MASK              0xe0
  48. #define KI_AU_STREAM_MASK           0x07
  49. #define AUDIO_TIME_STAMP 0
  50. #define VIDEO_TIME_STAMP 1
  51. #define SUPIC_TIME_STAMP 2
  52. #define TIME_TYPE_DTS PIC_CHK_DTS
  53. #define TIME_TYPE_PTS PIC_CHK_PTS
  54. #define IS_DTS_TIME_STAMP(type) (((type)&TIME_TYPE_DTS) == TIME_TYPE_DTS)
  55. #define IS_PTS_TIME_STAMP(type) (((type)&TIME_TYPE_PTS) == TIME_TYPE_PTS)
  56. #define IS_SRC_MPEG1(opt) ((opt&(PIC_MPEG2|PIC_MPEG4)) == 0)
  57. #define IS_SRC_MPEG2(opt) (opt&PIC_MPEG2)
  58. #define IS_SRC_MPEG4(opt) (opt&PIC_MPEG4)
  59. // buffer control function and defines
  60. void set_av_time_stamp(UINT32 media, UINT32 type, INT64 time_stamp);
  61. void av_check_buf_full(int avflg, UINT32 mode);
  62. #define DVD_SYNC_MODE 0x0
  63. #define SIMPLE_SYNC_MODE 0x1
  64. #define AUDIO_FULL 0x0
  65. #define VIDEO_FULL 0x1
  66. #define SUPIC_FULL 0x2
  67. // video decode option
  68. #define VID_NORMAL_DEC 0
  69. #define VID_SKIP_B (1 << 0)
  70. #define VID_FLD_DEC (1 << 1)
  71. #define VID_PEND_DEC (1 << 2)
  72. #define VID_SKIP_P (1 << 3)
  73. #define VID_DISABLE_AVSYNC (1 << 4)
  74. #define VID_VFULL_DEC (1 << 5)
  75. #define IS_VID_NORMAL_DEC() (video_dec_opt == VID_NORMAL_DEC)
  76. #define IS_VID_SKIP_B() ((video_dec_opt&VID_SKIP_B) > 0)
  77. #define IS_VID_SKIP_P() ((video_dec_opt&VID_SKIP_P) > 0)
  78. #define IS_VID_FLD_DEC() ((video_dec_opt&VID_FLD_DEC) > 0)
  79. #define IS_VID_PEND_DEC() ((video_dec_opt&VID_PEND_DEC) > 0)
  80. #define IS_VID_DIS_AVSYNC() ((video_dec_opt&VID_DISABLE_AVSYNC) > 0)
  81. #define IS_VID_VFULL_DEC() ((video_dec_opt&VID_VFULL_DEC) > 0)
  82. #define SET_VIDDEC_OPT(x) (video_dec_opt = (x))
  83. #define GET_VIDDEC_OPT() (video_dec_opt)
  84. extern void set_avsync_option(UINT32 option);
  85. // frame rate control
  86. void frctl_clear_count();
  87. void frctl_set_display_rate();
  88. void frctl_set_frame_rate(int rate, int scale);
  89. UINT64 frctl_frame_to_stc(UINT32 frame);
  90. UINT32 frctl_frame_to_time(UINT32 frame);
  91. UINT32 frctl_time_to_frame(UINT32 time);
  92. //#ifdef SUPPORT_MP4
  93. extern int (*intr_decode_mp4_video)(int will_be_top_field, int decode_synced);
  94. extern int (*intr_dec_avi_sup)(int will_be_top_field);
  95. extern int (*calc_accm_audio_fPTS)();
  96. // get_mp4_video_codec()
  97. #define MPEG4_ISO 0
  98. #define MPEG4_SHORT_HEADER 1
  99. #define MPEG4_DIVX_311 2
  100. #define MPEG4_DIVX_412 3
  101. #define MPEG4_DIVX_5 4
  102. // video_property_flag
  103. extern UINT32 video_property_flag;
  104. #define MPEG4_TYPE_FLAG (1 << 0) // MPEG-4
  105. #define MPEG4_INTERLACED_FLAG (1 << 1) // Interlaced
  106. #define MPEG4_SHORT_FLAG (1 << 2) // Short Header
  107. #define MPEG4_GMC_FLAG (1 << 3) // Global Motion Compensation
  108. #define MPEG4_QPEL_FLAG (1 << 4) // Quarter Pixel
  109. #define IS_MPEG4_INTERLACED() ((video_property_flag&MPEG4_INTERLACED_FLAG) > 0)
  110. #define IS_MPEG4_SHORT_HEADER() ((video_property_flag&MPEG4_SHORT_FLAG) > 0)
  111. #define IS_MPEG4_GMC() ((video_property_flag&MPEG4_GMC_FLAG) > 0)
  112. #define IS_MPEG4_QPEL() ((video_property_flag&MPEG4_QPEL_FLAG) > 0)
  113. // mp4vid_status
  114. // set by video parser, and cleared by file parser
  115. extern UINT8 mp4vid_status;
  116. #define MPEG4_STATUS_NEED_DATA 0 // need more data
  117. #define MPEG4_STATUS_ERROR_UNSUPPORTED 1 // error of unsupported options
  118. #define MPEG4_STATUS_ERROR_SEQUENCE 2 // error of parsing the sequence header
  119. #define MPEG4_STATUS_ERROR_PICTURE 3 // error of parsing the picture
  120. #define MPEG4_STATUS_OK MPEG4_STATUS_NEED_DATA
  121. void set_mp4_frame(UINT32 frame);
  122. #define GET_MP4_FRAME() (decoded_frame)
  123. #define GET_MP4_TIME() frctl_frame_to_time(decoded_frame) // in seconds
  124. #define GET_MP4_STC() frctl_frame_to_stc(decoded_frame)
  125. // Initialization for each MPEG-4 file
  126. int mp4vid_init(int width, int height, UINT32, UINT32);
  127. // Initialization of an AVI chunk of MPEG-4. 
  128. inline void mp4vid_chunk_initialize();
  129. void restart_mp4_video_engine();
  130. // GOTO request. If 0 is returned, the GOTO request can not be performed.
  131. int mp4vid_goto(int skip_vop_number);
  132. void mp4_avfilled(int avflg);
  133. inline UINT32 get_mp4_video_codec();
  134. //#endif // SUPPORT_MP4
  135. extern  INT8    R_skip;             /* used to skip REF pictures    */
  136. extern  INT16   B_skip;             /* used to skip B picture   */
  137. extern  INT8    P_frame;            // play P_frame and stop, if (P_frame==0) normal play
  138.                                     // if (P_frame<0) stop
  139. extern  INT8    P_vobu;             // play P_vobu and stop, if (P_vobu==0) normal play
  140.                                     // if (P_vobu<0) stop
  141.                                     //
  142. extern UINT8 vobu_DSI_valid;
  143. extern  UINT8   nav_pck_cntr;
  144. extern  BYTE    sequence_start;
  145. extern  UINT32  play_finish_time;
  146. extern  INT64   scr_current;
  147. extern  INT64   PTS_audio;
  148. extern  INT64   PTS_video;
  149. extern  UINT8   picture_parsing_entry;
  150. extern  UINT8   picture_parsed_entry;
  151. extern  UINT8   picture_decoding_entry;
  152. extern  UINT8   picture_coding_type;
  153. extern  UINT16  pic_coding_ext0;
  154. extern  INT16   vbv_y; 
  155. extern  INT16   vbv_x; 
  156. extern  INT16   vbv_by; 
  157. extern  INT16   vbv_bx; 
  158. #define video_parsing_barrier   vbv_by
  159. /*
  160. ** STREAM ID
  161. */
  162. extern  UINT8   stream_video;
  163. extern  UINT8   stream_audio;
  164. extern  UINT8   stream_audio_table[8];
  165. extern  UINT8   stream_sup_table[15];
  166. extern  UINT8   sub_stream_id_sup;
  167. extern  UINT8   sub_stream_id_sup_2;
  168. /*
  169. */
  170. extern  UINT8   audio_filled;
  171. extern  UINT8   video_filled;
  172. extern  UINT8   avbuf_filled;
  173. extern  UINT8   video_slow_wait;
  174. extern  UINT8   forward_ref_option;
  175. extern  INT8    dis_pic_id_saved_0;
  176. extern  INT8    dis_field_cntr;
  177. extern  INT8    dec_field_cntr;
  178. extern  UINT32  decoded_pic;
  179. extern  UINT32  decoded_frame;
  180. extern UINT32  video_dec_opt;
  181. #define get_decoded_pic()   (decoded_pic)
  182. extern  UINT8   frame_rate;
  183. extern  UINT8   chk_first_B;
  184. //
  185. #define DECODE_FORMAT_525   0
  186. #define DECODE_FORMAT_625   1
  187. #define DECODE_FORMAT_OTHER 2
  188. extern  UINT8   viddec_format;
  189. #define get_decode_format()     (viddec_format)
  190. #define set_decode_format(f)    (viddec_format=(f))
  191. extern  UINT8   viddec_nodecode;
  192. //
  193. // FRAMEBUF
  194. // framebuf_mb_width    macroblock-mode
  195. // framebuf_line_width
  196. extern  UINT16  framebuf_mb_width; 
  197. extern  UINT16  framebuf_line_width;
  198. static inline void set_video_stream_id(unsigned id)
  199. {
  200.     stream_video = id;
  201. }
  202. static inline void set_audio_stream_id(unsigned id)
  203. {
  204.     stream_audio = id;
  205. }
  206. static inline void set_sub_stream_id_sup(unsigned id)
  207. {
  208.     sub_stream_id_sup = id;
  209. }
  210. static inline void set_sub_stream_id_sup_2(unsigned id)
  211. {
  212.     sub_stream_id_sup_2 = id;
  213. }
  214. static  inline  void    set_framebuf_mb_mode_width(unsigned v)
  215. {
  216.     framebuf_mb_width=v;
  217. }
  218. static  inline  void    set_framebuf_linear_mode_width(unsigned v)
  219. {
  220.     framebuf_line_width=v;
  221. }
  222. static  inline  int     get_framebuf_linear_mode_width()
  223. {
  224.     return framebuf_line_width;
  225. }
  226. //
  227. // kernel interface
  228. //
  229. extern  void    init_video_decoder(void);
  230. extern void resync_av(void);
  231. extern void resync_video(void);
  232. extern void resync_audio(void);
  233. extern void resync_video_bitstream(void);
  234. extern void resync_audio_bitstream(void);
  235. extern void clear_video_decoder();
  236. extern int     do_system_layer(void);
  237. extern UINT32 ki_get_vbv_kused();
  238. extern UINT32 ki_get_vbv_kfree();
  239. extern UINT32 ki_get_video_bitrate();
  240. extern void dsi_update_kernel(void);
  241. extern  void    ki_set_pck_type(UINT8);
  242. extern  void    ki_set_au_stream(UINT8);
  243. /*
  244. ** WATCHDOGWATCHDOG
  245. */
  246. void    watchdog_renew(int n);
  247. void    watchdog_onoff(int n);
  248. /*
  249. ** SUP SUP SUP SUP SUP SUP SUP
  250. */
  251. #include "supfunc.h"
  252. extern  void    set_sup_hwbuf(unsigned ya, unsigned ye);
  253. extern  void    set_sup_hwbuf2(unsigned ya, unsigned ye);
  254. /*
  255. **      VPP     VPP     VPP     VPP     VPP     VPP     VPP           
  256. */
  257. // Pixel Aspect Ratio
  258. #define VPP_PAR_MP_FORCE_SQUARE (1<<0)
  259. #define VPP_PAR_MP4_FORCE_SQUARE (1<<1)
  260. #define VPP_PAR_MP4_GUESS_43TV (1<<2)
  261. #define VPP_PAR_MP4_REVERSE_169TV (1<<3)
  262. extern void setup_vpp_par_mode(int flag);
  263. extern  void    setup_vpp_mapping(int mapping, int sdram_reorder);
  264. extern  int     get_vpp_mapping(void);
  265. extern  void    vpp_set_bg_color(int y, int cb_cr);
  266. /*
  267. **      ENCODE
  268. */
  269. extern  int     mpeg_encode(int id, int w, int h, int qscale, UINT8 *temp, UINT8 *output);
  270. extern  void    mpeg_encode_target(int bits);
  271. /*
  272. **      TEST    TEST    TEST    TEST    TEST    TEST    TEST
  273. */
  274. extern  UINT8   sys_test_reg_00;
  275. extern  UINT8   sys_test_reg_01;
  276. extern  UINT8   sys_test_reg_02;
  277. extern  UINT8   sys_test_reg_03;
  278. #endif/*__KINF_H*/