Mailing List archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[linux-dvb] AW: Re: Problems after reloading vdr



One further statement to this failure. If you waiting one-two seconds after
ending the vdr, all filters are freed from the dvb driver!!


-----Ursprüngliche Nachricht-----
Von: linux-dvb-bounce@linuxtv.org
[mailto:linux-dvb-bounce@linuxtv.org]Im Auftrag von Klaus Schmidinger
Gesendet: Sonntag, 12. August 2001 13:58
An: dvb
Betreff: [linux-dvb] Re: Problems after reloading vdr


Klaus Schmidinger wrote:
>
> Peter Seyringer wrote:
> >
> > Hello!
> >
> > I have a problem with the channel switching after reloading vdr.
> > If i have played a recorded scene and exit vdr with Strg-C and reload it
again and i can switch the channel but there are troubles with the picture
or sound. On some channels i get a picture but no sound on other i get the
sound of the last channel but no picture or i get the right picture but a
sound of an other channel.
> > After reloading the driver there is no problem. I think there is a bug
in the demux (?) lib and it is the same problem with the CAM after replay.
> >
> > My system is a fresh installation of the latest dvb driver and vdr
software, kernel version is 2.4.7 and my DVB-s Card is the new one.
>
> I also have observed this problem several times lately.
> Must be something they have changed in recent driver versions.
>
> Klaus

I believe I found what's causing this. Apparently the filters were not all
released when an application ended, so after a few restarts all the 32
filters
were used up.

Here's what I did in DVB/driver/dmxdev.c to cure this (don't know if this
really is a "fix" or just a "workaround" - maybe the driver developers can
say more about this).

--- dmxdev.c.001        Fri Aug 10 08:28:24 2001
+++ dmxdev.c    Sun Aug 12 13:36:48 2001
@@ -394,7 +394,14 @@
        /* We used to return EINVAL here but resetting a free filter
            should be valid too. But since in this case there is nothing
            to do, just return */
-        if (dmxdevfilter->state<=DMXDEV_STATE_ALLOCATED)
+        /* Only return if the state is actually DMXDEV_STATE_FREE,
+           otherwise filters are not properly released when the
+           files are closed (i.e. when an application ends) and
+           after a few restarts of an application all the 32 filters
+           are used up. Maybe the check here should actually be
+           'if (dmxdevfilter->state==DMXDEV_STATE_FREE)'?
+           kls 2001-08-12 *///XXX
+        if (dmxdevfilter->state<DMXDEV_STATE_ALLOCATED)
                return 0;

        switch (dmxdevfilter->type) {
@@ -433,7 +440,11 @@
                dmxdevfilter->feed.ts=0;
                break;
        default:
-               return -EINVAL;
+               /* due to the above change it can happen that filters with
type==0
+                  get through here, which shouldn't be considered an error.
+                  kls 2001-08-12 *///XXX
+               if (dmxdevfilter->type != 0)
+                      return -EINVAL;
        }
        dmxdevfilter->buffer.pwrite=dmxdevfilter->buffer.pread=0;
         return 0;

--
_______________________________________________________________

Klaus Schmidinger                       Phone: +49-8635-6989-10
CadSoft Computer GmbH                   Fax:   +49-8635-6989-40
Hofmark 2                               Email:   kls@cadsoft.de
D-84568 Pleiskirchen, Germany           URL:     www.cadsoft.de
_______________________________________________________________


--
Info:
To unsubscribe send a mail to listar@linuxtv.org with "unsubscribe
linux-dvb" as subject.



--
Info:
To unsubscribe send a mail to listar@linuxtv.org with "unsubscribe linux-dvb" as subject.


Home | Main Index | Thread Index