{
if (errno == EINTR)
continue;
+ eDebug("eFilePushThread WRITE ERROR");
+ sendEvent(evtWriteError);
break;
// ... we would stop the thread
}
m_running = 0;
m_target_fd = -1;
m_thread = new eDVBRecordFileThread();
+ CONNECT(m_thread->m_event, eDVBTSRecorder::filepushEvent);
#ifndef HAVE_ADD_PID
m_demux->m_dvr_busy = 1;
#endif
#endif
m_pids[pid] = -1;
}
+
+void eDVBTSRecorder::filepushEvent(int event)
+{
+ switch (event)
+ {
+ case eFilePushThread::evtWriteError:
+ m_event(eventWriteError);
+ break;
+ }
+}
void stopPID(int pid);
eDVBRecordFileThread *m_thread;
+ void filepushEvent(int event);
std::map<int,int> m_pids;
Signal1<void,int> m_event;
evRecordRunning,
evRecordStopped,
evNewProgramInfo,
- evRecordFailed
- /*evDiskFull*/
+ evRecordFailed,
+ evRecordWriteError
};
enum {
NoError=0,
}
m_record->setTargetFD(fd);
m_record->setTargetFilename(m_filename.c_str());
+ m_record->connectEvent(slot(*this, &eDVBServiceRecord::recordEvent), m_con_record_event);
+
m_target_fd = fd;
}
return r;
}
+void eDVBServiceRecord::recordEvent(int event)
+{
+ switch (event)
+ {
+ case iDVBTSRecorder::eventWriteError:
+ eWarning("[eDVBServiceRecord] record write error");
+ stop();
+ m_event((iRecordableService*)this, evRecordWriteError);
+ return;
+ default:
+ eDebug("unhandled record event %d", event);
+ }
+}
eServiceReferenceDVB m_ref;
ePtr<iDVBTSRecorder> m_record;
+ ePtr<eConnection> m_con_record_event;
int m_recording, m_tuned, m_error;
std::set<int> m_pids_active;
/* events */
void serviceEvent(int event);
Signal2<void,iRecordableService*,int> m_event;
+
+ /* recorder events */
+ void recordEvent(int event);
};
#endif