mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Speeded up initial CAM connection after channel change
This commit is contained in:
parent
9c04942eaa
commit
16ce936996
15
dvbdevice.c
15
dvbdevice.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: dvbdevice.c 1.45 2003/02/16 10:58:59 kls Exp $
|
* $Id: dvbdevice.c 1.46 2003/02/16 15:10:39 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "dvbdevice.h"
|
#include "dvbdevice.h"
|
||||||
@ -73,6 +73,7 @@ private:
|
|||||||
cChannel channel;
|
cChannel channel;
|
||||||
const char *diseqcCommands;
|
const char *diseqcCommands;
|
||||||
bool active;
|
bool active;
|
||||||
|
time_t startTime;
|
||||||
eTunerStatus tunerStatus;
|
eTunerStatus tunerStatus;
|
||||||
cMutex mutex;
|
cMutex mutex;
|
||||||
cCondVar newSet;
|
cCondVar newSet;
|
||||||
@ -95,6 +96,7 @@ cDvbTuner::cDvbTuner(int Fd_Frontend, int CardIndex, fe_type_t FrontendType, cCi
|
|||||||
diseqcCommands = NULL;
|
diseqcCommands = NULL;
|
||||||
active = false;
|
active = false;
|
||||||
tunerStatus = tsIdle;
|
tunerStatus = tsIdle;
|
||||||
|
startTime = time(NULL);
|
||||||
Start();
|
Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -118,7 +120,9 @@ void cDvbTuner::Set(const cChannel *Channel, bool Tune)
|
|||||||
if (Tune)
|
if (Tune)
|
||||||
tunerStatus = tsSet;
|
tunerStatus = tsSet;
|
||||||
else if (tunerStatus == tsCam)
|
else if (tunerStatus == tsCam)
|
||||||
tunerStatus = tsLocked;
|
tunerStatus = tsTuned;
|
||||||
|
if (Channel->Ca())
|
||||||
|
startTime = time(NULL);
|
||||||
newSet.Broadcast();
|
newSet.Broadcast();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -237,7 +241,6 @@ bool cDvbTuner::SetFrontend(void)
|
|||||||
|
|
||||||
void cDvbTuner::Action(void)
|
void cDvbTuner::Action(void)
|
||||||
{
|
{
|
||||||
time_t StartTime = time(NULL);
|
|
||||||
dsyslog("tuner thread started on device %d (pid=%d)", cardIndex + 1, getpid());
|
dsyslog("tuner thread started on device %d (pid=%d)", cardIndex + 1, getpid());
|
||||||
active = true;
|
active = true;
|
||||||
while (active) {
|
while (active) {
|
||||||
@ -276,8 +279,10 @@ void cDvbTuner::Action(void)
|
|||||||
CaPmt.AddPid(channel.Apid2());
|
CaPmt.AddPid(channel.Apid2());
|
||||||
if (channel.Dpid1())
|
if (channel.Dpid1())
|
||||||
CaPmt.AddPid(channel.Dpid1());
|
CaPmt.AddPid(channel.Dpid1());
|
||||||
if (ciHandler->SetCaPmt(CaPmt))
|
if (ciHandler->SetCaPmt(CaPmt)) {
|
||||||
tunerStatus = tsCam;
|
tunerStatus = tsCam;
|
||||||
|
startTime = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -287,7 +292,7 @@ void cDvbTuner::Action(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// in the beginning we loop more often to let the CAM connection start up fast
|
// in the beginning we loop more often to let the CAM connection start up fast
|
||||||
newSet.TimedWait(mutex, (ciHandler && (time(NULL) - StartTime < 20)) ? 100 : 1000);
|
newSet.TimedWait(mutex, (ciHandler && (time(NULL) - startTime < 20)) ? 100 : 1000);
|
||||||
}
|
}
|
||||||
dsyslog("tuner thread ended on device %d (pid=%d)", cardIndex + 1, getpid());
|
dsyslog("tuner thread ended on device %d (pid=%d)", cardIndex + 1, getpid());
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user