rendered paste bodystatic int set_demux(int dmxfd, int pid, int pes_type, int dvr)
{
struct dmx_pes_filter_params pesfilter;
if (pid < 0 || pid >= 0x1fff) /* ignore this pid to allow radio services */
{
syslog(LOG_INFO, "Ignore PID: %d", pid);
return TRUE;
}
if (dvr) {
int buffersize = 64 * 1024;
if (ioctl(dmxfd, DMX_SET_BUFFER_SIZE, buffersize) == -1)
syslog(LOG_ERR, "DMX_SET_BUFFER_SIZE failed");
}
pesfilter.pid = pid;
pesfilter.input = DMX_IN_FRONTEND;
pesfilter.output = dvr ? DMX_OUT_TS_TAP : DMX_OUT_DECODER;
pesfilter.pes_type = pes_type;
pesfilter.flags = DMX_IMMEDIATE_START;
if (ioctl(dmxfd, DMX_SET_PES_FILTER, &pesfilter) == -1) {
syslog(LOG_ERR, "DMX_SET_PES_FILTER failed "
"(PID = 0x%04x): %d %m", pid, errno);
return FALSE;
}
return TRUE;
}
void setup_demuxer(channel_t *channel)
{
int i;
for(i = 0; i < 5; i++) {
if(channel->apids[i].apid != 0) {
syslog(LOG_INFO, "Add APID: %d", channel->apids[i].apid);
if(!set_demux(audioFD[i], channel->apids[i].apid,
DMX_PES_OTHER, 1))
syslog(LOG_ERR, "Failed to set up APID : %d", channel->apids[i].apid);
}
}
}