static int GetNextInputChar( prompt_slot prompt ) /***********************************************/ { int c; c = ReadNextChar( prompt ); /* Redirect input to a response file; cannot be nested. */ if( c == '@' && !is_quoting ) { if( CmdFile->how == COMMANDLINE || CmdFile->how == INTERACTIVE ) { char fname[LINE_BUF_SIZE]; int oi; for( oi = 0; oi < sizeof( fname ) - 1; ) { c = ReadNextChar( prompt ); if( c == '"' ) is_quoting ^= true; /* Quit loop if not a valid filename character. */ if( (!is_quoting && (c == ',' || c == '+' || c == ';' || c == ' ')) || c == '/' || c < ' ' ) break; if( c != '"' ) { fname[oi++] = c; } } fname[oi] = '\0'; if( c > ' ' ) --CmdFile->current; /* Open the response file and read next character. */ StartNewFile( fname ); c = ReadNextChar( prompt ); } } return( c ); }
static void ProcInclude ( void ) /******************************/ { if( MakeToken( SEP_QUOTE, true ) || MakeToken( SEP_NO, true ) ) { StartNewFile( ToString() ); ParseDefFile(); } else { Warning( "invalid include statement", OPTION_SLOT ); } }
static void ProcessDefFile( void ) /********************************/ { cmdentry * cmd; if( Commands[ DEF_SLOT ] == NULL ) { return; } HaveDefFile = 1; cmd = Commands[ DEF_SLOT ]; StartNewFile( FileName( cmd->command, strlen( cmd->command ), E_DEF, false )); ParseDefFile(); }
void ASIRecorder::run(void) { if (!Open()) { _error = "Failed to open device"; LOG(VB_GENERAL, LOG_ERR, LOC + _error); return; } if (!_stream_data) { _error = "MPEGStreamData pointer has not been set"; LOG(VB_GENERAL, LOG_ERR, LOC + _error); Close(); return; } { QMutexLocker locker(&pauseLock); request_recording = true; recording = true; recordingWait.wakeAll(); } if (m_channel->HasGeneratedPAT()) { const ProgramAssociationTable *pat = m_channel->GetGeneratedPAT(); const ProgramMapTable *pmt = m_channel->GetGeneratedPMT(); _stream_data->Reset(pat->ProgramNumber(0)); _stream_data->HandleTables(MPEG_PAT_PID, *pat); _stream_data->HandleTables(pat->ProgramPID(0), *pmt); } // Listen for time table on DVB standard streams if (m_channel && (m_channel->GetSIStandard() == "dvb")) _stream_data->AddListeningPID(DVB_TDT_PID); StartNewFile(); _stream_data->AddAVListener(this); _stream_data->AddWritingListener(this); m_stream_handler->AddListener( _stream_data, false, true, (_record_mpts) ? ringBuffer->GetFilename() : QString()); while (IsRecordingRequested() && !IsErrored()) { if (PauseAndWait()) continue; { // sleep 100 milliseconds unless StopRecording() or Unpause() // is called, just to avoid running this too often. QMutexLocker locker(&pauseLock); if (!request_recording || request_pause) continue; unpauseWait.wait(&pauseLock, 100); } if (!_input_pmt) { LOG(VB_GENERAL, LOG_WARNING, LOC + "Recording will not commence until a PMT is set."); usleep(5000); continue; } if (!m_stream_handler->IsRunning()) { _error = "Stream handler died unexpectedly."; LOG(VB_GENERAL, LOG_ERR, LOC + _error); } } m_stream_handler->RemoveListener(_stream_data); _stream_data->RemoveWritingListener(this); _stream_data->RemoveAVListener(this); Close(); FinishRecording(); QMutexLocker locker(&pauseLock); recording = false; recordingWait.wakeAll(); }
void V4L2encRecorder::run(void) { LOG(VB_RECORD, LOG_INFO, LOC + "run() -- begin"); bool failing, failed; bool is_TS = false; if (!m_stream_data) { m_error = "MPEGStreamData pointer has not been set"; LOG(VB_GENERAL, LOG_ERR, LOC + "run() -- " + m_error); Close(); return; } m_stream_handler->Configure(); { QMutexLocker locker(&m_pauseLock); m_request_recording = true; m_recording = true; m_recordingWait.wakeAll(); } if (m_channel->HasGeneratedPAT()) { const ProgramAssociationTable *pat = m_channel->GetGeneratedPAT(); const ProgramMapTable *pmt = m_channel->GetGeneratedPMT(); m_stream_data->Reset(pat->ProgramNumber(0)); m_stream_data->HandleTables(MPEG_PAT_PID, *pat); m_stream_data->HandleTables(pat->ProgramPID(0), *pmt); LOG(VB_GENERAL, LOG_INFO, LOC + "PMT set"); // debugging } StartNewFile(); is_TS = (m_stream_handler->GetStreamType() == V4L2_MPEG_STREAM_TYPE_MPEG2_TS); if (is_TS) { LOG(VB_RECORD, LOG_INFO, LOC + "mpeg2ts"); m_stream_data->AddAVListener(this); m_stream_data->AddWritingListener(this); } else { LOG(VB_RECORD, LOG_INFO, LOC + "program stream (non mpeg2ts)"); m_stream_data->AddPSStreamListener(this); } m_stream_handler->AddListener(m_stream_data, false, true); StartEncoding(); while (IsRecordingRequested() && !IsErrored()) { if (PauseAndWait()) continue; if (is_TS && !m_input_pmt) { LOG(VB_GENERAL, LOG_WARNING, LOC + "Recording will not commence until a PMT is set."); std::this_thread::sleep_for(std::chrono::milliseconds(5)); continue; } if (!m_stream_handler->Status(failed, failing)) { if (failed) { m_error = "Stream handler died unexpectedly."; LOG(VB_GENERAL, LOG_ERR, LOC + "run() -- " + m_error); } else if (failing) { SetRecordingStatus(RecStatus::Failing, __FILE__, __LINE__); } } } LOG(VB_RECORD, LOG_INFO, LOC + "Shutting down"); StopEncoding(); m_stream_handler->RemoveListener(m_stream_data); if (m_stream_handler->GetStreamType() == V4L2_MPEG_STREAM_TYPE_MPEG2_TS) { m_stream_data->RemoveWritingListener(this); m_stream_data->RemoveAVListener(this); } else m_stream_data->RemovePSStreamListener(this); Close(); FinishRecording(); QMutexLocker locker(&m_pauseLock); m_recording = false; m_recordingWait.wakeAll(); LOG(VB_RECORD, LOG_INFO, LOC + "run() -- end"); }
void HDHRRecorder::run(void) { LOG(VB_RECORD, LOG_INFO, LOC + "run -- begin"); /* Create video socket. */ if (!Open()) { _error = "Failed to open HDHRRecorder device"; LOG(VB_GENERAL, LOG_ERR, LOC + _error); return; } { QMutexLocker locker(&pauseLock); request_recording = true; recording = true; recordingWait.wakeAll(); } StartNewFile(); _stream_data->AddAVListener(this); _stream_data->AddWritingListener(this); _stream_handler->AddListener(_stream_data); while (IsRecordingRequested() && !IsErrored()) { if (PauseAndWait()) continue; if (!IsRecordingRequested()) break; { // sleep 100 milliseconds unless StopRecording() or Unpause() // is called, just to avoid running this too often. QMutexLocker locker(&pauseLock); if (!request_recording || request_pause) continue; unpauseWait.wait(&pauseLock, 100); } if (!_input_pmt) { LOG(VB_GENERAL, LOG_WARNING, LOC + "Recording will not commence until a PMT is set."); usleep(5000); continue; } if (!_stream_handler->IsRunning()) { _error = "Stream handler died unexpectedly."; LOG(VB_GENERAL, LOG_ERR, LOC + _error); } } LOG(VB_RECORD, LOG_INFO, LOC + "run -- ending..."); _stream_handler->RemoveListener(_stream_data); _stream_data->RemoveWritingListener(this); _stream_data->RemoveAVListener(this); Close(); FinishRecording(); QMutexLocker locker(&pauseLock); recording = false; recordingWait.wakeAll(); LOG(VB_RECORD, LOG_INFO, LOC + "run -- end"); }
void DVBRecorder::run(void) { if (!Open()) { _error = "Failed to open DVB device"; LOG(VB_GENERAL, LOG_ERR, LOC + _error); return; } { QMutexLocker locker(&pauseLock); request_recording = true; recording = true; recordingWait.wakeAll(); } // Listen for time table on DVB standard streams if (_channel && (_channel->GetSIStandard() == "dvb")) _stream_data->AddListeningPID(DVB_TDT_PID); StartNewFile(); _stream_data->AddAVListener(this); _stream_data->AddWritingListener(this); _stream_handler->AddListener(_stream_data, false, true); while (IsRecordingRequested() && !IsErrored()) { if (PauseAndWait()) continue; { // sleep 100 milliseconds unless StopRecording() or Unpause() // is called, just to avoid running this too often. QMutexLocker locker(&pauseLock); if (!request_recording || request_pause) continue; unpauseWait.wait(&pauseLock, 100); } if (!_input_pmt) { LOG(VB_GENERAL, LOG_WARNING, LOC + "Recording will not commence until a PMT is set."); usleep(5000); continue; } if (!_stream_handler->IsRunning()) { _error = "Stream handler died unexpectedly."; LOG(VB_GENERAL, LOG_ERR, LOC + _error); } } _stream_handler->RemoveListener(_stream_data); _stream_data->RemoveWritingListener(this); _stream_data->RemoveAVListener(this); Close(); FinishRecording(); QMutexLocker locker(&pauseLock); recording = false; recordingWait.wakeAll(); }