All pastes #456621 Raw Edit

Stuff

public text v1 · immutable
#456621 ·published 2007-04-24 22:42 UTC
rendered paste body
static 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);
                }
            }
}