/ts/pat.h
https://bitbucket.org/a84/gs_public/ · C Header · 85 lines · 54 code · 11 blank · 20 comment · 6 complexity · f5f7407474a53795151201cc59842d76 MD5 · raw file
- /*
- *
- */
- #ifndef _TS_PAT_H_
- #define _TS_PAT_H_ 1
- #ifdef __cplusplus
- extern "C" {
- #endif
- #include "ts.h"
- typedef struct {
- uint8_t table_id :8;
- #if __BYTE_ORDER == __BIG_ENDIAN
- uint8_t slen_hi :4;
- uint8_t :2; // reserved
- uint8_t :1; // 0
- uint8_t syntax :1;
- #else
- uint8_t syntax :1;
- uint8_t :1; // 0
- uint8_t :2; // reserved
- uint8_t slen_hi :4;
- #endif
- uint8_t slen_lo :8;
- uint8_t stream_id_hi :8;
- uint8_t stream_id_lo :8;
- #if __BYTE_ORDER == __BIG_ENDIAN
- uint8_t current_next :1;
- uint8_t version :5;
- uint8_t :2; // reserved
- #else
- uint8_t :2; // reserved
- uint8_t version :5;
- uint8_t current_next :1;
- #endif
- uint8_t cs_number :8;
- uint8_t ls_number :8;
- } mpeg2_pat_header_t;
- typedef struct {
- uint8_t pnr_hi :8;
- uint8_t pnr_lo :8;
- #if __BYTE_ORDER == __BIG_ENDIAN
- uint8_t pid_hi :5;
- uint8_t :3; // reserved
- #else
- uint8_t :3; // reserved
- uint8_t pid_hi :5;
- #endif
- uint8_t pid_lo :8;
- } mpeg2_pat_pmt_t;
- #define is_pat_ok(pat) ((pat->payload[0] == 0x00) && (pat->payload[1] & 0x80) && (!psi_check_crc32(pat)))
- /*
- buffer: pointer to PSI buffer, if is NULL, then allocate new buffer
- stream_id: identify transport stream
- version: version number of PAT
- return: pointer to allocated PSI buffer
- write base info to PSI
- */
- mpeg2_psi_t *mpeg2_pat_alloc(mpeg2_psi_t *buffer, uint16_t stream_id, uint8_t version);
- /*
- pat_p: pointer to buffer
- clean buffer allocated by pat_alloc
- */
- void mpeg2_pat_free(mpeg2_psi_t *pat_p);
- /*
- es - elementary stream
- pmt_p: pointer to buffer
- pnr: number of program
- pid: pid of pmt
- */
- void mpeg2_pat_add_pmt(mpeg2_psi_t *pat_p, uint16_t pnr, uint16_t pid);
- #ifdef __cplusplus
- }
- #endif
- #endif // _TS_PAT_H_