/ts/pat.c
https://bitbucket.org/a84/gs_public/ · C · 31 lines · 25 code · 5 blank · 1 comment · 2 complexity · 883a8a54e9fa98ed55d002dc5f3eef8b MD5 · raw file
- #include "pat.h"
- mpeg2_psi_t *mpeg2_pat_alloc(mpeg2_psi_t *buffer, uint16_t stream_id, uint8_t version) {
- mpeg2_psi_t *ptr = (buffer) ? buffer : (mpeg2_psi_t *)malloc(sizeof(mpeg2_psi_t));
- if(!ptr) return NULL;
- memset(ptr->payload, 0, sizeof(ptr->payload));
- ptr->payload_size = sizeof(mpeg2_pat_header_t);
- ptr->skip = 0;
- mpeg2_pat_header_t *ph = (mpeg2_pat_header_t *)ptr->payload;
- // SET_I8(ph->table_id, 0x00);
- SET_I8(ph->syntax, 1);
- SET_I16(ph->stream_id, stream_id);
- SET_I8(ph->version, version);
- SET_I8(ph->current_next, 1); // current
- return ptr;
- }
- void mpeg2_pat_free(mpeg2_psi_t *pat_p) {
- if(pat_p) free(pat_p);
- }
- void mpeg2_pat_add_pmt(mpeg2_psi_t *pat_p, uint16_t pnr, uint16_t pid) {
- mpeg2_pat_header_t *ph = (mpeg2_pat_header_t *)pat_p->payload;
- mpeg2_pat_pmt_t *pp = (mpeg2_pat_pmt_t *)&pat_p->payload[pat_p->payload_size];
- SET_I16(pp->pnr, pnr);
- SET_I16(pp->pid, pid);
- pat_p->payload_size += sizeof(mpeg2_pat_pmt_t);
- SET_I16(ph->slen, (pat_p->payload_size - 3));
- }