git.cweiske.de
/
enigma2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix saving of nameservers
[enigma2.git]
/
lib
/
service
/
servicedvb.cpp
diff --git
a/lib/service/servicedvb.cpp
b/lib/service/servicedvb.cpp
index 17f841b57e5462bb9481a5d8f84e006776fa9d77..2f98ed6b1e9d15b0f7a4ce114d088daf6d8820ed 100644
(file)
--- a/
lib/service/servicedvb.cpp
+++ b/
lib/service/servicedvb.cpp
@@
-412,7
+412,7
@@
RESULT eStaticServiceDVBBouquetInformation::getName(const eServiceReference &ref
return -1;
}
return -1;
}
-int eStaticServiceDVBBouquetInformation::isPlayable(const eServiceReference &ref, const eServiceReference &ignore)
+int eStaticServiceDVBBouquetInformation::isPlayable(const eServiceReference &ref, const eServiceReference &ignore
, bool simulate
)
{
if (ref.flags & eServiceReference::isGroup)
{
{
if (ref.flags & eServiceReference::isGroup)
{
@@
-453,7
+453,7
@@
int eStaticServiceDVBBouquetInformation::isPlayable(const eServiceReference &ref
{ 2, 1, 3 } // -T -S -C
};
((const eServiceReferenceDVB&)*it).getChannelID(chid);
{ 2, 1, 3 } // -T -S -C
};
((const eServiceReferenceDVB&)*it).getChannelID(chid);
- int tmp=res->canAllocateChannel(chid, chid_ignore);
+ int tmp=res->canAllocateChannel(chid, chid_ignore
, simulate
);
switch(tmp)
{
case 0:
switch(tmp)
{
case 0:
@@
-1065,7
+1065,9
@@
eDVBServicePlay::eDVBServicePlay(const eServiceReference &ref, eDVBService *serv
m_tune_state = -1;
m_tune_state = -1;
- CONNECT(m_subtitle_sync_timer.timeout, eDVBServicePlay::checkSubtitleTiming);
+ m_subtitle_sync_timer = eTimer::create(eApp);
+
+ CONNECT(m_subtitle_sync_timer->timeout, eDVBServicePlay::checkSubtitleTiming);
}
eDVBServicePlay::~eDVBServicePlay()
}
eDVBServicePlay::~eDVBServicePlay()
@@
-1569,46
+1571,67
@@
RESULT eDVBServicePlay::getEvent(ePtr<eServiceEvent> &evt, int nownext)
return m_event_handler.getEvent(evt, nownext);
}
return m_event_handler.getEvent(evt, nownext);
}
+static int readMpegProc(char *str, int decoder)
+{
+ int val = -1;
+ char tmp[64];
+ sprintf(tmp, "/proc/stb/vmpeg/%d/%s", decoder, str);
+ FILE *f = fopen(tmp, "r");
+ if (f)
+ {
+ fscanf(f, "%x", &val);
+ fclose(f);
+ }
+ return val;
+}
+
int eDVBServicePlay::getInfo(int w)
{
eDVBServicePMTHandler::program program;
int eDVBServicePlay::getInfo(int w)
{
eDVBServicePMTHandler::program program;
-
+
if (w == sCAIDs)
return resIsPyObject;
eDVBServicePMTHandler &h = m_timeshift_active ? m_service_handler_timeshift : m_service_handler;
if (w == sCAIDs)
return resIsPyObject;
eDVBServicePMTHandler &h = m_timeshift_active ? m_service_handler_timeshift : m_service_handler;
-
+
int no_program_info = 0;
int no_program_info = 0;
-
+
if (h.getProgramInfo(program))
no_program_info = 1;
if (h.getProgramInfo(program))
no_program_info = 1;
-
+
switch (w)
{
#if HAVE_DVB_API_VERSION >= 3
case sVideoHeight:
switch (w)
{
#if HAVE_DVB_API_VERSION >= 3
case sVideoHeight:
- if (m_videoEventData.type
!= iTSMPEGDecoder::videoEvent::eventUnknown
)
+ if (m_videoEventData.type
== iTSMPEGDecoder::videoEvent::eventSizeChanged
)
return m_videoEventData.height;
return m_videoEventData.height;
- return -1;
+ else
+ return readMpegProc("yres", !m_is_primary);
case sVideoWidth:
case sVideoWidth:
- if (m_videoEventData.type
!= iTSMPEGDecoder::videoEvent::eventUnknown
)
+ if (m_videoEventData.type
== iTSMPEGDecoder::videoEvent::eventSizeChanged
)
return m_videoEventData.width;
return m_videoEventData.width;
- return -1;
+ else
+ return readMpegProc("xres", !m_is_primary);
case sFrameRate:
case sFrameRate:
- if (m_videoEventData.type
!= iTSMPEGDecoder::videoEvent::eventUnknown
)
+ if (m_videoEventData.type
== iTSMPEGDecoder::videoEvent::eventFrameRateChanged
)
return m_videoEventData.framerate;
return m_videoEventData.framerate;
- return -1;
+ else
+ return readMpegProc("framerate", !m_is_primary);
case sProgressive:
case sProgressive:
- if (m_videoEventData.type
!= iTSMPEGDecoder::videoEvent::eventUnknown
)
+ if (m_videoEventData.type
== iTSMPEGDecoder::videoEvent::eventProgressiveChanged
)
return m_videoEventData.progressive;
return m_videoEventData.progressive;
- return
-1
;
+ return
readMpegProc("progressive", !m_is_primary)
;
#else
#warning "FIXMEE implement sFrameRate, sProgressive, sVideoHeight, sVideoWidth for old DVB API"
#endif
case sAspect:
#else
#warning "FIXMEE implement sFrameRate, sProgressive, sVideoHeight, sVideoWidth for old DVB API"
#endif
case sAspect:
+ {
+ int val;
#if HAVE_DVB_API_VERSION >= 3
#if HAVE_DVB_API_VERSION >= 3
- if (m_videoEventData.type
!= iTSMPEGDecoder::videoEvent::eventUnknown
)
+ if (m_videoEventData.type
== iTSMPEGDecoder::videoEvent::eventSizeChanged
)
return m_videoEventData.aspect == VIDEO_FORMAT_4_3 ? 1 : 3;
return m_videoEventData.aspect == VIDEO_FORMAT_4_3 ? 1 : 3;
+ else if ((val=readMpegProc("aspect", !m_is_primary)) != -1)
+ return val;
else
#else
#warning "FIXMEE implement sAspect for old DVB API"
else
#else
#warning "FIXMEE implement sAspect for old DVB API"
@@
-1653,6
+1676,7
@@
int eDVBServicePlay::getInfo(int w)
}
}
return -1;
}
}
return -1;
+ }
case sIsCrypted: if (no_program_info) return -1; return program.isCrypted();
case sVideoPID: if (no_program_info) return -1; if (program.videoStreams.empty()) return -1; return program.videoStreams[0].pid;
case sVideoType: if (no_program_info) return -1; if (program.videoStreams.empty()) return -1; return program.videoStreams[0].type;
case sIsCrypted: if (no_program_info) return -1; return program.isCrypted();
case sVideoPID: if (no_program_info) return -1; if (program.videoStreams.empty()) return -1; return program.videoStreams[0].pid;
case sVideoType: if (no_program_info) return -1; if (program.videoStreams.empty()) return -1; return program.videoStreams[0].type;
@@
-2904,7
+2928,7
@@
void eDVBServicePlay::checkSubtitleTiming()
} else
{
eDebug("start subtitle delay %d", diff / 90);
} else
{
eDebug("start subtitle delay %d", diff / 90);
- m_subtitle_sync_timer
.
start(diff / 90, 1);
+ m_subtitle_sync_timer
->
start(diff / 90, 1);
break;
}
}
break;
}
}
@@
-2961,21
+2985,19
@@
void eDVBServicePlay::setPCMDelay(int delay)
void eDVBServicePlay::video_event(struct iTSMPEGDecoder::videoEvent event)
{
void eDVBServicePlay::video_event(struct iTSMPEGDecoder::videoEvent event)
{
+ memcpy(&m_videoEventData, &event, sizeof(event));
switch(event.type) {
case iTSMPEGDecoder::videoEvent::eventSizeChanged:
switch(event.type) {
case iTSMPEGDecoder::videoEvent::eventSizeChanged:
- m_videoEventData.aspect = event.aspect;
- m_videoEventData.height = event.height;
- m_videoEventData.width = event.width;
m_event((iPlayableService*)this, evVideoSizeChanged);
break;
case iTSMPEGDecoder::videoEvent::eventFrameRateChanged:
m_event((iPlayableService*)this, evVideoSizeChanged);
break;
case iTSMPEGDecoder::videoEvent::eventFrameRateChanged:
- m_videoEventData.framerate = event.framerate;
m_event((iPlayableService*)this, evVideoFramerateChanged);
break;
case iTSMPEGDecoder::videoEvent::eventProgressiveChanged:
m_event((iPlayableService*)this, evVideoFramerateChanged);
break;
case iTSMPEGDecoder::videoEvent::eventProgressiveChanged:
- m_videoEventData.progressive = event.progressive;
m_event((iPlayableService*)this, evVideoProgressiveChanged);
break;
m_event((iPlayableService*)this, evVideoProgressiveChanged);
break;
+ default:
+ break;
}
}
}
}