Hi,
let's consider this setup:
- one headless computer, 2 dvb-s cards (1 ff, 1 budget) both
receiving the exactly the same set of channels
- this server runs 2 vdr instances: first main one with
streamdev-server handling the dvb cards, the other one with
streamdev-client
- both of them are running vdr-xineliboutput plugin so that i can have
2 independant outputs(TV) plugged in.
- main vdr is doing the recording and also being used a http stream
server for one client (occasionnaly)
The channels i'm using are those:
:BBC
BBC 1 London;BSkyB:10773:hC56:S28.2E:22000:5000:5001=eng,5002=NAR:5003:0:6301:2:2045:0
BBC 2 England;BSkyB:10773:hC56:S28.2E:22000:5100:5101=eng,5102=NAR:5103:0:6302:2:2045:0
BBC THREE;BSkyB:10773:hC56:S28.2E:22000:5200:5201=eng,5202=NAR:5203:0:6319:2:2045:0
BBC FOUR;BSkyB:10773:hC56:S28.2E:22000:5300:5301=eng,5302=NAR:5303:0:6316:2:2045:0
:ITV
ITV1 Granada;BSkyB:10758:vC56:S28.2E:22000:2318:2319=eng:2320:0:10080:2:2044:0
ITV2;BSkyB:10758:vC56:S28.2E:22000:2314:2315=eng,2363=NAR:2317:0:10070:2:2044:0
ITV3;BSkyB:10906:vC56:S28.2E:22000:2363:2364=eng,2314=NAR:2365:0:10260:2:2054:0
ITV4;BSkyB:10758:vC56:S28.2E:22000:2305:2306=eng:2309:0:10072:2:2044:0
I have added
esyslog("GetDevice(1) device #%d imp=%x ndr=%d isreceiving=%d isactual=%d isprimary=%d hasdecoder=%d devprio=%d Priority=%d providesca=%d\n",i,imp,ndr,device[i]->Receiving(),device[i]==ActualDevice(),device[i]->IsPrimaryDevice(),device[i]->HasDecoder(),device[i]->Priority(),Priority,device[i]->ProvidesCa(Channel));
before if (imp < Impact) {
and added
esyslog("GetDevice(2) device #%d SELECTED imp=%x\n",i,imp);
before if (NeedsDetachReceivers)
first (main) vdr tunes to bbc 1: it uses the budget card:
Jul 4 00:33:24 dvb vdr: [22230] switching to channel 1
Jul 4 00:33:24 dvb vdr: [22230] GetDevice(1) device #0 imp=116202 ndr=0 isreceiving=0 isactual=0 isprimary=0 hasdecoder=1 devprio=-1 Priority=0 providesca=2
Jul 4 00:33:24 dvb vdr: [22230] GetDevice(2) device #0 SELECTED imp=116202
Jul 4 00:33:24 dvb vdr: [22230] INFO: Using software decryption on card 1
Jul 4 00:33:24 dvb vdr: [22230] GetDevice(1) device #1 imp=106202 ndr=0 isreceiving=0 isactual=0 isprimary=0 hasdecoder=0 devprio=-1 Priority=0 providesca=2
Jul 4 00:33:24 dvb vdr: [22230] GetDevice(2) device #1 SELECTED imp=106202
then second vdr is launched and tuned to bbc 2: it uses the ff card:
Jul 4 00:37:05 dvb vdr: [22246] GetDevice(1) device #0 imp=116202 ndr=0 isreceiving=0 isactual=0 isprimary=0 hasdecoder=1 devprio=-1 Priority=0 providesca=2
Jul 4 00:37:05 dvb vdr: [22246] GetDevice(2) device #0 SELECTED imp=116202
Jul 4 00:37:05 dvb vdr: [22246] GetDevice(1) device #1 imp=146202 ndr=0 isreceiving=0 isactual=1 isprimary=0 hasdecoder=0 devprio=-1 Priority=0 providesca=2
Jul 4 00:37:06 dvb vdr: [22246] GetDevice(1) device #0 imp=116202 ndr=0 isreceiving=0 isactual=0 isprimary=0 hasdecoder=1 devprio=-1 Priority=0 providesca=2
Jul 4 00:37:06 dvb vdr: [22246] GetDevice(2) device #0 SELECTED imp=116202
Jul 4 00:37:06 dvb vdr: [22246] GetDevice(1) device #1 imp=146202 ndr=0 isreceiving=0 isactual=1 isprimary=0 hasdecoder=0 devprio=-1 Priority=0 providesca=2
Jul 4 00:37:06 dvb vdr: [22246] Streamdev: Setting data connection to 10.0.2.10:48025
How could I adapt GetDevice so that the second vdr would use the same
card ? (bbc1 and bbc2 are on the same transponder)
Because if i start a recording or the http client on itv1, one transfer
mode is interrupted. It's obviously not what i want. I would have
expected bbc1 and bbc2 to be handled by only one card letting the
other one free for something else.
in cDevice::GetDevice (device.c):
imp <<= 1; imp |= !device[i]->Receiving() || ndr;
could this be replaced by:
imp |= ndr;
are there cases where ndr is True and device[i]->Receiving() is false ?
if device[i]->Receiving() and ndr is false i guess that would mean
this device should be selected. (and maybe imp shouldn't be increased
in that case)
or/and what could i change in:
imp <<= 1; imp |= device[i] == ActualDevice();
so that it doesn't increase imp if ActualDevice also provides the
desired channel ?
(or maybe this test could be skipped in that case ?)
another ex:
for a reason or another, 1st vdr tunes to bbc1 and uses first dvd card
(the ff one)
then second vdr wants to tune to bbc1 as well: unfortunatly the
selected device is not the first one but the second one because it
doesn't have a decoder. (and imp is unconditionnaly increased when the
card has a decoder)
I understand selecting the appropriate device is not that quite
simple.
Is there a way to make this selection more modular and add a new
setting to select between different GetDevice behabiors ?
--