Hallo,
nachdem ich meine VDR's neu organisiert habe, folgende Frage:
In einem steckt nun eine Hauppauge WinTV-HVR4000(Lite) Karte, die (leider) Firmware on demand macht. Das führt dazu, dass der vdr zwar OSD aber kein Bild und Ton hat. Nach meiner Analyse funktioniert es dann, wenn einmalig in cDvbDevice::SetPid ein sleep eingebaut wird. Ich schätze ein Timingproblem mit den Threads.
Meine Frage nun, warum geht es dann damit?
Hier ein paar Logauszüge und die Änderung an der dvbdevice.c.
# dmesg | grep -i dvb
[ 13.541578] cx88[0]: subsystem: 0070:6906, board: Hauppauge WinTV-HVR4000(Lite) DVB-S/S2 [card=69,autodetected], frontend(s): 1
[ 13.800624] tveeprom 1-0050: TV standards ATSC/DVB Digital (eeprom 0x80)
[ 14.026990] cx88/2: cx2388x dvb driver version 1.0.0 loaded
[ 14.038605] cx88/2: registering cx8802 driver, type: dvb access: shared
[ 14.050373] cx88[0]/2: subsystem: 0070:6906, board: Hauppauge WinTV-HVR4000(Lite) DVB-S/S2 [card=69]
[ 14.074670] cx88[0]/2: cx2388x based DVB/ATSC card
[ 14.103660] DVB: registering new adapter (cx88[0])
[ 14.115762] cx88-mpeg driver manager 0000:05:01.2: DVB: registering adapter 0 frontend 0 (Conexant CX24116/CX24118)...
[ 14.258054] cx24116_firmware_ondemand: Waiting for firmware upload (dvb-fe-cx24116.fw)...
# journalctl -b
Oct 26 07:49:32 Keller vdr[1314]: [1314] probing /dev/dvb/adapter0/frontend0
Oct 26 07:49:32 Keller vdr[1314]: [1314] creating cDvbDevice
Oct 26 07:49:32 Keller vdr[1314]: [1314] new device number 1
Oct 26 07:49:32 Keller kernel: cx24116_firmware_ondemand: Waiting for firmware upload (dvb-fe-cx24116.fw)...
Oct 26 07:49:32 Keller kernel: cx24116_firmware_ondemand: Waiting for firmware upload(2)...
snip ( 6 Sekunden dauert der Firmwareload)
Oct 26 07:49:38 Keller kernel: cx24116_load_firmware: FW version 1.26.90.0
Oct 26 07:49:38 Keller kernel: cx24116_firmware_ondemand: Firmware upload complete
Oct 26 07:49:39 Keller kernel: Key type dns_resolver registered
Oct 26 07:49:39 Keller kernel: NFS: Registering the id_resolver key type
Oct 26 07:49:39 Keller kernel: Key type id_resolver registered
Oct 26 07:49:39 Keller kernel: Key type id_legacy registered
Oct 26 07:49:39 Keller vdr[1314]: [1314] DVB API version is 0x050A (VDR was built with 0x050A)
Oct 26 07:49:39 Keller vdr[1314]: [1314] frontend 0/0 provides DVB-S,DVB-S2 with QPSK ("Conexant CX24116/CX24118")
Oct 26 07:49:39 Keller vdr[1314]: [1314] cTimeMs: using monotonic clock (resolution is 1 ns)
Oct 26 07:49:39 Keller vdr[1314]: [1314] found 1 DVB device
Oct 26 07:49:39 Keller vdr[1314]: [1314] initializing plugin: softhddevice (0.6.1rc1-GIT9c90c5a): A software and GPU emulated HD device
Oct 26 07:49:39 Keller vdr[1314]: [1314] new device number 2
# dvbdevice.c
bool cDvbDevice::SetPid(cPidHandle *Handle, int Type, bool On)
{
if (Handle->pid) {
dmx_pes_filter_params pesFilterParams;
memset(&pesFilterParams, 0, sizeof(pesFilterParams));
if (On) {
if (Handle->handle < 0) {
Handle->handle = DvbOpen(DEV_DVB_DEMUX, adapter, frontend, O_RDWR | O_NONBLOCK, true,0);
>>> // warte einmal 2 Sekunden
>>> // sleepsec ist statisches int weiter oben
>>> sleep(sleepsec); // 2 sec
>>> sleepsec = 0;
if (Handle->handle < 0) {
LOG_ERROR;
return false;
}
}
Hat mich einen Tag gekostet, aber jetzt läufts. Wahrscheinlich geht es eleganter, abe dazu fehlen mir die Kenntnisse.