RESULT eServiceFactoryDVB::info(const eServiceReference &ref, ePtr<iStaticServiceInformation> &ptr)
{
/* do we have a PVR service? */
- if (ref.flags & eServiceReference::flagDirectory) // bouquet
+ if ((ref.flags & eServiceReference::flagDirectory) == eServiceReference::flagDirectory) // bouquet
{
- ptr = new eStaticServiceDVBBouquetInformation;
+ if ( !ref.name.empty() )
+ ptr = new eStaticServiceDVBInformation;
+ else
+ ptr = new eStaticServiceDVBBouquetInformation;
return 0;
}
else if (!ref.path.empty())
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);
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.audioStreams[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;
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)
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;
}