X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/d7010ab56f9b823d56a5a5fa3ba7f7764bbfece4..d030fb234d74f1375bd318379ec5d2f643344839:/lib/service/servicedvbrecord.cpp diff --git a/lib/service/servicedvbrecord.cpp b/lib/service/servicedvbrecord.cpp index f4bf5577..bded7cc9 100644 --- a/lib/service/servicedvbrecord.cpp +++ b/lib/service/servicedvbrecord.cpp @@ -102,9 +102,13 @@ int eDVBServiceRecord::doRecord() int fd = ::open(m_filename.c_str(), O_WRONLY|O_CREAT|O_LARGEFILE, 0644); if (fd == -1) { - eDebug("eDVBServiceRecord - can't open hardcoded recording file!"); + eDebug("eDVBServiceRecord - can't open recording file!"); return -1; } + + /* turn off kernel caching strategies */ + posix_fadvise(fd, 0, 0, POSIX_FADV_RANDOM); + ePtr demux; if (m_service_handler.getDataDemux(demux)) { @@ -118,6 +122,7 @@ int eDVBServiceRecord::doRecord() return -3; } m_record->setTargetFD(fd); + m_record->setTargetFilename(m_filename.c_str()); } eDebug("starting recording.."); @@ -133,6 +138,8 @@ int eDVBServiceRecord::doRecord() if (program.pmtPid != -1) pids_to_record.insert(program.pmtPid); // PMT + int timing_pid = -1; + eDebugNoNewLine("RECORD: have %d video stream(s)", program.videoStreams.size()); if (!program.videoStreams.empty()) { @@ -142,6 +149,10 @@ int eDVBServiceRecord::doRecord() i != program.videoStreams.end(); ++i) { pids_to_record.insert(i->pid); + + if (timing_pid == -1) + timing_pid = i->pid; + if (i != program.videoStreams.begin()) eDebugNoNewLine(", "); eDebugNoNewLine("%04x", i->pid); @@ -157,6 +168,10 @@ int eDVBServiceRecord::doRecord() i != program.audioStreams.end(); ++i) { pids_to_record.insert(i->pid); + + if (timing_pid == -1) + timing_pid = i->pid; + if (i != program.audioStreams.begin()) eDebugNoNewLine(", "); eDebugNoNewLine("%04x", i->pid); @@ -194,6 +209,9 @@ int eDVBServiceRecord::doRecord() m_record->removePID(*i); } + if (timing_pid != -1) + m_record->setTimingPID(timing_pid); + m_pids_active = pids_to_record; if (m_state != stateRecording)