/ts/pat.c

https://bitbucket.org/a84/gs_public/ · C · 31 lines · 25 code · 5 blank · 1 comment · 2 complexity · 883a8a54e9fa98ed55d002dc5f3eef8b MD5 · raw file

  1. #include "pat.h"
  2. mpeg2_psi_t *mpeg2_pat_alloc(mpeg2_psi_t *buffer, uint16_t stream_id, uint8_t version) {
  3. mpeg2_psi_t *ptr = (buffer) ? buffer : (mpeg2_psi_t *)malloc(sizeof(mpeg2_psi_t));
  4. if(!ptr) return NULL;
  5. memset(ptr->payload, 0, sizeof(ptr->payload));
  6. ptr->payload_size = sizeof(mpeg2_pat_header_t);
  7. ptr->skip = 0;
  8. mpeg2_pat_header_t *ph = (mpeg2_pat_header_t *)ptr->payload;
  9. // SET_I8(ph->table_id, 0x00);
  10. SET_I8(ph->syntax, 1);
  11. SET_I16(ph->stream_id, stream_id);
  12. SET_I8(ph->version, version);
  13. SET_I8(ph->current_next, 1); // current
  14. return ptr;
  15. }
  16. void mpeg2_pat_free(mpeg2_psi_t *pat_p) {
  17. if(pat_p) free(pat_p);
  18. }
  19. void mpeg2_pat_add_pmt(mpeg2_psi_t *pat_p, uint16_t pnr, uint16_t pid) {
  20. mpeg2_pat_header_t *ph = (mpeg2_pat_header_t *)pat_p->payload;
  21. mpeg2_pat_pmt_t *pp = (mpeg2_pat_pmt_t *)&pat_p->payload[pat_p->payload_size];
  22. SET_I16(pp->pnr, pnr);
  23. SET_I16(pp->pid, pid);
  24. pat_p->payload_size += sizeof(mpeg2_pat_pmt_t);
  25. SET_I16(ph->slen, (pat_p->payload_size - 3));
  26. }