/* TS muxing */
uint8_t *pm_pat;
uint8_t *pm_pmt;
+ uint16_t pm_pmt_version;
uint32_t pm_ic; // Injection counter
uint32_t pm_pc; // Packet counter
} pass_muxer_t;
pm->pm_pmt[2] = 0x00 | (ss->ss_pmt_pid >> 0);
pm->pm_pmt[3] = 0x10;
pm->pm_pmt[4] = 0x00;
- if(psi_build_pmt(ss, pm->pm_pmt+5, 183, ss->ss_pcr_pid) < 0) {
+ if(psi_build_pmt(ss, pm->pm_pmt+5, 183, pm->pm_pmt_version,
+ ss->ss_pcr_pid) < 0) {
pm->m_errors++;
tvhlog(LOG_ERR, "pass", "%s: Unable to build pmt", pm->pm_filename);
return -1;
}
+ pm->pm_pmt_version++;
}
return 0;
* PMT generator
*/
int
-psi_build_pmt(const streaming_start_t *ss, uint8_t *buf0, int maxlen, int pcrpid)
+psi_build_pmt(const streaming_start_t *ss, uint8_t *buf0, int maxlen,
+ int version, int pcrpid)
{
int c, tlen, dlen, l, i;
uint8_t *buf, *buf1;
buf[4] = 0x01;
buf[5] = 0xc1; /* current_next_indicator + version */
- buf[6] = 0;
- buf[7] = 0;
+ buf[5] |= (version & 0x1F) << 1;
+
+ buf[6] = 0; /* section number */
+ buf[7] = 0; /* last section number */
buf[8] = 0xe0 | (pcrpid >> 8);
buf[9] = pcrpid;
int psi_build_pat(struct service *t, uint8_t *buf, int maxlen, int pmtpid);
-int psi_build_pmt(const streaming_start_t *ss, uint8_t *buf, int maxlen, int pcrpid);
+int psi_build_pmt(const streaming_start_t *ss, uint8_t *buf, int maxlen,
+ int version, int pcrpid);
const char *psi_caid2name(uint16_t caid);