--- margi2/dvb_demux.c 2001/04/25 15:31:09 1.5 +++ margi2/dvb_demux.c 2001/05/15 12:40:21 1.6 @@ -418,6 +418,27 @@ dmx_ts_feed_set_type(dmx_ts_feed_t *feed } static int +dmx_pid_set(__u16 pid, dvb_demux_feed_t *dvbdmxfeed) +{ + dvb_demux_t *dvbdmx=dvbdmxfeed->demux; + dvb_demux_feed_t **pid2feed=dvbdmx->pid2feed; + + if (pid>0x1fff) + return -EINVAL; + if (dvbdmxfeed->pid!=0xffff) { + if (dvbdmxfeed->pid<=0x1fff) + pid2feed[dvbdmxfeed->pid]=0; + dvbdmxfeed->pid=0xffff; + } + if (pid2feed[pid]) + return -EBUSY; + pid2feed[pid]=dvbdmxfeed; + dvbdmxfeed->pid=pid; + return 0; +} + + +static int dmx_ts_feed_set(struct dmx_ts_feed_s* feed, __u16 pid, size_t callback_length, @@ -427,6 +448,7 @@ dmx_ts_feed_set(struct dmx_ts_feed_s* fe ) { dvb_demux_feed_t *dvbdmxfeed=(dvb_demux_feed_t *) feed; +#if 0 dvb_demux_t *dvbdmx=dvbdmxfeed->demux; if (pid>0x1fff) @@ -441,6 +463,13 @@ dmx_ts_feed_set(struct dmx_ts_feed_s* fe dvbdmx->pid2feed[pid]=dvbdmxfeed; dvbdmxfeed->pid=pid; +#else + int ret; + + ret=dmx_pid_set(pid, dvbdmxfeed); + if (ret<0) + return ret; +#endif dvbdmxfeed->buffer_size=circular_buffer_size; dvbdmxfeed->descramble=descramble; @@ -639,8 +668,6 @@ dmx_section_feed_set(struct dmx_section_ dvb_demux_feed_t *dvbdmxfeed=(dvb_demux_feed_t *) feed; dvb_demux_t *dvbdmx=dvbdmxfeed->demux; - //printk ("function : %s PID %04x\n", __FUNCTION__, pid); - if (pid>0x1fff) return -EINVAL; if (dvbdmxfeed->pid!=0xffff) { @@ -650,8 +677,8 @@ dmx_section_feed_set(struct dmx_section_ if (dvbdmx->pid2feed[pid]) return -EBUSY; dvbdmx->pid2feed[pid]=dvbdmxfeed; - dvbdmxfeed->pid=pid; + dvbdmxfeed->buffer_size=circular_buffer_size; dvbdmxfeed->descramble=descramble; if (dvbdmxfeed->descramble)