summaryrefslogtreecommitdiff
path: root/lib/service
diff options
context:
space:
mode:
authorhschang <chang@dev3>2017-08-21 07:18:36 (GMT)
committerhschang <chang@dev3>2017-08-21 07:18:36 (GMT)
commit7963a66b2debe9cf6ae566cb88511fdfdc9dc216 (patch)
tree8ac4bb2338a409e8e62f71e5a4ceb5d94fba3b5a /lib/service
parentdd4c8249ef0b08234b6239da9bef26ed7e33ac78 (diff)
Add QuadPiP plugin.
Diffstat (limited to 'lib/service')
-rw-r--r--lib/service/iservice.h1
-rwxr-xr-xlib/service/servicedvb.cpp28
-rw-r--r--lib/service/servicedvb.h4
-rw-r--r--lib/service/servicehdmi.h2
-rw-r--r--lib/service/servicemp3.h2
5 files changed, 35 insertions, 2 deletions
diff --git a/lib/service/iservice.h b/lib/service/iservice.h
index 33ff66b..bc0f872 100644
--- a/lib/service/iservice.h
+++ b/lib/service/iservice.h
@@ -879,6 +879,7 @@ public:
virtual SWIG_VOID(RESULT) stream(ePtr<iStreamableService> &SWIG_OUTPUT)=0;
virtual SWIG_VOID(RESULT) streamed(ePtr<iStreamedService> &SWIG_OUTPUT)=0;
virtual SWIG_VOID(RESULT) keys(ePtr<iServiceKeys> &SWIG_OUTPUT)=0;
+ virtual void setQpipMode(bool value, bool audio)=0;
};
SWIG_TEMPLATE_TYPEDEF(ePtr<iPlayableService>, iPlayableServicePtr);
diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp
index 1494cc5..f740b47 100755
--- a/lib/service/servicedvb.cpp
+++ b/lib/service/servicedvb.cpp
@@ -959,6 +959,10 @@ eDVBServicePlay::eDVBServicePlay(const eServiceReference &ref, eDVBService *serv
m_current_video_pid_type = 0;
+ m_qpip_mode = false;
+
+ m_play_audio = true;
+
CONNECT(m_subtitle_sync_timer->timeout, eDVBServicePlay::checkSubtitleTiming);
}
@@ -1963,7 +1967,7 @@ int eDVBServicePlay::selectAudioStream(int i)
m_current_audio_pid = apid;
- if (m_is_primary && m_decoder->setAudioPID(apid, apidtype))
+ if ((m_is_primary || (m_qpip_mode && m_play_audio)) && m_decoder->setAudioPID(apid, apidtype))
{
eDebug("set audio pid failed");
return -4;
@@ -2665,7 +2669,9 @@ void eDVBServicePlay::updateDecoder(bool sendSeekableStateChanged)
m_decoder->setVideoPID(vpid, vpidtype);
m_current_video_pid_type = vpidtype;
- selectAudioStream();
+
+ if (!m_qpip_mode || m_play_audio) // 1) no qpip mode, 2) qpip mode & play audio
+ selectAudioStream();
//if (!(m_is_pvr || m_is_stream || m_timeshift_active || !m_is_primary))
if (!(m_is_pvr || m_is_stream || m_timeshift_active))
@@ -3305,6 +3311,24 @@ PyObject *eDVBServicePlay::getStreamingData()
return r;
}
+void eDVBServicePlay::setQpipMode(bool value, bool audio)
+{
+ m_qpip_mode = value;
+ m_play_audio = audio;
+
+ if(m_decoder)
+ {
+ if (m_play_audio)
+ {
+ selectAudioStream();
+ }
+ else
+ {
+ m_decoder->setAudioPID(-1, -1);
+ }
+ m_decoder->set();
+ }
+}
DEFINE_REF(eDVBServicePlay)
diff --git a/lib/service/servicedvb.h b/lib/service/servicedvb.h
index eafc96d..6d2eaf9 100644
--- a/lib/service/servicedvb.h
+++ b/lib/service/servicedvb.h
@@ -184,6 +184,7 @@ public:
// iStreamableService
RESULT stream(ePtr<iStreamableService> &ptr);
PyObject *getStreamingData();
+ void setQpipMode(bool value, bool audio);
protected:
friend class eServiceFactoryDVB;
@@ -202,6 +203,9 @@ protected:
eDVBServiceEITHandler m_event_handler;
int m_current_audio_pid;
int m_current_video_pid_type;
+
+ bool m_qpip_mode;
+ bool m_play_audio;
eDVBServicePlay(const eServiceReference &ref, eDVBService *service, bool connect_event=true);
diff --git a/lib/service/servicehdmi.h b/lib/service/servicehdmi.h
index 1f8e664..0248f3d 100644
--- a/lib/service/servicehdmi.h
+++ b/lib/service/servicehdmi.h
@@ -75,6 +75,8 @@ public:
std::string getInfoString(int w);
PyObject *getInfoObject(int w);
+ void setQpipMode(bool value, bool audio) { }
+
private:
friend class eServiceFactoryHDMI;
eServiceHDMI(eServiceReference ref);
diff --git a/lib/service/servicemp3.h b/lib/service/servicemp3.h
index 50957c4..8ada1b5 100644
--- a/lib/service/servicemp3.h
+++ b/lib/service/servicemp3.h
@@ -83,6 +83,8 @@ public:
RESULT keys(ePtr<iServiceKeys> &ptr) { ptr = 0; return -1; }
RESULT stream(ePtr<iStreamableService> &ptr) { ptr = 0; return -1; }
+ void setQpipMode(bool value, bool audio) { }
+
// iPausableService
RESULT pause();
RESULT unpause();