aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb/dvb.h
diff options
context:
space:
mode:
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>2005-12-06 22:15:38 +0000
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>2005-12-06 22:15:38 +0000
commit7290c1872d4f6ac37c8090e1cc2e95aeddf6e814 (patch)
tree625e2d62fabe8ba782e927b38378120edb7194c2 /lib/dvb/dvb.h
parent7aaa13924d6d60f6fb66a262ce6ecd8088aee9b6 (diff)
downloadenigma2-7290c1872d4f6ac37c8090e1cc2e95aeddf6e814.tar.gz
enigma2-7290c1872d4f6ac37c8090e1cc2e95aeddf6e814.zip
ose no more used frontends and re-open on demand
Diffstat (limited to 'lib/dvb/dvb.h')
-rw-r--r--lib/dvb/dvb.h28
1 files changed, 25 insertions, 3 deletions
diff --git a/lib/dvb/dvb.h b/lib/dvb/dvb.h
index ac5946cd..71c6a6c1 100644
--- a/lib/dvb/dvb.h
+++ b/lib/dvb/dvb.h
@@ -1,6 +1,7 @@
#ifndef __dvb_dvb_h
#define __dvb_dvb_h
+#include <lib/base/ebase.h>
#include <lib/dvb/idvb.h>
#include <lib/dvb/demux.h>
#include <lib/dvb/frontend.h>
@@ -14,14 +15,35 @@ class eDVBChannel;
(and how to deallocate it). */
class iDVBAdapter;
-class eDVBRegisteredFrontend: public iObject
+class eDVBRegisteredFrontend: public iObject, public Object
{
-DECLARE_REF(eDVBRegisteredFrontend);
+ DECLARE_REF(eDVBRegisteredFrontend);
+ eTimer *disable;
+ void closeFrontend()
+ {
+ if (!m_inuse)
+ m_frontend->closeFrontend();
+ }
public:
+ eDVBRegisteredFrontend(eDVBFrontend *fe, iDVBAdapter *adap)
+ :disable(new eTimer(eApp)), m_adapter(adap), m_frontend(fe), m_inuse(0)
+ {
+ disable = new eTimer(eApp);
+ CONNECT(disable->timeout, eDVBRegisteredFrontend::closeFrontend);
+ }
+ void dec_use()
+ {
+ if (!--m_inuse)
+ disable->start(3000, true);
+ }
+ void inc_use()
+ {
+ if (++m_inuse == 1)
+ m_frontend->openFrontend();
+ }
iDVBAdapter *m_adapter;
ePtr<eDVBFrontend> m_frontend;
int m_inuse;
- eDVBRegisteredFrontend(eDVBFrontend *fe, iDVBAdapter *adap): m_adapter(adap), m_frontend(fe), m_inuse(0) { }
};
struct eDVBRegisteredDemux