⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mpeg2_transport.h

📁 MPEG-4编解码的实现(包括MPEG4视音频编解码)
💻 H
字号:



#ifndef __MPEG2_TRANSPORT_H__
#define __MPEG2_TRANSPORT_H__

#define MPEG2T_SYNC_BYTE 0x47

typedef struct mpeg2t_frame_t {
  struct mpeg2t_frame_t *next_frame;
  int have_ps_ts;
  uint64_t ps_ts;
  uint8_t *frame;
  uint32_t frame_len;
} mpeg2t_frame_t;

typedef enum mpeg2t_pak_type {
  MPEG2T_PAS_PAK,
  MPEG2T_PROG_MAP_PAK,
  MPEG2T_ES_PAK,
} mpeg2t_pak_type;

typedef struct mpeg2t_pid_t {
  struct mpeg2t_pid_t *next_pid;
  uint32_t lastcc;
  uint32_t data_len;
  uint16_t pid;
  uint8_t *data;
  uint32_t data_len_loaded;
  uint32_t data_len_max;
  int collect_pes;
  mpeg2t_pak_type pak_type;
} mpeg2t_pid_t;

  
typedef struct mpeg2t_pas_t {
  mpeg2t_pid_t pid;
  uint16_t transport_stream_id;
  uint8_t version_number;
  int current_next_indicator;
} mpeg2t_pas_t;

typedef struct mpeg2t_pmap_t {
  mpeg2t_pid_t pid;
  uint16_t program_number;
  int received;
  uint8_t version_number;
  uint8_t *prog_info;
  uint32_t prog_info_len;
} mpeg2t_pmap_t;

typedef struct mpeg2t_es_t {
  mpeg2t_pid_t pid;
  uint8_t stream_type;
  uint32_t es_info_len;
  uint8_t *es_data;
  uint8_t stream_id;
  mpeg2t_frame_t *work;
  uint32_t work_max_size;
  int work_state;
  uint32_t work_loaded;
  mpeg2t_frame_t *list;
  char left_buff[6];
  int left;
  int have_ps_ts;
  uint64_t ps_ts;
  uint32_t header;
  int have_seq_header;
  uint32_t seq_header_offset;
  uint32_t pict_header_offset;
} mpeg2t_es_t;

typedef struct mpeg2t_t {
  mpeg2t_pas_t pas;
} mpeg2t_t;

#ifdef __cplusplus 
extern "C" {
#endif
uint32_t mpeg2t_find_sync_byte(const uint8_t *buffer, uint32_t buflen);
uint32_t mpeg2t_transport_error_indicator(const uint8_t *pHdr);
uint32_t mpeg2t_payload_unit_start_indicator(const uint8_t *pHdr);
uint16_t mpeg2t_pid(const uint8_t *pHdr);
uint32_t mpeg2t_adaptation_control(const uint8_t *pHdr);
uint32_t mpeg2t_continuity_counter(const uint8_t *pHdr);

const uint8_t *mpeg2t_transport_payload_start(const uint8_t *pHdr, 
					      uint32_t *payload_len);

mpeg2t_t *create_mpeg2_transport(void);
mpeg2t_pid_t *mpeg2t_process_buffer(mpeg2t_t *ptr, 
				   const uint8_t *buffer, 
				   uint32_t buflen,
				   uint32_t *buflen_used);

  void mpeg2t_set_loglevel(int loglevel);

  void mpeg2t_set_error_func(error_msg_func_t func);
#ifdef __cplusplus
}
#endif
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -