Streamdev to Streamdev with PVRInput card

Message ID 20110610065555.M59726@linogate.de
State New
Headers

Commit Message

Frank Schmirler June 10, 2011, 7:26 a.m. UTC
  On Wed, 8 Jun 2011 20:43:38 +0200, Martin Dauskardt wrote
> When leaving OpenDvr, the bool is set to true. 
> It will only become false again during runtime, if vdr calls the 
> pvrinput- function SetChannelDevice() and determines the needed settings.
> 
> And this is your problem. There are no debug messages from 
> pvrinput's SetChannelDevice() or ProvidesChannel(), so vdr never 
> calls  these pvrinput functions - although a channel switch for a 
> pvrinput device is requested.
> 
> But why? I have no idea. It works for you with vomp. It worked for 
> me with streamdev when I tested this last year. But I had only 
> streamdev-server running and used vlc to switch channels.

Streamdev-client won't forward calls to SetChannelDevice and ProvidesChannel
to the server, if the current channel and the requested new channel are on the
same transponder. Instead it will just go ahead and later add the PIDs of the
new channel to the current connection.

Pvrinput obviously uses the same frequencies (i.e. transponder) and even the
same PIDs for different channels, so streamdev-clients current behaviour is
bound to fail. According to an other posting in this thread, it is not
possible to use different frequencies, so it seems the problem needs to be
fixed in streamdev-client. Please try the following patch:


AFAIKT the problem is streamdev-client only. So HTTP streaming with e.g. VLC
is not affected.
 
Regards,
Frank
  

Comments

Rob Davis June 11, 2011, 12:12 a.m. UTC | #1
On 06/10/2011 02:26 AM, Frank Schmirler wrote:
> On Wed, 8 Jun 2011 20:43:38 +0200, Martin Dauskardt wrote
>> When leaving OpenDvr, the bool is set to true.
>> It will only become false again during runtime, if vdr calls the
>> pvrinput- function SetChannelDevice() and determines the needed settings.
>>
>> And this is your problem. There are no debug messages from
>> pvrinput's SetChannelDevice() or ProvidesChannel(), so vdr never
>> calls  these pvrinput functions - although a channel switch for a
>> pvrinput device is requested.
>>
>> But why? I have no idea. It works for you with vomp. It worked for
>> me with streamdev when I tested this last year. But I had only
>> streamdev-server running and used vlc to switch channels.
> Streamdev-client won't forward calls to SetChannelDevice and ProvidesChannel
> to the server, if the current channel and the requested new channel are on the
> same transponder. Instead it will just go ahead and later add the PIDs of the
> new channel to the current connection.
>
> Pvrinput obviously uses the same frequencies (i.e. transponder) and even the
> same PIDs for different channels, so streamdev-clients current behaviour is
> bound to fail. According to an other posting in this thread, it is not
> possible to use different frequencies, so it seems the problem needs to be
> fixed in streamdev-client. Please try the following patch:
>
> --- a/common.h
> +++ b/common.h
> @@ -23,7 +23,7 @@
>   #      define Dprintf(x...)
>   #endif
>
> -#define TRANSPONDER(c1, c2) (c1->Transponder() == c2->Transponder())
> +#define TRANSPONDER(c1, c2) (c1->Transponder() == c2->Transponder()&&
> !c1->IsSourceType('V'))
>
>   #define MAXPARSEBUFFER KILOBYTE(16)
>
> AFAIKT the problem is streamdev-client only. So HTTP streaming with e.g. VLC
> is not affected.

I need to put something else somewhere else:

g++ -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses -fPIC -c 
-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE 
-DCONFDIR=\"/etc/vdr\" -DUSE_ALTERNATECHANNEL -DUSE_CHANNELBIND 
-DUSE_MCLI -DUSE_PINPLUGIN -DUSE_PLUGINMISSING -DUSE_YAEPG -D_GNU_SOURCE 
-DPLUGIN_NAME_I18N='"streamdev-client"' -I/usr/include 
-I/usr/include/vdr/include -I.. -I/usr/include/vdr -o device.o device.c
device.c: In member function ‘virtual bool 
cStreamdevDevice::IsTunedToTransponder(const cChannel*)’:
device.c:78:14: error: expected ‘;’ before ‘->’ token
device.c:80:13: warning: statement has no effect
device.c:78:7: error: label ‘Channel’ used but not defined
device.c: In member function ‘virtual bool 
cStreamdevDevice::ProvidesChannel(const cChannel*, int, bool*) const’:
device.c:109:38: error: expected primary-expression before ‘)’ token
device.c:109:38: error: expected ‘;’ before ‘)’ token
device.c: In member function ‘virtual bool 
cStreamdevDevice::SetChannelDevice(const cChannel*, bool)’:
device.c:135:14: error: expected ‘;’ before ‘->’ token
device.c:137:14: warning: statement has no effect
device.c:135:7: error: label ‘Channel’ used but not defined
make[1]: *** [device.o] Error 1
make[1]: Leaving directory `/usr/src/vdr-src/vdr-plugin-streamdev/client'
make: *** [client] Error 2
  
Rob Davis June 11, 2011, 1:49 a.m. UTC | #2
On 06/10/2011 07:12 PM, Rob Davis wrote:
>
>> AFAIKT the problem is streamdev-client only. So HTTP streaming with 
>> e.g. VLC
>> is not affected.
>
>
> I need to put something else somewhere else:

Ooops, my fault.  I forgot to take a bracket out.

Patch works..
  

Patch

--- a/common.h
+++ b/common.h
@@ -23,7 +23,7 @@ 
 #      define Dprintf(x...)
 #endif
 
-#define TRANSPONDER(c1, c2) (c1->Transponder() == c2->Transponder())
+#define TRANSPONDER(c1, c2) (c1->Transponder() == c2->Transponder() &&
!c1->IsSourceType('V'))
 
 #define MAXPARSEBUFFER KILOBYTE(16)