From c9839b5bbd097c884d979e43531ddbbcca9fa162 Mon Sep 17 00:00:00 2001 From: ghost Date: Fri, 28 Jan 2011 12:45:16 +0100 Subject: no more use proprietary /dev/misc/pvr .. use linux tv api /dev/dvb/adapterX/dvrX this needs new hardware drivers!! fixed bug #672 --- lib/dvb/dvb.cpp | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) (limited to 'lib/dvb/dvb.cpp') diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp index 414ab8da..30d5f554 100644 --- a/lib/dvb/dvb.cpp +++ b/lib/dvb/dvb.cpp @@ -464,7 +464,7 @@ RESULT eDVBResourceManager::allocateDemux(eDVBRegisteredFrontend *fe, ePtr unused; - if (m_boxtype == DM800 || m_boxtype == DM500HD || m_boxtype == DM800SE) // dm800 / 500hd + if (m_boxtype == DM800) // dm800 { cap |= capHoldDecodeReference; // this is checked in eDVBChannel::getDemux for (; i != m_demux.end(); ++i, ++n) @@ -520,7 +520,7 @@ RESULT eDVBResourceManager::allocateDemux(eDVBRegisteredFrontend *fe, ePtr &source, const char *streaminfo_f /* (this codepath needs to be improved anyway.) */ #if HAVE_DVB_API_VERSION < 3 m_pvr_fd_dst = open("/dev/pvr", O_WRONLY); -#else - m_pvr_fd_dst = open("/dev/misc/pvr", O_WRONLY); -#endif if (m_pvr_fd_dst < 0) { - eDebug("can't open /dev/misc/pvr - you need to buy the new(!) $$$ box! (%m)"); // or wait for the driver to be improved. + eDebug("can't open /dev/pvr - you need to buy the new(!) $$$ box! (%m)"); // or wait for the driver to be improved. + return -ENODEV; + } +#else + ePtr &demux = m_demux ? m_demux : m_decoder_demux; + if (demux) + { + m_pvr_fd_dst = demux->get().openDVR(); + if (m_pvr_fd_dst < 0) + { + eDebug("can't open /dev/dvb/adapterX/dvrX - you need to buy the new(!) $$$ box! (%m)"); // or wait for the driver to be improved. + return -ENODEV; + } + } + else + { + eDebug("no demux allocated yet.. so its not possible to open the dvr device!!"); return -ENODEV; } +#endif } m_pvr_thread = new eDVBChannelFilePush(); -- cgit v1.2.3 From 423b12c94b41e0f7e9a7715b06ba7f479c197780 Mon Sep 17 00:00:00 2001 From: ghost Date: Fri, 4 Feb 2011 11:04:33 +0100 Subject: add support/demux policy for dm7020hd --- lib/dvb/dvb.cpp | 4 +++- lib/dvb/dvb.h | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) (limited to 'lib/dvb/dvb.cpp') diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp index 414ab8da..6c353c34 100644 --- a/lib/dvb/dvb.cpp +++ b/lib/dvb/dvb.cpp @@ -98,6 +98,8 @@ eDVBResourceManager::eDVBResourceManager() m_boxtype = DM500HD; else if (!strncmp(tmp, "dm800se\n", rd)) m_boxtype = DM800SE; + else if (!strncmp(tmp, "dm7020hd\n", rd)) + m_boxtype = DM7020HD; else { eDebug("boxtype detection via /proc/stb/info not possible... use fallback via demux count!\n"); if (m_demux.size() == 3) @@ -520,7 +522,7 @@ RESULT eDVBResourceManager::allocateDemux(eDVBRegisteredFrontend *fe, ePtr Date: Tue, 15 Feb 2011 20:38:41 +0100 Subject: trade open flags to openPVR function refs bug #672 --- lib/dvb/demux.cpp | 4 ++-- lib/dvb/demux.h | 2 +- lib/dvb/dvb.cpp | 2 +- lib/dvb/idvb.h | 1 + 4 files changed, 5 insertions(+), 4 deletions(-) (limited to 'lib/dvb/dvb.cpp') diff --git a/lib/dvb/demux.cpp b/lib/dvb/demux.cpp index 37eae19f..f4d86185 100644 --- a/lib/dvb/demux.cpp +++ b/lib/dvb/demux.cpp @@ -85,11 +85,11 @@ int eDVBDemux::openDemux(void) return ::open(filename, O_RDWR); } -int eDVBDemux::openDVR(void) +int eDVBDemux::openDVR(int flags) { char filename[128]; snprintf(filename, 128, "/dev/dvb/adapter%d/dvr%d", adapter, demux); - return ::open(filename, O_WRONLY); + return ::open(filename, flags); } DEFINE_REF(eDVBDemux) diff --git a/lib/dvb/demux.h b/lib/dvb/demux.h index 7dbb521a..e73982ec 100644 --- a/lib/dvb/demux.h +++ b/lib/dvb/demux.h @@ -26,7 +26,7 @@ public: RESULT getCADemuxID(uint8_t &id) { id = demux; return 0; } RESULT flush(); RESULT connectEvent(const Slot1 &event, ePtr &conn); - int openDVR(void); + int openDVR(int flags); int getRefCount() { return ref; } private: diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp index 30d5f554..399e9f58 100644 --- a/lib/dvb/dvb.cpp +++ b/lib/dvb/dvb.cpp @@ -1799,7 +1799,7 @@ RESULT eDVBChannel::playSource(ePtr &source, const char *streaminfo_f ePtr &demux = m_demux ? m_demux : m_decoder_demux; if (demux) { - m_pvr_fd_dst = demux->get().openDVR(); + m_pvr_fd_dst = demux->get().openDVR(O_WRONLY); if (m_pvr_fd_dst < 0) { eDebug("can't open /dev/dvb/adapterX/dvrX - you need to buy the new(!) $$$ box! (%m)"); // or wait for the driver to be improved. diff --git a/lib/dvb/idvb.h b/lib/dvb/idvb.h index f15cd04e..66fef391 100644 --- a/lib/dvb/idvb.h +++ b/lib/dvb/idvb.h @@ -636,6 +636,7 @@ public: virtual RESULT getSTC(pts_t &pts, int num=0)=0; virtual RESULT getCADemuxID(uint8_t &id)=0; virtual RESULT flush()=0; + int openDVR(int flags)=0; }; #if HAVE_DVB_API_VERSION < 3 && !defined(VIDEO_EVENT_SIZE_CHANGED) -- cgit v1.2.3