summaryrefslogtreecommitdiff
path: root/lib/dvb/decoder.cpp
diff options
context:
space:
mode:
authorghost <andreas.monzner@multimedia-labs.de>2009-05-04 18:52:04 (GMT)
committerghost <andreas.monzner@multimedia-labs.de>2009-05-04 18:52:04 (GMT)
commitcecf7ae682b02e792bb781391674a7a383630f72 (patch)
tree025627f1e9587668fa2be04307548a09e56ba7ab /lib/dvb/decoder.cpp
parentb651d4e645d1614d1aaace4c7dcf1db0b23e7c4c (diff)
fix pid changes on pmt updates (this fixes local windows on some german local regional services)
need to be rechecked by tmbinc!
Diffstat (limited to 'lib/dvb/decoder.cpp')
-rw-r--r--lib/dvb/decoder.cpp13
1 files changed, 7 insertions, 6 deletions
diff --git a/lib/dvb/decoder.cpp b/lib/dvb/decoder.cpp
index eb5258d..bc6e060 100644
--- a/lib/dvb/decoder.cpp
+++ b/lib/dvb/decoder.cpp
@@ -203,8 +203,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 +284,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 +447,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)");
@@ -1093,7 +1092,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 +1173,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;