/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

  1. /*
  2. *
  3. */
  4. #ifndef _TS_PAT_H_
  5. #define _TS_PAT_H_ 1
  6. #ifdef __cplusplus
  7. extern "C" {
  8. #endif
  9. #include "ts.h"
  10. typedef struct {
  11. uint8_t table_id :8;
  12. #if __BYTE_ORDER == __BIG_ENDIAN
  13. uint8_t slen_hi :4;
  14. uint8_t :2; // reserved
  15. uint8_t :1; // 0
  16. uint8_t syntax :1;
  17. #else
  18. uint8_t syntax :1;
  19. uint8_t :1; // 0
  20. uint8_t :2; // reserved
  21. uint8_t slen_hi :4;
  22. #endif
  23. uint8_t slen_lo :8;
  24. uint8_t stream_id_hi :8;
  25. uint8_t stream_id_lo :8;
  26. #if __BYTE_ORDER == __BIG_ENDIAN
  27. uint8_t current_next :1;
  28. uint8_t version :5;
  29. uint8_t :2; // reserved
  30. #else
  31. uint8_t :2; // reserved
  32. uint8_t version :5;
  33. uint8_t current_next :1;
  34. #endif
  35. uint8_t cs_number :8;
  36. uint8_t ls_number :8;
  37. } mpeg2_pat_header_t;
  38. typedef struct {
  39. uint8_t pnr_hi :8;
  40. uint8_t pnr_lo :8;
  41. #if __BYTE_ORDER == __BIG_ENDIAN
  42. uint8_t pid_hi :5;
  43. uint8_t :3; // reserved
  44. #else
  45. uint8_t :3; // reserved
  46. uint8_t pid_hi :5;
  47. #endif
  48. uint8_t pid_lo :8;
  49. } mpeg2_pat_pmt_t;
  50. #define is_pat_ok(pat) ((pat->payload[0] == 0x00) && (pat->payload[1] & 0x80) && (!psi_check_crc32(pat)))
  51. /*
  52. buffer: pointer to PSI buffer, if is NULL, then allocate new buffer
  53. stream_id: identify transport stream
  54. version: version number of PAT
  55. return: pointer to allocated PSI buffer
  56. write base info to PSI
  57. */
  58. mpeg2_psi_t *mpeg2_pat_alloc(mpeg2_psi_t *buffer, uint16_t stream_id, uint8_t version);
  59. /*
  60. pat_p: pointer to buffer
  61. clean buffer allocated by pat_alloc
  62. */
  63. void mpeg2_pat_free(mpeg2_psi_t *pat_p);
  64. /*
  65. es - elementary stream
  66. pmt_p: pointer to buffer
  67. pnr: number of program
  68. pid: pid of pmt
  69. */
  70. void mpeg2_pat_add_pmt(mpeg2_psi_t *pat_p, uint16_t pnr, uint16_t pid);
  71. #ifdef __cplusplus
  72. }
  73. #endif
  74. #endif // _TS_PAT_H_