#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
+#include <fstream>
DEFINE_REF(eDVBRegisteredFrontend);
DEFINE_REF(eDVBRegisteredDemux);
num_adapter++;
}
+ setUsbTuner();
+
int fd = open("/proc/stb/info/model", O_RDONLY);
char tmp[255];
int rd = fd >= 0 ? read(fd, tmp, 255) : 0;
}
+void eDVBResourceManager::setUsbTuner()
+{
+ std::ifstream in("/proc/bus/nim_sockets");
+ std::string line;
+
+ int res = -1;
+ int fe_idx = -1;
+ int usbtuner_idx[8] = {0};
+ int usbtuner_count = 0;
+
+ if (in.is_open())
+ {
+ while(!in.eof())
+ {
+ getline(in, line);
+ if ((res = sscanf(line.c_str(), "NIM Socket %d:", &fe_idx)) == 1)
+ continue;
+
+ if ((fe_idx != -1) && (line.find("\tName: ") == 0) && (line.find("VTUNER") != -1))
+ usbtuner_idx[usbtuner_count++] = fe_idx;
+ }
+ in.close();
+ }
+
+ if (usbtuner_count)
+ {
+ for (eSmartPtrList<eDVBRegisteredFrontend>::iterator it(m_frontend.begin()); it != m_frontend.end(); ++it)
+ {
+ int slotid = it->m_frontend->getSlotID();
+ for (int i=0; i < usbtuner_count ; i++)
+ {
+ if (slotid == usbtuner_idx[i])
+ {
+ it->m_frontend->setUSBTuner(true);
+ break;
+ }
+ }
+ }
+ for (eSmartPtrList<eDVBRegisteredFrontend>::iterator it(m_simulate_frontend.begin()); it != m_simulate_frontend.end(); ++it)
+ {
+ int slotid = it->m_frontend->getSlotID();
+ for (int i=0; i < usbtuner_count ; i++)
+ {
+ if (slotid == usbtuner_idx[i])
+ {
+ it->m_frontend->setUSBTuner(true);
+ break;
+ }
+ }
+ }
+ }
+}
+
PyObject *eDVBResourceManager::setFrontendSlotInformations(ePyObject list)
{
if (!PyList_Check(list))
return -ENOENT;
}
- m_tstools.setSource(source, streaminfo_file);
+ m_source = source;
+ m_tstools.setSource(m_source, streaminfo_file);
/* DON'T EVEN THINK ABOUT FIXING THIS. FIX THE ATI SOURCES FIRST,
THEN DO A REAL FIX HERE! */
m_pvr_thread = new eDVBChannelFilePush();
m_pvr_thread->enablePVRCommit(1);
/* If the source specifies a length, it's a file. If not, it's a stream */
- m_pvr_thread->setStreamMode(source->isStream());
+ m_pvr_thread->setStreamMode(m_source->isStream());
m_pvr_thread->setScatterGather(this);
m_event(this, evtPreStart);
- m_pvr_thread->start(source, m_pvr_fd_dst);
+ m_pvr_thread->start(m_source, m_pvr_fd_dst);
CONNECT(m_pvr_thread->m_event, eDVBChannel::pvrEvent);
m_state = state_ok;
::close(m_pvr_fd_dst);
m_pvr_fd_dst = -1;
}
- ePtr<iTsSource> d;
- m_tstools.setSource(d);
+
+ m_source = NULL;
+ m_tstools.setSource(m_source);
}
void eDVBChannel::stopFile()
} else
now = pos; /* fixup supplied */
- off_t off = 0; /* TODO: fixme */
- r = m_tstools.fixupPTS(off, now);
+ r = m_tstools.fixupPTS(m_source ? m_source->offset() : 0, now);
if (r)
{
eDebug("fixup PTS failed");