default:
case eDVBFrontendParametersSatellite::System::DVB_S: tmp="DVB-S"; break;
case eDVBFrontendParametersSatellite::System::DVB_S2:
- switch(feparm.roll_off)
+ switch(feparm.rolloff)
{
+ default:
case eDVBFrontendParametersSatellite::RollOff::alpha_0_35: tmp="0.35"; break;
case eDVBFrontendParametersSatellite::RollOff::alpha_0_25: tmp="0.25"; break;
case eDVBFrontendParametersSatellite::RollOff::alpha_0_20: tmp="0.20"; break;
- default:
- case eDVBFrontendParametersSatellite::RollOff::alpha_auto: tmp="AUTO"; break;
}
PutToDict(dict, "roll off", tmp);
+ if (feparm.modulation == eDVBFrontendParametersSatellite::Modulation::M8PSK)
+ {
+ switch(feparm.pilot)
+ {
+ case eDVBFrontendParametersSatellite::Pilot::On: tmp="ON"; break;
+ case eDVBFrontendParametersSatellite::Pilot::Off: tmp="OFF"; break;
+ default:
+ case eDVBFrontendParametersSatellite::Pilot::Unknown: tmp="AUTO"; break;
+ }
+ PutToDict(dict, "pilot", tmp);
+ }
tmp="DVB-S2";
break;
}
eServiceCenter::getPrivInstance(sc);
if (sc)
- sc->addServiceFactory(eServiceFactoryDVB::id, this);
+ {
+ std::list<std::string> extensions;
+ extensions.push_back("ts");
+ sc->addServiceFactory(eServiceFactoryDVB::id, this, extensions);
+ }
m_StaticServiceDVBInfo = new eStaticServiceDVBInformation;
m_StaticServiceDVBBouquetInfo = new eStaticServiceDVBBouquetInformation;
sptr->getName(ref, name);
// filter short name brakets
- unsigned int pos;
+ size_t pos;
while((pos = name.find("\xc2\x86")) != std::string::npos)
name.erase(pos,2);
while((pos = name.find("\xc2\x87")) != std::string::npos)
else
m_event_handler.start(m_demux, sid);
}
+ m_event((iPlayableService*)this, evTunedIn);
break;
}
case eDVBServicePMTHandler::eventNoResources:
{
int perc = play_position * 100LL / length;
- /* only store last play position when between 5% and 95% */
- if ((5 < perc) && (perc < 95))
+ /* only store last play position when between 1% and 99% */
+ if ((1 < perc) && (perc < 99))
m_cue_entries.insert(cueEntry(play_position, 3)); /* last play position */
}
m_cuesheet_changed = 1;
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;
-
+
if (w == sCAIDs)
return resIsPyObject;
eDVBServicePMTHandler &h = m_timeshift_active ? m_service_handler_timeshift : m_service_handler;
-
+
int no_program_info = 0;
-
+
if (h.getProgramInfo(program))
no_program_info = 1;
-
+
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 -1;
+ else
+ return readMpegProc("yres", !m_is_primary);
case sVideoWidth:
- if (m_videoEventData.type != iTSMPEGDecoder::videoEvent::eventUnknown)
+ if (m_videoEventData.type == iTSMPEGDecoder::videoEvent::eventSizeChanged)
return m_videoEventData.width;
- return -1;
+ else
+ return readMpegProc("xres", !m_is_primary);
+ case sFrameRate:
+ if (m_videoEventData.type == iTSMPEGDecoder::videoEvent::eventFrameRateChanged)
+ return m_videoEventData.framerate;
+ else
+ return readMpegProc("framerate", !m_is_primary);
+ case sProgressive:
+ if (m_videoEventData.type == iTSMPEGDecoder::videoEvent::eventProgressiveChanged)
+ return m_videoEventData.progressive;
+ return readMpegProc("progressive", !m_is_primary);
#else
-#warning "FIXMEE implement sVideoHeight, sVideoWidth for old DVB API"
+#warning "FIXMEE implement sFrameRate, sProgressive, sVideoHeight, sVideoWidth for old DVB API"
#endif
case sAspect:
+ {
+ int val;
#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;
+ else if ((val=readMpegProc("aspect", !m_is_primary)) != -1)
+ return val;
else
#else
#warning "FIXMEE implement sAspect for old DVB API"
}
}
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;
}
}
- if (in != out)
+ if (in < 0)
+ in = 0;
+ if (out < 0)
+ out = 0;
+ if (in > length)
+ in = length;
+ if (out > length)
+ out = length;
+
+ if (in < out)
m_cue->addSourceSpan(in, out);
in = length;
void eDVBServicePlay::video_event(struct iTSMPEGDecoder::videoEvent event)
{
- memcpy(&m_videoEventData, &event, sizeof(iTSMPEGDecoder::videoEvent));
- m_event((iPlayableService*)this, evVideoSizeChanged);
+ memcpy(&m_videoEventData, &event, sizeof(event));
+ switch(event.type) {
+ case iTSMPEGDecoder::videoEvent::eventSizeChanged:
+ m_event((iPlayableService*)this, evVideoSizeChanged);
+ break;
+ case iTSMPEGDecoder::videoEvent::eventFrameRateChanged:
+ m_event((iPlayableService*)this, evVideoFramerateChanged);
+ break;
+ case iTSMPEGDecoder::videoEvent::eventProgressiveChanged:
+ m_event((iPlayableService*)this, evVideoProgressiveChanged);
+ break;
+ default:
+ break;
+ }
}
RESULT eDVBServicePlay::stream(ePtr<iStreamableService> &ptr)