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

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. #ifndef __MPEG2_TRANSPORT_H__
  2. #define __MPEG2_TRANSPORT_H__
  3. #define MPEG2T_SYNC_BYTE 0x47
  4. typedef struct mpeg2t_frame_t {
  5.   struct mpeg2t_frame_t *next_frame;
  6.   int have_ps_ts;
  7.   uint64_t ps_ts;
  8.   uint8_t *frame;
  9.   uint32_t frame_len;
  10. } mpeg2t_frame_t;
  11. typedef enum mpeg2t_pak_type {
  12.   MPEG2T_PAS_PAK,
  13.   MPEG2T_PROG_MAP_PAK,
  14.   MPEG2T_ES_PAK,
  15. } mpeg2t_pak_type;
  16. typedef struct mpeg2t_pid_t {
  17.   struct mpeg2t_pid_t *next_pid;
  18.   uint32_t lastcc;
  19.   uint32_t data_len;
  20.   uint16_t pid;
  21.   uint8_t *data;
  22.   uint32_t data_len_loaded;
  23.   uint32_t data_len_max;
  24.   int collect_pes;
  25.   mpeg2t_pak_type pak_type;
  26. } mpeg2t_pid_t;
  27.   
  28. typedef struct mpeg2t_pas_t {
  29.   mpeg2t_pid_t pid;
  30.   uint16_t transport_stream_id;
  31.   uint8_t version_number;
  32.   int current_next_indicator;
  33. } mpeg2t_pas_t;
  34. typedef struct mpeg2t_pmap_t {
  35.   mpeg2t_pid_t pid;
  36.   uint16_t program_number;
  37.   int received;
  38.   uint8_t version_number;
  39.   uint8_t *prog_info;
  40.   uint32_t prog_info_len;
  41. } mpeg2t_pmap_t;
  42. typedef struct mpeg2t_es_t {
  43.   mpeg2t_pid_t pid;
  44.   uint8_t stream_type;
  45.   uint32_t es_info_len;
  46.   uint8_t *es_data;
  47.   uint8_t stream_id;
  48.   mpeg2t_frame_t *work;
  49.   uint32_t work_max_size;
  50.   int work_state;
  51.   uint32_t work_loaded;
  52.   mpeg2t_frame_t *list;
  53.   char left_buff[6];
  54.   int left;
  55.   int have_ps_ts;
  56.   uint64_t ps_ts;
  57.   uint32_t header;
  58.   int have_seq_header;
  59.   uint32_t seq_header_offset;
  60.   uint32_t pict_header_offset;
  61. } mpeg2t_es_t;
  62. typedef struct mpeg2t_t {
  63.   mpeg2t_pas_t pas;
  64. } mpeg2t_t;
  65. #ifdef __cplusplus 
  66. extern "C" {
  67. #endif
  68. uint32_t mpeg2t_find_sync_byte(const uint8_t *buffer, uint32_t buflen);
  69. uint32_t mpeg2t_transport_error_indicator(const uint8_t *pHdr);
  70. uint32_t mpeg2t_payload_unit_start_indicator(const uint8_t *pHdr);
  71. uint16_t mpeg2t_pid(const uint8_t *pHdr);
  72. uint32_t mpeg2t_adaptation_control(const uint8_t *pHdr);
  73. uint32_t mpeg2t_continuity_counter(const uint8_t *pHdr);
  74. const uint8_t *mpeg2t_transport_payload_start(const uint8_t *pHdr, 
  75.       uint32_t *payload_len);
  76. mpeg2t_t *create_mpeg2_transport(void);
  77. mpeg2t_pid_t *mpeg2t_process_buffer(mpeg2t_t *ptr, 
  78.    const uint8_t *buffer, 
  79.    uint32_t buflen,
  80.    uint32_t *buflen_used);
  81.   void mpeg2t_set_loglevel(int loglevel);
  82.   void mpeg2t_set_error_func(error_msg_func_t func);
  83. #ifdef __cplusplus
  84. }
  85. #endif
  86. #endif