aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2009-05-10 14:04:45 +0200
committerFelix Domke <tmbinc@elitedvb.net>2009-05-10 14:04:45 +0200
commit946fb003e4be2e1485308d7fc5bb7274732751a3 (patch)
tree8cc44adc5dc7a7885632c410925e4e6d6c7d332d /lib/dvb
parenta012dfc95def3f4043f5b0bb319f1f4073592543 (diff)
parentd245191dd27ad9884c33ad3a76992dc6c4e8f33b (diff)
downloadenigma2-946fb003e4be2e1485308d7fc5bb7274732751a3.tar.gz
enigma2-946fb003e4be2e1485308d7fc5bb7274732751a3.zip
Merge branch 'master' of /home/tmbinc/enigma2-git
Diffstat (limited to 'lib/dvb')
-rw-r--r--lib/dvb/decoder.cpp30
-rw-r--r--lib/dvb/decoder.h8
-rw-r--r--lib/dvb/frontend.cpp4
3 files changed, 23 insertions, 19 deletions
diff --git a/lib/dvb/decoder.cpp b/lib/dvb/decoder.cpp
index 0280fe52..30a80d10 100644
--- a/lib/dvb/decoder.cpp
+++ b/lib/dvb/decoder.cpp
@@ -12,8 +12,10 @@
#define dmxPesFilterParams dmx_pes_filter_params
#define DMX_PES_VIDEO0 DMX_PES_VIDEO
#define DMX_PES_AUDIO0 DMX_PES_AUDIO
+#define DMX_PES_PCR0 DMX_PES_PCR
#define DMX_PES_VIDEO1 DMX_PES_VIDEO
#define DMX_PES_AUDIO1 DMX_PES_AUDIO
+#define DMX_PES_PCR1 DMX_PES_PCR
#include <ost/dmx.h>
#include <ost/video.h>
#include <ost/audio.h>
@@ -203,8 +205,7 @@ int eDVBAudio::startPid(int pid, int type)
eDebug("failed (%m)");
else
eDebug("ok");
- freeze();
-
+ freeze(); // why freeze here?!? this is a problem when only a pid change is requested... because of the unfreeze logic in Decoder::setState
eDebugNoNewLine("AUDIO_PLAY - ");
if (::ioctl(m_fd, AUDIO_PLAY) < 0)
eDebug("failed (%m)");
@@ -285,7 +286,7 @@ int eDVBAudio::getPTS(pts_t &now)
eDVBAudio::~eDVBAudio()
{
- unfreeze();
+ unfreeze(); // why unfreeze here... but not unfreeze video in ~eDVBVideo ?!?
if (m_fd >= 0)
::close(m_fd);
if (m_fd_demux >= 0)
@@ -448,7 +449,7 @@ int eDVBVideo::startPid(int pid, int type)
return -errno;
}
eDebug("ok");
- freeze();
+ freeze(); // why freeze here?!? this is a problem when only a pid change is requested... because of the unfreeze logic in Decoder::setState
eDebugNoNewLine("VIDEO_PLAY - ");
if (::ioctl(m_fd, VIDEO_PLAY) < 0)
eDebug("failed (%m)");
@@ -687,7 +688,7 @@ int eDVBVideo::getFrameRate()
DEFINE_REF(eDVBPCR);
-eDVBPCR::eDVBPCR(eDVBDemux *demux): m_demux(demux)
+eDVBPCR::eDVBPCR(eDVBDemux *demux, int dev): m_demux(demux), m_dev(dev)
{
char filename[128];
#if HAVE_DVB_API_VERSION < 3
@@ -746,7 +747,7 @@ int eDVBPCR::startPid(int pid)
pes.pid = pid;
pes.input = DMX_IN_FRONTEND;
pes.output = DMX_OUT_DECODER;
- pes.pes_type = DMX_PES_PCR;
+ pes.pes_type = m_dev ? DMX_PES_PCR1 : DMX_PES_PCR0; /* FIXME */
pes.flags = 0;
eDebugNoNewLine("DMX_SET_PES_FILTER(0x%02x) - pcr - ", pid);
if (::ioctl(m_fd_demux, DMX_SET_PES_FILTER, &pes) < 0)
@@ -783,7 +784,8 @@ eDVBPCR::~eDVBPCR()
DEFINE_REF(eDVBTText);
-eDVBTText::eDVBTText(eDVBDemux *demux): m_demux(demux)
+eDVBTText::eDVBTText(eDVBDemux *demux, int dev)
+ :m_demux(demux), m_dev(dev)
{
char filename[128];
#if HAVE_DVB_API_VERSION < 3
@@ -805,7 +807,7 @@ int eDVBTText::startPid(int pid)
pes.pid = pid;
pes.input = DMX_IN_FRONTEND;
pes.output = DMX_OUT_DECODER;
- pes.pes_type = DMX_PES_TELETEXT;
+ pes.pes_type = m_dev ? DMX_PES_TELETEXT1 : DMX_PES_TELETEXT0; // FIXME
pes.flags = 0;
eDebugNoNewLine("DMX_SET_PES_FILTER(0x%02x) - ttx - ", pid);
@@ -815,7 +817,7 @@ int eDVBTText::startPid(int pid)
return -errno;
}
eDebug("ok");
- eDebugNoNewLine("DEMUX_START - pcr - ");
+ eDebugNoNewLine("DEMUX_START - ttx - ");
if (::ioctl(m_fd_demux, DMX_START) < 0)
{
eDebug("failed(%m)");
@@ -961,7 +963,7 @@ int eTSMPEGDecoder::setState()
{
if ((m_pcrpid >= 0) && (m_pcrpid < 0x1FFF))
{
- m_pcr = new eDVBPCR(m_demux);
+ m_pcr = new eDVBPCR(m_demux, m_decoder);
if (m_pcr->startPid(m_pcrpid))
res = -1;
}
@@ -992,7 +994,7 @@ int eTSMPEGDecoder::setState()
{
if ((m_textpid >= 0) && (m_textpid < 0x1FFF) && !nott)
{
- m_text = new eDVBTText(m_demux);
+ m_text = new eDVBTText(m_demux, m_decoder);
if (m_text->startPid(m_textpid))
res = -1;
}
@@ -1093,7 +1095,7 @@ eTSMPEGDecoder::~eTSMPEGDecoder()
RESULT eTSMPEGDecoder::setVideoPID(int vpid, int type)
{
- if (m_vpid != vpid)
+ if ((m_vpid != vpid) || (m_vtype != type))
{
m_changed |= changeVideo;
m_vpid = vpid;
@@ -1174,7 +1176,9 @@ RESULT eTSMPEGDecoder::play()
if (!m_changed)
return 0;
}
- else
+// else
+/* commented out because the changeState is needed to unfreeze decoders in decoder::setState... needed by normal pmt changes
+tmbinc please recheck this! */
{
m_state = statePlay;
m_changed |= changeState;
diff --git a/lib/dvb/decoder.h b/lib/dvb/decoder.h
index 51be5141..3bfc70cb 100644
--- a/lib/dvb/decoder.h
+++ b/lib/dvb/decoder.h
@@ -80,9 +80,9 @@ class eDVBPCR: public iObject
DECLARE_REF(eDVBPCR);
private:
ePtr<eDVBDemux> m_demux;
- int m_fd_demux;
+ int m_fd_demux, m_dev;
public:
- eDVBPCR(eDVBDemux *demux);
+ eDVBPCR(eDVBDemux *demux, int dev);
#if HAVE_DVB_API_VERSION < 3
int setPid(int pid);
int startPid();
@@ -98,9 +98,9 @@ class eDVBTText: public iObject
DECLARE_REF(eDVBTText);
private:
ePtr<eDVBDemux> m_demux;
- int m_fd_demux;
+ int m_fd_demux, m_dev;
public:
- eDVBTText(eDVBDemux *demux);
+ eDVBTText(eDVBDemux *demux, int dev);
int startPid(int pid);
void stop();
virtual ~eDVBTText();
diff --git a/lib/dvb/frontend.cpp b/lib/dvb/frontend.cpp
index a2ccf3b0..e5e83b42 100644
--- a/lib/dvb/frontend.cpp
+++ b/lib/dvb/frontend.cpp
@@ -379,7 +379,7 @@ RESULT eDVBFrontendParameters::calculateDifference(const iDVBFrontendParameters
terrestrial.code_rate_HP != eDVBFrontendParametersTerrestrial::FEC_Auto)
diff = 1 << 30;
else
- diff = abs(terrestrial.frequency - oterrestrial.frequency);
+ diff = abs(terrestrial.frequency - oterrestrial.frequency) / 1000;
return 0;
default:
return -1;
@@ -403,7 +403,7 @@ RESULT eDVBFrontendParameters::getHash(unsigned long &hash) const
return 0;
case iDVBFrontend::feTerrestrial:
hash = 0xEEEE0000;
- hash |= (terrestrial.frequency/1000)&0xFFFF;
+ hash |= (terrestrial.frequency/1000000)&0xFFFF;
return 0;
default:
return -1;