RESULT eDVBTSRecorder::start() { std::map<int,int>::iterator i(m_pids.begin()); if (m_running) return -1; if (m_target_fd == -1) return -2; if (i == m_pids.end()) return -3; char filename[128]; snprintf(filename, 128, "/dev/dvb/adapter%d/demux%d", m_demux->adapter, m_demux->demux); m_source_fd = ::open(filename, O_RDONLY | O_CLOEXEC); if (m_source_fd < 0) { eDebug("FAILED to open demux (%s) in ts recoder (%m)", filename); return -3; } setBufferSize(1024*1024); dmx_pes_filter_params flt; memset(&flt, 0, sizeof(flt)); flt.pes_type = DMX_PES_OTHER; flt.output = DMX_OUT_TSDEMUX_TAP; flt.pid = i->first; ++i; flt.input = DMX_IN_FRONTEND; flt.flags = 0; int res = ::ioctl(m_source_fd, DMX_SET_PES_FILTER, &flt); if (res) { eDebug("DMX_SET_PES_FILTER: %m"); ::close(m_source_fd); m_source_fd = -1; return -3; } ::ioctl(m_source_fd, DMX_START); if (!m_target_filename.empty()) m_thread->startSaveMetaInformation(m_target_filename); m_thread->start(m_source_fd); m_running = 1; while (i != m_pids.end()) { startPID(i->first); ++i; } return 0; }
RESULT eDVBTSRecorder::addPID(int pid) { if (m_pids.find(pid) != m_pids.end()) return -1; m_pids.insert(std::pair<int,int>(pid, -1)); if (m_running) startPID(pid); return 0; }
void carInit(car *c) { c->ornt = &orient; c->pos = &mouz; c->route = &route; c->status = 0; initMotorControl(); initSteering(); startPID(); //initHorn(); }
RESULT eDVBTSRecorder::start() { std::map<int,int>::iterator i(m_pids.begin()); if (m_running) return -1; if (m_target_fd == -1) return -2; if (i == m_pids.end()) return -3; char filename[128]; #ifndef HAVE_ADD_PID #if HAVE_DVB_API_VERSION < 3 snprintf(filename, 128, "/dev/dvb/card%d/dvr%d", m_demux->adapter, m_demux->demux); #else snprintf(filename, 128, "/dev/dvb/adapter%d/dvr%d", m_demux->adapter, m_demux->demux); #endif m_source_fd = ::open(filename, O_RDONLY); if (m_source_fd < 0) { eDebug("FAILED to open dvr (%s) in ts recoder (%m)", filename); return -3; } #else snprintf(filename, 128, "/dev/dvb/adapter%d/demux%d", m_demux->adapter, m_demux->demux); m_source_fd = ::open(filename, O_RDONLY); if (m_source_fd < 0) { eDebug("FAILED to open demux (%s) in ts recoder (%m)", filename); return -3; } setBufferSize(demuxSize); dmx_pes_filter_params flt; #if HAVE_DVB_API_VERSION > 3 flt.pes_type = DMX_PES_OTHER; flt.output = DMX_OUT_TSDEMUX_TAP; #else flt.pes_type = (dmx_pes_type_t)DMX_TAP_TS; flt.output = DMX_OUT_TAP; #endif flt.pid = i->first; ++i; flt.input = DMX_IN_FRONTEND; flt.flags = 0; int res = ::ioctl(m_source_fd, DMX_SET_PES_FILTER, &flt); if (res) { eDebug("DMX_SET_PES_FILTER: %m"); ::close(m_source_fd); m_source_fd = -1; return -3; } ::ioctl(m_source_fd, DMX_START); #endif if (!m_target_filename.empty()) m_thread->startSaveMetaInformation(m_target_filename); m_thread->start(m_source_fd, m_target_fd); m_running = 1; while (i != m_pids.end()) { startPID(i->first); ++i; } return 0; }
RESULT eDVBTSRecorder::start() { std::map<int,int>::iterator i(m_pids.begin()); if (m_running) return -1; if (m_target_fd == -1) return -2; if (i == m_pids.end()) return -3; char filename[128]; #ifndef HAVE_ADD_PID #if HAVE_DVB_API_VERSION < 3 snprintf(filename, 128, "/dev/dvb/card%d/dvr%d", m_demux->adapter, m_demux->demux); #else snprintf(filename, 128, "/dev/dvb/adapter%d/dvr%d", m_demux->adapter, m_demux->demux); #endif m_source_fd = ::open(filename, O_RDONLY); if (m_source_fd < 0) { eDebug("FAILED to open dvr (%s) in ts recoder (%m)", filename); return -3; } #if defined(__sh__) // we need to set the correct buffer size for some reason ;-) setBufferSize(256*1024); #endif #else snprintf(filename, 128, "/dev/dvb/adapter%d/demux%d", m_demux->adapter, m_demux->demux); m_source_fd = ::open(filename, O_RDONLY); if (m_source_fd < 0) { eDebug("FAILED to open demux (%s) in ts recoder (%m)", filename); return -3; } { int size = demuxSize; if (m_packetsize != 188) { size /= 188; size *= m_packetsize; } eDebug("Demux size: %d", size); setBufferSize(size); } dmx_pes_filter_params flt; #if HAVE_DVB_API_VERSION > 3 flt.pes_type = DMX_PES_OTHER; flt.output = DMX_OUT_TSDEMUX_TAP; #else flt.pes_type = (dmx_pes_type_t)DMX_TAP_TS; flt.output = DMX_OUT_TAP; #endif flt.pid = i->first; ++i; flt.input = DMX_IN_FRONTEND; flt.flags = 0; int res = ::ioctl(m_source_fd, DMX_SET_PES_FILTER, &flt); if (res) { eDebug("DMX_SET_PES_FILTER: %m"); ::close(m_source_fd); m_source_fd = -1; return -3; } ::ioctl(m_source_fd, DMX_START); #endif #ifdef HAVE_ADD_PID ///ADD PIDS before start filter while (i != m_pids.end()) { eDebug("eDVBTSRecorder::start() - calling startPID for PID=0x%04x",i->first); startPID(i->first); ++i; } #endif if (!m_target_filename.empty()) m_thread->startSaveMetaInformation(m_target_filename); m_thread->start(m_source_fd); m_running = 1; #ifndef HAVE_ADD_PID while (i != m_pids.end()) { startPID(i->first); ++i; } #endif return 0; }