aboutsummaryrefslogtreecommitdiff
path: root/lib/service/servicedvb.cpp
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2005-11-28 01:54:35 +0000
committerFelix Domke <tmbinc@elitedvb.net>2005-11-28 01:54:35 +0000
commit0329b4216112f4591e758ff2407002500abb0bf6 (patch)
tree55c0cfdd2bc51663c1e26cc409f5740790abd110 /lib/service/servicedvb.cpp
parent21baac81361a8a27f980cbcaaf2f97e130cbdef0 (diff)
downloadenigma2-0329b4216112f4591e758ff2407002500abb0bf6.tar.gz
enigma2-0329b4216112f4591e758ff2407002500abb0bf6.zip
service: add info
Diffstat (limited to 'lib/service/servicedvb.cpp')
-rw-r--r--lib/service/servicedvb.cpp80
1 files changed, 65 insertions, 15 deletions
diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp
index d8206b9a..a49ce5c4 100644
--- a/lib/service/servicedvb.cpp
+++ b/lib/service/servicedvb.cpp
@@ -535,6 +535,7 @@ void eDVBServicePlay::serviceEvent(int event)
if (m_decoder)
{
m_decoder->setVideoPID(vpid);
+ m_current_audio_stream = 0;
m_decoder->setAudioPID(apid, apidtype);
if (!m_is_pvr)
m_decoder->setSyncPCR(pcrpid);
@@ -706,6 +707,43 @@ RESULT eDVBServicePlay::getEvent(ePtr<eServiceEvent> &evt, int nownext)
return m_event_handler.getEvent(evt, nownext);
}
+int eDVBServicePlay::getInfo(int w)
+{
+ eDVBServicePMTHandler::program program;
+
+ if (m_service_handler.getProgramInfo(program))
+ return -1;
+
+ switch (w)
+ {
+ case sVideoPID: if (program.videoStreams.empty()) return -1; return program.videoStreams[0].pid;
+ case sAudioPID: if (program.audioStreams.empty()) return -1; return program.videoStreams[m_current_audio_stream].pid;
+ case sPCRPID: return program.pcrPid;
+ case sPMTPID: return program.pmtPid;
+ case sTXTPID: return -1;
+
+ case sSID: return ((const eServiceReferenceDVB&)m_reference).getServiceID().get();
+ case sONID: return ((const eServiceReferenceDVB&)m_reference).getOriginalNetworkID().get();
+ case sTSID: return ((const eServiceReferenceDVB&)m_reference).getTransportStreamID().get();
+ case sNamespace: return ((const eServiceReferenceDVB&)m_reference).getDVBNamespace().get();
+ case sProvider: if (!m_dvb_service) return -1; return -2;
+ default:
+ return -1;
+ }
+}
+
+std::string eDVBServicePlay::getInfoString(int w)
+{
+ switch (w)
+ {
+ case sProvider:
+ if (!m_dvb_service) return "";
+ return m_dvb_service->m_provider_name;
+ default:
+ return "";
+ }
+}
+
int eDVBServicePlay::getNumberOfTracks()
{
eDVBServicePMTHandler::program program;
@@ -716,24 +754,12 @@ int eDVBServicePlay::getNumberOfTracks()
RESULT eDVBServicePlay::selectTrack(unsigned int i)
{
- eDVBServicePMTHandler::program program;
-
- if (m_service_handler.getProgramInfo(program))
- return -1;
-
- if (i >= program.audioStreams.size())
- return -2;
-
- if (!m_decoder)
- return -3;
-
- if (m_decoder->setAudioPID(program.audioStreams[i].pid, program.audioStreams[i].type))
- return -4;
+ int ret = selectAudioStream(i);
if (m_decoder->start())
return -5;
-
- return 0;
+
+ return ret;
}
RESULT eDVBServicePlay::getTrackInfo(struct iAudioTrackInfo &info, unsigned int i)
@@ -755,6 +781,30 @@ RESULT eDVBServicePlay::getTrackInfo(struct iAudioTrackInfo &info, unsigned int
else
info.m_description = "???";
+ /* CHECK here for component tag override. */
+ info.m_language = program.audioStreams[i].language_code;
+
+ return 0;
+}
+
+int eDVBServicePlay::selectAudioStream(int i)
+{
+ eDVBServicePMTHandler::program program;
+
+ if (m_service_handler.getProgramInfo(program))
+ return -1;
+
+ if (i >= program.audioStreams.size())
+ return -2;
+
+ if (!m_decoder)
+ return -3;
+
+ if (m_decoder->setAudioPID(program.audioStreams[i].pid, program.audioStreams[i].type))
+ return -4;
+
+ m_current_audio_stream = i;
+
return 0;
}