{
m_have_cached_program = false;
serviceEvent(eventNewProgramInfo);
+ mDemuxId = m_decode_demux_num;
if (!m_pvr_channel) // don't send campmt to camd.socket for playbacked services
{
eEPGCache::getInstance()->PMTready(this);
int fd = 0, rc = 0;
char fileName[255] = {0};
sprintf(fileName, "/tmp/ait.%d", orgid);
+
+ if (data[6] > 0) {
+ eDebug("section_number %d > 0", data[6]);
+ data[6] = 0;
+ }
+ if (data[7] > data[6]) {
+ eDebug("last_section_number %d > section_number %d", data[7], data[6]);
+ data[7] = data[6];
+ }
+
if((fd = open(fileName, O_RDWR|O_CREAT|O_TRUNC)) < 0)
{
eDebug("Fail to save a AIT Data.");
close(fd);
}
+#include <dvbsi++/application_profile.h>
+#include <dvbsi++/application_descriptor.h>
+#include <dvbsi++/simple_application_boundary_descriptor.h>
+#define PACK_VERSION(major,minor,micro) (((major) << 16) + ((minor) << 8) + (micro))
+#define UNPACK_VERSION(version,major,minor,micro) { \
+ major = (version)&0xff; \
+ minor = (version>>8)&0xff; \
+ micro = (version>>16)&0xff; \
+}
void eDVBServicePMTHandler::AITready(int error)
{
eDebug("AITready");
ePtr<eTable<ApplicationInformationSection> > ptr;
if (!m_AIT.getCurrent(ptr))
{
- int orgid = 0, appid = 0;
+ short profilecode = 0;
+ int orgid = 0, appid = 0, profileVersion = 0;
m_ApplicationName = m_HBBTVUrl = "";
eraseHbbTVApplications(&m_HbbTVApplications);
- memcpy(m_AITData, ptr->getBufferData(), 4096);
-
int sectionLength = 0;
for (std::vector<ApplicationInformationSection*>::const_iterator it = ptr->getSections().begin(); it != ptr->getSections().end(); ++it)
{
std::list<ApplicationInformation *>::const_iterator i = (*it)->getApplicationInformation()->begin();
- sectionLength += (*it)->getSectionLength();
+ memcpy(m_AITData, ptr->getBufferData(), 4096);
+ sectionLength = (*it)->getSectionLength() + 3;
eDebug("Section Length : %d, Total Section Length : %d", (*it)->getSectionLength(), sectionLength);
for (; i != (*it)->getApplicationInformation()->end(); ++i)
{
std::string hbbtvUrl = "", applicaionName = "";
-
+ std::string boundaryExtension = "";
+
int controlCode = (*i)->getApplicationControlCode();
ApplicationIdentifier * applicationIdentifier = (*i)->getApplicationIdentifier();
+ profilecode = 0;
orgid = applicationIdentifier->getOrganisationId();
appid = applicationIdentifier->getApplicationId();
eDebug("found applicaions ids >> pid : %x, orgid : %d, appid : %d", m_ait_pid, orgid, appid);
+ if (controlCode == 1)
+ saveData(orgid, m_AITData, sectionLength);
if (controlCode == 1 || controlCode == 2) /* 1:AUTOSTART, 2:ETC */
{
for (DescriptorConstIterator desc = (*i)->getDescriptors()->begin();
switch ((*desc)->getTag())
{
case APPLICATION_DESCRIPTOR:
+ {
+ ApplicationDescriptor* applicationDescriptor = (ApplicationDescriptor*)(*desc);
+ ApplicationProfileList* applicationProfiles = applicationDescriptor->getApplicationProfiles();
+ ApplicationProfileConstIterator interactionit = applicationProfiles->begin();
+ for(; interactionit != applicationProfiles->end(); ++interactionit)
+ {
+ profilecode = (*interactionit)->getApplicationProfile();
+ profileVersion = PACK_VERSION(
+ (*interactionit)->getVersionMajor(),
+ (*interactionit)->getVersionMinor(),
+ (*interactionit)->getVersionMicro()
+ );
+ }
break;
+ }
case APPLICATION_NAME_DESCRIPTOR:
{
ApplicationNameDescriptor *nameDescriptor = (ApplicationNameDescriptor*)(*desc);
for(; interactionit != transport->getInteractionTransports()->end(); ++interactionit)
{
hbbtvUrl = (*interactionit)->getUrlBase()->getUrl();
- if(controlCode == 1) m_HBBTVUrl = hbbtvUrl;
break;
}
break;
}
}
}
- m_HbbTVApplications.push_back(new HbbTVApplicationInfo(controlCode, orgid, appid, hbbtvUrl, applicaionName));
+ if(!hbbtvUrl.empty())
+ {
+ char* uu = hbbtvUrl.c_str();
+ if(!strncmp(uu, "http://", 7) || !strncmp(uu, "dvb://", 6) || !strncmp(uu, "https://", 8))
+ {
+ if(controlCode == 1) m_HBBTVUrl = hbbtvUrl;
+ switch(profileVersion)
+ {
+ case 65793:
+ case 66049:
+ m_HbbTVApplications.push_back(new HbbTVApplicationInfo(controlCode, orgid, appid, hbbtvUrl, applicaionName, profilecode));
+ break;
+ case 1280:
+ case 65538:
+ default:
+ m_HbbTVApplications.push_back(new HbbTVApplicationInfo((-1)*controlCode, orgid, appid, hbbtvUrl, applicaionName, profilecode));
+ break;
+ }
+ }
+ else if (!boundaryExtension.empty()) {
+ if(boundaryExtension.at(boundaryExtension.length()-1) != '/') {
+ boundaryExtension += "/";
+ }
+ boundaryExtension += hbbtvUrl;
+ if(controlCode == 1) m_HBBTVUrl = boundaryExtension;
+ switch(profileVersion)
+ {
+ case 65793:
+ case 66049:
+ m_HbbTVApplications.push_back(new HbbTVApplicationInfo(controlCode, orgid, appid, boundaryExtension, applicaionName, profilecode));
+ break;
+ case 1280:
+ case 65538:
+ default:
+ m_HbbTVApplications.push_back(new HbbTVApplicationInfo((-1)*controlCode, orgid, appid, boundaryExtension, applicaionName, profilecode));
+ break;
+ }
+ }
+ }
}
}
if (m_HbbTVApplications.size())
{
- saveData(orgid, m_AITData, sectionLength);//4096);
for(HbbTVApplicationInfoListConstIterator infoiter = m_HbbTVApplications.begin() ; infoiter != m_HbbTVApplications.end() ; ++infoiter)
+ {
+ char fileName[255] = {0};
+ sprintf(fileName, "/tmp/ait.%d", (*infoiter)->m_OrgId);
+ if (access(fileName, 0) < 0)
+ saveData((*infoiter)->m_OrgId, m_AITData, sectionLength);
eDebug("Found : control[%d], name[%s], url[%s]",
(*infoiter)->m_ControlCode, (*infoiter)->m_ApplicationName.c_str(), (*infoiter)->m_HbbTVUrl.c_str());
+ }
serviceEvent(eventHBBTVInfo);
}
else eDebug("No found anything.");
{
for(HbbTVApplicationInfoListConstIterator infoiter = m_HbbTVApplications.begin() ; infoiter != m_HbbTVApplications.end() ; ++infoiter)
{
- ePyObject tuple = PyTuple_New(5);
+ ePyObject tuple = PyTuple_New(6);
PyTuple_SET_ITEM(tuple, 0, PyInt_FromLong((*infoiter)->m_ControlCode));
PyTuple_SET_ITEM(tuple, 1, PyString_FromString((*infoiter)->m_ApplicationName.c_str()));
PyTuple_SET_ITEM(tuple, 2, PyString_FromString((*infoiter)->m_HbbTVUrl.c_str()));
PyTuple_SET_ITEM(tuple, 3, PyInt_FromLong((*infoiter)->m_OrgId));
PyTuple_SET_ITEM(tuple, 4, PyInt_FromLong((*infoiter)->m_AppId));
+ PyTuple_SET_ITEM(tuple, 5, PyInt_FromLong((*infoiter)->m_ProfileCode));
PyList_Append(ret, tuple);
Py_DECREF(tuple);
}