X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fservice%2Fservicedvbrecord.cpp;h=4af032005a5f6f178c0b4e16451967597a5bb24b;hp=294315e9828d8b2045d16c6760ed20e035fdca65;hb=27e06ba9c8b055c20ea8c70a405deb0e4019edc5;hpb=556d6244747ea2b4b3590e682948e9f708b0a069 diff --git a/lib/service/servicedvbrecord.cpp b/lib/service/servicedvbrecord.cpp index 294315e..4af0320 100644 --- a/lib/service/servicedvbrecord.cpp +++ b/lib/service/servicedvbrecord.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include /* for cutlist */ @@ -14,7 +15,8 @@ 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); @@ -132,6 +134,8 @@ RESULT eDVBServiceRecord::prepare(const char *filename, time_t begTime, time_t e meta.m_name = name; if (descr) meta.m_description = descr; + if (tags) + meta.m_tags = tags; ret = meta.updateMeta(filename) ? -255 : 0; if (!ret) { @@ -230,9 +234,32 @@ int eDVBServiceRecord::doPrepare() /* 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 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(f); + } + else + { + /* re-record a recording */ + eRawFile *f = new eRawFile(); + f->open(m_ref.path.c_str()); + source = ePtr(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; } @@ -311,7 +338,7 @@ int eDVBServiceRecord::doRecord() 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(" ("); @@ -333,7 +360,7 @@ int eDVBServiceRecord::doRecord() } eDebugNoNewLine(")"); } - eDebugNoNewLine(", and %d audio stream(s)", program.audioStreams.size()); + eDebugNoNewLine(", and %zd audio stream(s)", program.audioStreams.size()); if (!program.audioStreams.empty()) { eDebugNoNewLine(" ("); @@ -387,7 +414,7 @@ int eDVBServiceRecord::doRecord() 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::iterator i(new_pids.begin()); i != new_pids.end(); ++i) @@ -491,8 +518,7 @@ void eDVBServiceRecord::gotNewEvent() 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); } } @@ -501,6 +527,8 @@ void eDVBServiceRecord::gotNewEvent() 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() @@ -546,3 +574,29 @@ void eDVBServiceRecord::saveCutlist() } } + +RESULT eDVBServiceRecord::subServices(ePtr &ptr) +{ + ptr = this; + return 0; +} + +int eDVBServiceRecord::getNumberOfSubservices() +{ + ePtr evt; + if (!m_event_handler.getEvent(evt, 0)) + return evt->getNumOfLinkageServices(); + return 0; +} + +RESULT eDVBServiceRecord::getSubservice(eServiceReference &sub, unsigned int n) +{ + ePtr evt; + if (!m_event_handler.getEvent(evt, 0)) + { + if (!evt->getLinkageService(sub, m_ref, n)) + return 0; + } + sub.type=eServiceReference::idInvalid; + return -1; +}