[ANNOUNCE] DVB-S2 + H.264 support for VDR-1.5.12

Message ID 477C0BEB.6020104@gmx.de
State New
Headers

Commit Message

Reinhard Nissl Jan. 2, 2008, 10:10 p.m. UTC
  Hi,

Manu Abraham schrieb:

>>> The patched version doesn't look at the device capability flags, before issuing a tune ?
>>> Or is something else wrong/missing ?
>>
>> I must admit, I didn't have a look at the source code so far, but
>> from what I recall, I don't think that it is that easy. I think,
>> a simple check will only make VDR tell you that the channel in
>> question cannot be received.
>>
>> I've experienced myself that VDR used the DVB-S2 card for a DVB-S
>> recording and then endlessly tried to switch to a DVB-S2 channel
>> using the DVB-S card -- obviously without success.
> 
> How can you ask a DVB-S device to tune to DVB-S2 ? Poor demodulator,
> it has to do what it is not even capable of. :)
> 
>> VDR's device selection logic is already quite complex. It has to
>> deal with FF cards which have so far been used to watch the DVB-S
>> channels, cards which provide CI interfaces and simple receiver
>> cards. Moreover it now would have to deal with cards capable of
>> doing DVB-S2, with or without CI interface respectively.
> 
> The logic wouldn't be much different. It is the same as requesting a DVB-C 
> device to be tuned to DVB-S. The CI interface doesn't make the hardware
> look any different. 
>  
>> As I'm only distributing the DVB-S2 part which Marco Schlüßler
>> provided several months ago, I've contacted him and asked him for
>> an update.
> 
> Ok, I will ask Marco on the relevant. Thanks for the feedback.

Well, I was in contact with Marco already and attached you'll
find a minimalistic change which reports "channel not available".
Now VDR should already be able to kick a low priority DVB-S
recording (or transfer thread) from a DVB-S2 device.

Still missing is to prefer DVB-S devices for DVB-S recordings so
that DVB-S2 devices remain available for DVB-S2 recordings of
same priority.

The patch is incremental to the original dvbs2 patch from
yesterday, i. e. you can simply apply it to your already patched VDR.

Bye.
  

Comments

Hagen Schöbel Jan. 13, 2008, 12:22 p.m. UTC | #1
I have an problem with the original patch to vdr-1.5.12:

root@video:/usr/local/src/vdr-1.5.12-dvbs2# make
g++ -g -O2 -Wall -Woverloaded-virtual -c -DREMOTE_KBD 
-DLIRC_DEVICE=\"/dev/lircd\" -DRCU_DEVICE=\"/dev/ttyS1\" -D_GNU_SOURCE 
-DVIDEODIR=\"/video\" -DCONFDIR=\"/video\" -DPLUGINDIR=\"./PLUGINS/lib\" 
-DLOCDIR=\"./locale\" -I/usr/include/freetype2 audio.c
dvbdevice.h:38: Fehler: »dvbfe_delsys« bezeichnet keinen Typ
make: *** [audio.o] Fehler 1

Any hints ?

Thank you...

...Hagen
  
Stefan Lucke Jan. 13, 2008, 1:05 p.m. UTC | #2
On Sunday 13 January 2008, Hagen Schöbel wrote:
> I have an problem with the original patch to vdr-1.5.12:
> 
> root@video:/usr/local/src/vdr-1.5.12-dvbs2# make
> g++ -g -O2 -Wall -Woverloaded-virtual -c -DREMOTE_KBD 
> -DLIRC_DEVICE=\"/dev/lircd\" -DRCU_DEVICE=\"/dev/ttyS1\" -D_GNU_SOURCE 
> -DVIDEODIR=\"/video\" -DCONFDIR=\"/video\" -DPLUGINDIR=\"./PLUGINS/lib\" 
> -DLOCDIR=\"./locale\" -I/usr/include/freetype2 audio.c
> dvbdevice.h:38: Fehler: »dvbfe_delsys« bezeichnet keinen Typ
> make: *** [audio.o] Fehler 1
> 
> Any hints ?

The include path to your modified DVB-S2 drivers is missing.
I set this path in Make.config (see Make.config.template) to:
DVBDIR   = /usr/local/src/v4l-dvb/linux

..-DLOCDIR=\"./locale\"  -I/usr/include/freetype2 -I/usr/local/src/v4l-dvb/linux/include dvbdevice.c ..
  

Patch

--- ../vdr-1.5.12-dvbs2-other/dvbdevice.c	2008-01-01 22:55:18.000000000 +0100
+++ dvbdevice.c	2008-01-02 22:25:49.000000000 +0100
@@ -798,7 +798,13 @@  bool cDvbDevice::ProvidesSource(int Sour
 
 bool cDvbDevice::ProvidesTransponder(const cChannel *Channel) const
 {
-  return ProvidesSource(Channel->Source()) && (!cSource::IsSat(Channel->Source()) || !Setup.DiSEqC || Diseqcs.Get(Channel->Source(), Channel->Frequency(), Channel->Polarization()));
+  if (!ProvidesSource(Channel->Source()))
+     return false; // doesn't provide source
+  if (!cSource::IsSat(Channel->Source()))
+     return true; // source is sufficient
+  if (Channel->ModulationSystem() && !(frontendType & DVBFE_DELSYS_DVBS2))
+     return false; // requires DVB-S2, but device doesn't provide it
+  return !Setup.DiSEqC || Diseqcs.Get(Channel->Source(), Channel->Frequency(), Channel->Polarization());
 }
 
 bool cDvbDevice::ProvidesChannel(const cChannel *Channel, int Priority, bool *NeedsDetachReceivers) const
@@ -807,7 +813,7 @@  bool cDvbDevice::ProvidesChannel(const c
   bool hasPriority = Priority < 0 || Priority > this->Priority();
   bool needsDetachReceivers = false;
 
-  if (ProvidesSource(Channel->Source())) {
+  if (ProvidesTransponder(Channel)) {
      result = hasPriority;
      if (Priority >= 0 && Receiving(true)) {
         if (dvbTuner->IsTunedTo(Channel)) {