#include <lib/base/eerror.h>
#include <lib/dvb/epgcache.h>
#include <lib/dvb/metaparser.h>
+#include <lib/base/httpstream.h>
#include <fcntl.h>
/* for cutlist */
DEFINE_REF(eDVBServiceRecord);
-eDVBServiceRecord::eDVBServiceRecord(const eServiceReferenceDVB &ref): m_ref(ref)
+eDVBServiceRecord::eDVBServiceRecord(const eServiceReferenceDVB &ref, bool isstreamclient):
+ m_ref(ref),m_is_stream_client(isstreamclient)
{
CONNECT(m_service_handler.serviceEvent, eDVBServiceRecord::serviceEvent);
CONNECT(m_event_handler.m_eit_changed, eDVBServiceRecord::gotNewEvent);
meta.m_name = name;
if (descr)
meta.m_description = descr;
+ if (tags)
+ meta.m_tags = tags;
ret = meta.updateMeta(filename) ? -255 : 0;
if (!ret)
{
/* allocate a ts recorder if we don't already have one. */
if (m_state == stateIdle)
{
+ bool isstreamclient = false;
m_pids_active.clear();
m_state = statePrepared;
- return m_service_handler.tune(m_ref, 0, 0, m_simulate);
+ ePtr<iTsSource> source;
+ if (!m_ref.path.empty())
+ {
+ if (m_is_stream_client)
+ {
+ isstreamclient = true;
+ eHttpStream *f = new eHttpStream();
+ f->open(m_ref.path.c_str());
+ source = ePtr<iTsSource>(f);
+ }
+ else
+ {
+ /* re-record a recording */
+ eRawFile *f = new eRawFile();
+ f->open(m_ref.path.c_str());
+ source = ePtr<iTsSource>(f);
+ }
+ }
+ else
+ {
+ m_event((iRecordableService*)this, evTuneStart);
+ }
+ return m_service_handler.tuneExt(m_ref, 0, source, m_ref.path.c_str(), 0, m_simulate, 0, isstreamclient);
}
return 0;
}
int timing_pid = -1, timing_pid_type = -1;
- eDebugNoNewLine("RECORD: have %d video stream(s)", program.videoStreams.size());
+ eDebugNoNewLine("RECORD: have %zd video stream(s)", program.videoStreams.size());
if (!program.videoStreams.empty())
{
eDebugNoNewLine(" (");
}
eDebugNoNewLine(")");
}
- eDebugNoNewLine(", and %d audio stream(s)", program.audioStreams.size());
+ eDebugNoNewLine(", and %zd audio stream(s)", program.audioStreams.size());
if (!program.audioStreams.empty())
{
eDebugNoNewLine(" (");
std::set_difference(
m_pids_active.begin(), m_pids_active.end(),
pids_to_record.begin(), pids_to_record.end(),
- std::inserter(new_pids, new_pids.begin())
+ std::inserter(obsolete_pids, obsolete_pids.begin())
);
for (std::set<int>::iterator i(new_pids.begin()); i != new_pids.end(); ++i)
eDebug("getting PCR failed!");
else
{
- static int i;
- m_event_timestamps[/* event_id*/ ++i] = p;
+ m_event_timestamps[event_id] = p;
eDebug("pcr of eit change: %llx", p);
}
}
eDebug("[eDVBServiceRecord] now running: %s (%d seconds)", event_now->getEventName().c_str(), event_now->getDuration());
m_last_event_id = event_id;
+
+ m_event((iRecordableService*)this, evNewEventInfo);
}
void eDVBServiceRecord::saveCutlist()
}
}
+
+RESULT eDVBServiceRecord::subServices(ePtr<iSubserviceList> &ptr)
+{
+ ptr = this;
+ return 0;
+}
+
+int eDVBServiceRecord::getNumberOfSubservices()
+{
+ ePtr<eServiceEvent> evt;
+ if (!m_event_handler.getEvent(evt, 0))
+ return evt->getNumOfLinkageServices();
+ return 0;
+}
+
+RESULT eDVBServiceRecord::getSubservice(eServiceReference &sub, unsigned int n)
+{
+ ePtr<eServiceEvent> evt;
+ if (!m_event_handler.getEvent(evt, 0))
+ {
+ if (!evt->getLinkageService(sub, m_ref, n))
+ return 0;
+ }
+ sub.type=eServiceReference::idInvalid;
+ return -1;
+}