Mailing List archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[linux-dvb] Re: reading two elementary PIDs (Aud and Vid) atonce
Hi Matt,
I applied your patch to CVS but it does not works exactly as expected.
I'll have to take a closer look on this as soon I have a little more
time, here the outline of the problem:
When you start test_pes on the audio PID and a second test_pes on the
video PID the second filter won't get data. But you see that the first
one gets much more data than before.
Holger
Matt Davis wrote:
> On Friday 01 November 2002 03:42 am, Holger Waechtler wrote:
>
>>Hi Matt,
>>
>>there are many things changed since your patch, could you please
>>regenerate your patch using "diff -pu" so that I can see the function
>>names?
>>
>>thanks,
>>
>>Holger
>>
>
>
> Here is a diff on the changes against the REL-0-9-2 branch checked out today:
>
> [mdavis REL-0-9-2]$ diff -rpu DVB/ temp/DVB/
>
> diff -rpu DVB/driver/dmxdev.c temp/DVB/driver/dmxdev.c
> --- DVB/driver/dmxdev.c Thu Aug 1 11:46:11 2002
> +++ temp/DVB/driver/dmxdev.c Fri Nov 1 08:48:44 2002
> @@ -722,6 +722,7 @@ DmxDevFilterAlloc(dmxdev_t *dmxdev, stru
> return -EMFILE;
> }
> dmxdevfilter=&dmxdev->filter[i];
> + sema_init(&dmxdevfilter->mutex, 1);
> file->private_data=dmxdevfilter;
>
> DmxDevBufferInit(&dmxdevfilter->buffer);
> @@ -747,6 +748,11 @@ DmxDevFilterFree(dmxdev_t *dmxdev, struc
> up(&dmxdev->mutex);
> return -EINVAL;
> }
> +
> + if (down_interruptible(&dmxdevfilter->mutex)) {
> + up(&dmxdev->mutex);
> + return -ERESTARTSYS;
> + }
>
> DmxDevFilterStop(dmxdevfilter);
> DmxDevFilterReset(dmxdevfilter);
> @@ -761,6 +767,7 @@ DmxDevFilterFree(dmxdev_t *dmxdev, struc
> }
> DmxDevFilterStateSet(dmxdevfilter, DMXDEV_STATE_FREE);
> wake_up(&dmxdevfilter->buffer.queue);
> + up(&dmxdevfilter->mutex);
> up(&dmxdev->mutex);
> //printk("free filters = %d\n", DmxDevFilterNum(dmxdev));
> return 0;
> @@ -907,7 +914,7 @@ DmxDevRead(dmxdev_t *dmxdev, struct file
> dmxdev_filter_t *dmxdevfilter=DmxDevFile2Filter(dmxdev, file);
> int ret=0;
>
> - if (down_interruptible(&dmxdev->mutex))
> + if (down_interruptible(&dmxdevfilter->mutex))
> return -ERESTARTSYS;
>
> if (dmxdevfilter->type==DMXDEV_TYPE_SEC)
> @@ -916,7 +923,7 @@ DmxDevRead(dmxdev_t *dmxdev, struct file
> ret=DmxDevBufferRead(&dmxdevfilter->buffer,
> file->f_flags&O_NONBLOCK,
> buf, count, ppos);
> - up(&dmxdev->mutex);
> + up(&dmxdevfilter->mutex);
> return ret;
> }
>
> @@ -937,14 +944,26 @@ int DmxDevIoctl(dmxdev_t *dmxdev, struct
>
> switch (cmd) {
> case DMX_START:
> + if (down_interruptible(&dmxdevfilter->mutex)) {
> + up(&dmxdev->mutex);
> + return -ERESTARTSYS;
> + }
> +
> if (dmxdevfilter->state<DMXDEV_STATE_SET)
> ret=-EINVAL;
> else
> ret=DmxDevFilterStart(dmxdevfilter);
> +
> + up(&dmxdevfilter->mutex);
> break;
>
> case DMX_STOP:
> + if (down_interruptible(&dmxdevfilter->mutex)) {
> + up(&dmxdev->mutex);
> + return -ERESTARTSYS;
> + }
> ret=DmxDevFilterStop(dmxdevfilter);
> + up(&dmxdevfilter->mutex);
> break;
>
> case DMX_SET_FILTER:
> @@ -954,8 +973,14 @@ int DmxDevIoctl(dmxdev_t *dmxdev, struct
> if (copy_from_user(¶ms, parg, sizeof(params)))
>
> ret=-EFAULT;
> - else
> + else {
> + if (down_interruptible(&dmxdevfilter->mutex)) {
> + up(&dmxdev->mutex);
> + return -ERESTARTSYS;
> + }
> ret=DmxDevFilterSet(dmxdev, dmxdevfilter, ¶ms);
> + up(&dmxdevfilter->mutex);
> + }
> break;
> }
>
> @@ -965,13 +990,24 @@ int DmxDevIoctl(dmxdev_t *dmxdev, struct
>
> if (copy_from_user(¶ms, parg, sizeof(params)))
> ret=-EFAULT;
> - else
> + else {
> + if (down_interruptible(&dmxdevfilter->mutex)) {
> + up(&dmxdev->mutex);
> + return -ERESTARTSYS;
> + }
> ret=DmxDevPesFilterSet(dmxdev, dmxdevfilter, ¶ms);
> + up(&dmxdevfilter->mutex);
> + }
> break;
> }
>
> case DMX_SET_BUFFER_SIZE:
> + if (down_interruptible(&dmxdevfilter->mutex)) {
> + up(&dmxdev->mutex);
> + return -ERESTARTSYS;
> + }
> ret=DmxDevSetBufferSize(dmxdevfilter, arg);
> + up(&dmxdevfilter->mutex);
> break;
>
> case DMX_GET_EVENT:
> diff -rpu DVB/driver/dmxdev.h temp/DVB/driver/dmxdev.h
> --- DVB/driver/dmxdev.h Mon Oct 29 05:51:26 2001
> +++ temp/DVB/driver/dmxdev.h Fri Nov 1 08:48:44 2002
> @@ -96,6 +96,8 @@ typedef struct dmxdev_filter_s {
> struct dmxdev_s *dev;
> dmxdev_buffer_t buffer;
>
> + struct semaphore mutex;
> +
> // only for sections
> struct timer_list timer;
> int todo;
>
>
>
>
--
Info:
To unsubscribe send a mail to listar@linuxtv.org with "unsubscribe linux-dvb" as subject.
Home |
Main Index |
Thread Index