X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/17b07b8ab4f698dfbef69fcf77b8f8d86c440f39..a39683740f78cc2463900d1ba73f7d7e2c69d807:/lib/service/servicedvbrecord.cpp diff --git a/lib/service/servicedvbrecord.cpp b/lib/service/servicedvbrecord.cpp index 10ab8ae7..5b4f35ed 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)) { @@ -133,6 +137,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 +148,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,16 +167,23 @@ 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); } eDebugNoNewLine(")"); } - eDebug(", and the pcr pid is %04x", program.pcrPid); + eDebugNoNewLine(", and the pcr pid is %04x", program.pcrPid); if (program.pcrPid != 0x1fff) pids_to_record.insert(program.pcrPid); - + eDebug(", and the text pid is %04x", program.textPid); + if (program.textPid != -1) + pids_to_record.insert(program.textPid); // Videotext + /* find out which pids are NEW and which pids are obsolete.. */ std::set new_pids, obsolete_pids; @@ -191,6 +208,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)