void Mixer::setAudioDevice( AudioDevice * _dev, const struct qualitySettings & _qs, bool _needs_fifo ) { // don't delete the audio-device stopProcessing(); m_qualitySettings = _qs; m_oldAudioDev = m_audioDev; if( _dev == NULL ) { printf( "param _dev == NULL in Mixer::setAudioDevice(...). " "Trying any working audio-device\n" ); m_audioDev = tryAudioDevices(); } else { m_audioDev = _dev; } emit qualitySettingsChanged(); emit sampleRateChanged(); startProcessing( _needs_fifo ); }
AudioSndio::~AudioSndio() { stopProcessing(); if (m_hdl != NULL) { sio_close( m_hdl ); m_hdl = NULL; } }
AudioSdl::~AudioSdl() { stopProcessing(); SDL_CloseAudio(); SDL_Quit(); delete[] m_convertedBuf; delete[] m_outBuf; }
WorkCrew::~WorkCrew() { stopProcessing(); #ifdef LS_WORKCREW_LF ls_lfqueue_delete(m_pJobQueue); #else delete m_pJobQueue; #endif }
void onWaitUpdatePCBAndCPU(t_pcb* nuevo, t_nodo_proceso_ejecutando* procesoEjecutando, t_semaforo* semaforo) { procesoEjecutando->proceso.pcb = *nuevo; debugTrackPCP("Process %d is waiting on semaphore %s", nuevo->pid, semaforo->nombre); log_info(log_kernel, "Updating PCB, process %d is waiting on semaphore %s", nuevo->pid, semaforo->nombre); stopProcessing(procesoEjecutando); }
AudioSdl::~AudioSdl() { stopProcessing(); m_stopSemaphore.release(); SDL_CloseAudio(); SDL_Quit(); delete[] m_convertedBuf; delete[] m_outBuf; }
AudioPortAudio::~AudioPortAudio() { stopProcessing(); m_stopSemaphore.release(); if( !m_wasPAInitError ) { Pa_Terminate(); } delete[] m_outBuf; }
void Mixer::setAudioOutputContext( AudioOutputContext * context ) { stopProcessing(); m_audioOutputContext = context; //m_audioDev->applyQualitySettings(); emit sampleRateChanged(); startProcessing(); }
void Mixer::changeQuality( const struct qualitySettings & _qs ) { // don't delete the audio-device stopProcessing(); m_qualitySettings = _qs; m_audioDev->applyQualitySettings(); emit sampleRateChanged(); emit qualitySettingsChanged(); startProcessing(); }
void Mixer::restoreAudioDevice() { if( m_oldAudioDev != NULL ) { stopProcessing(); delete m_audioDev; m_audioDev = m_oldAudioDev; emit sampleRateChanged(); m_oldAudioDev = NULL; startProcessing(); } }
void cpuFinishesQuantum(t_nodo_proceso_ejecutando* procesoEjecutando, struct pollfd** socketsCPU, int* cantSocketsCpu, t_datosEnviar* paquete) { t_pcb* tmp = unserializePCB(paquete->data); debugTrackPCP( "Process just finished a quantum in CPU %d, updating PCB and removing the process from the executing list.", procesoEjecutando->cpu.pid); debugTrackPCP("Checksum PCB: PID %d \n CODE SEGMENT %d \n CODE INDEX %d \n STACK SEGMENT %d \n STACK CONTEXT SIZE %d\n ETIQUETAS SIZE %d\n" ,tmp->pid,tmp->codeSegment,tmp->codeIndex,tmp->currentStack.base,tmp->currentStack.contextSize,tmp->tamanioIndiceEtiquetas); procesoEjecutando->proceso.pcb = *tmp; stopProcessing(procesoEjecutando); addToReadyQueue(&(procesoEjecutando->proceso)); free(procesoEjecutando); free(tmp); }
void inOut(t_nodo_proceso_ejecutando* procesoEjecutando, struct pollfd** socketsCPU, int* cantSocketsCpu, t_datosEnviar* paquete) { t_pcb* pcb = unserializePCB(paquete->data); t_io* datos = unserializeIO(paquete->data + (sizeof *pcb), paquete->data_size - (sizeof *pcb)); procesoEjecutando->proceso.pcb = *pcb; stopProcessing(procesoEjecutando); debugTrackPCP("Process requested I/O, executing I/O Handler..."); log_info(log_kernel, "Process requested I/O, executing Handler..."); doInOut(procesoEjecutando, datos); free(procesoEjecutando); free(datos); free(pcb); }
AudioAlsa::~AudioAlsa() { stopProcessing(); if( m_handle != NULL ) { snd_pcm_close( m_handle ); } if( m_hwParams != NULL ) { snd_pcm_hw_params_free( m_hwParams ); } if( m_swParams != NULL ) { snd_pcm_sw_params_free( m_swParams ); } }
void Mixer::setAudioDevice( AudioDevice * _dev ) { stopProcessing(); m_oldAudioDev = m_audioDev; if( _dev == NULL ) { printf( "param _dev == NULL in Mixer::setAudioDevice(...). " "Trying any working audio-device\n" ); m_audioDev = tryAudioDevices(); } else { m_audioDev = _dev; } emit sampleRateChanged(); startProcessing(); }
uint32_t TransfersConsumer::onNewBlocks(const CompleteBlock* blocks, uint32_t startHeight, uint32_t count) { assert(blocks); assert(count > 0); struct Tx { TransactionBlockInfo blockInfo; const ITransactionReader* tx; bool isLastTransactionInBlock; }; struct PreprocessedTx : Tx, PreprocessInfo {}; std::vector<PreprocessedTx> preprocessedTransactions; std::mutex preprocessedTransactionsMutex; size_t workers = std::thread::hardware_concurrency(); if (workers == 0) { workers = 2; } BlockingQueue<Tx> inputQueue(workers * 2); std::atomic<bool> stopProcessing(false); std::atomic<size_t> emptyBlockCount(0); auto pushingThread = std::async(std::launch::async, [&] { for( uint32_t i = 0; i < count && !stopProcessing; ++i) { const auto& block = blocks[i].block; if (!block.is_initialized()) { ++emptyBlockCount; continue; } // filter by syncStartTimestamp if (m_syncStart.timestamp && block->timestamp < m_syncStart.timestamp) { ++emptyBlockCount; continue; } TransactionBlockInfo blockInfo; blockInfo.height = startHeight + i; blockInfo.timestamp = block->timestamp; blockInfo.transactionIndex = 0; // position in block for (const auto& tx : blocks[i].transactions) { auto pubKey = tx->getTransactionPublicKey(); if (pubKey == NULL_PUBLIC_KEY) { ++blockInfo.transactionIndex; continue; } bool isLastTransactionInBlock = blockInfo.transactionIndex + 1 == blocks[i].transactions.size(); Tx item = { blockInfo, tx.get(), isLastTransactionInBlock }; inputQueue.push(item); ++blockInfo.transactionIndex; } } inputQueue.close(); }); auto processingFunction = [&] { Tx item; std::error_code ec; while (!stopProcessing && inputQueue.pop(item)) { PreprocessedTx output; static_cast<Tx&>(output) = item; ec = preprocessOutputs(item.blockInfo, *item.tx, output); if (ec) { stopProcessing = true; break; } std::lock_guard<std::mutex> lk(preprocessedTransactionsMutex); preprocessedTransactions.push_back(std::move(output)); } return ec; }; std::vector<std::future<std::error_code>> processingThreads; for (size_t i = 0; i < workers; ++i) { processingThreads.push_back(std::async(std::launch::async, processingFunction)); } std::error_code processingError; for (auto& f : processingThreads) { try { std::error_code ec = f.get(); if (!processingError && ec) { processingError = ec; } } catch (const std::system_error& e) { processingError = e.code(); } catch (const std::exception&) { processingError = std::make_error_code(std::errc::operation_canceled); } } if (processingError) { forEachSubscription([&](TransfersSubscription& sub) { sub.onError(processingError, startHeight); }); return 0; } std::vector<Crypto::Hash> blockHashes = getBlockHashes(blocks, count); m_observerManager.notify(&IBlockchainConsumerObserver::onBlocksAdded, this, blockHashes); // sort by block height and transaction index in block std::sort(preprocessedTransactions.begin(), preprocessedTransactions.end(), [](const PreprocessedTx& a, const PreprocessedTx& b) { return std::tie(a.blockInfo.height, a.blockInfo.transactionIndex) < std::tie(b.blockInfo.height, b.blockInfo.transactionIndex); }); uint32_t processedBlockCount = emptyBlockCount; try { for (const auto& tx : preprocessedTransactions) { processTransaction(tx.blockInfo, *tx.tx, tx); if (tx.isLastTransactionInBlock) { ++processedBlockCount; m_logger(TRACE) << "Processed block " << processedBlockCount << " of " << count << ", last processed block index " << tx.blockInfo.height << ", hash " << blocks[processedBlockCount - 1].blockHash; auto newHeight = startHeight + processedBlockCount - 1; forEachSubscription([newHeight](TransfersSubscription& sub) { sub.advanceHeight(newHeight); }); } } } catch (const MarkTransactionConfirmedException& e) { m_logger(ERROR, BRIGHT_RED) << "Failed to process block transactions: failed to confirm transaction " << e.getTxHash() << ", remove this transaction from all containers and transaction pool"; forEachSubscription([&e](TransfersSubscription& sub) { sub.deleteUnconfirmedTransaction(e.getTxHash()); }); m_poolTxs.erase(e.getTxHash()); } catch (std::exception& e) { m_logger(ERROR, BRIGHT_RED) << "Failed to process block transactions, exception: " << e.what(); } catch (...) { m_logger(ERROR, BRIGHT_RED) << "Failed to process block transactions, unknown exception"; } if (processedBlockCount < count) { uint32_t detachIndex = startHeight + processedBlockCount; m_logger(ERROR, BRIGHT_RED) << "Not all block transactions are processed, fully processed block count: " << processedBlockCount << " of " << count << ", last processed block hash " << (processedBlockCount > 0 ? blocks[processedBlockCount - 1].blockHash : NULL_HASH) << ", detach block index " << detachIndex << " to remove partially processed block"; forEachSubscription([detachIndex](TransfersSubscription& sub) { sub.onBlockchainDetach(detachIndex); }); } return processedBlockCount; }
void DomainToolBar::changeAutoReloadState(bool state) { if ( state ) enableAutoReload(); else stopProcessing(); }
// Camera ownership transferred MainWindow::MainWindow(Camera * camera, QWidget * parent) : QMainWindow(parent), camera_(camera), likelihoodCurve_(0), lowestRefreshRate_(99), objectsModified_(false) { ui_ = new Ui_mainWindow(); ui_->setupUi(this); aboutDialog_ = new AboutDialog(this); this->setStatusBar(new QStatusBar()); likelihoodCurve_ = new rtabmap::PdfPlotCurve("Likelihood", &imagesMap_, this); ui_->likelihoodPlot->addCurve(likelihoodCurve_, false); ui_->likelihoodPlot->setGraphicsView(true); if(!camera_) { camera_ = new Camera(this); } else { camera_->setParent(this); } ui_->dockWidget_parameters->setVisible(false); ui_->dockWidget_plot->setVisible(false); ui_->widget_controls->setVisible(false); QByteArray geometry; QByteArray state; Settings::loadSettings(Settings::iniDefaultPath(), &geometry, &state); this->restoreGeometry(geometry); this->restoreState(state); ui_->toolBox->setupUi(); connect((QDoubleSpinBox*)ui_->toolBox->getParameterWidget(Settings::kCamera_4imageRate()), SIGNAL(editingFinished()), camera_, SLOT(updateImageRate())); ui_->menuView->addAction(ui_->dockWidget_parameters->toggleViewAction()); ui_->menuView->addAction(ui_->dockWidget_objects->toggleViewAction()); ui_->menuView->addAction(ui_->dockWidget_plot->toggleViewAction()); connect(ui_->toolBox, SIGNAL(parametersChanged(const QStringList &)), this, SLOT(notifyParametersChanged(const QStringList &))); ui_->imageView_source->setGraphicsViewMode(false); ui_->imageView_source->setTextLabel(tr("Press \"space\" to start the camera...")); ui_->imageView_source->setMirrorView(Settings::getGeneral_mirrorView()); connect((QCheckBox*)ui_->toolBox->getParameterWidget(Settings::kGeneral_mirrorView()), SIGNAL(stateChanged(int)), this, SLOT(updateMirrorView())); ui_->widget_controls->setVisible(Settings::getGeneral_controlsShown()); connect((QCheckBox*)ui_->toolBox->getParameterWidget(Settings::kGeneral_controlsShown()), SIGNAL(stateChanged(int)), this, SLOT(showHideControls())); //buttons connect(ui_->pushButton_restoreDefaults, SIGNAL(clicked()), ui_->toolBox, SLOT(resetCurrentPage())); connect(ui_->pushButton_updateObjects, SIGNAL(clicked()), this, SLOT(updateObjects())); connect(ui_->horizontalSlider_objectsSize, SIGNAL(valueChanged(int)), this, SLOT(updateObjectsSize())); ui_->actionStop_camera->setEnabled(false); ui_->actionPause_camera->setEnabled(false); ui_->actionSave_objects->setEnabled(false); // Actions connect(ui_->actionAdd_object_from_scene, SIGNAL(triggered()), this, SLOT(addObjectFromScene())); connect(ui_->actionAdd_objects_from_files, SIGNAL(triggered()), this, SLOT(addObjectsFromFiles())); connect(ui_->actionLoad_scene_from_file, SIGNAL(triggered()), this, SLOT(loadSceneFromFile())); connect(ui_->actionStart_camera, SIGNAL(triggered()), this, SLOT(startProcessing())); connect(ui_->actionStop_camera, SIGNAL(triggered()), this, SLOT(stopProcessing())); connect(ui_->actionPause_camera, SIGNAL(triggered()), this, SLOT(pauseProcessing())); connect(ui_->actionExit, SIGNAL(triggered()), this, SLOT(close())); connect(ui_->actionSave_objects, SIGNAL(triggered()), this, SLOT(saveObjects())); connect(ui_->actionLoad_objects, SIGNAL(triggered()), this, SLOT(loadObjects())); connect(ui_->actionCamera_from_video_file, SIGNAL(triggered()), this, SLOT(setupCameraFromVideoFile())); connect(ui_->actionCamera_from_directory_of_images, SIGNAL(triggered()), this, SLOT(setupCameraFromImagesDirectory())); connect(ui_->actionAbout, SIGNAL(triggered()), aboutDialog_ , SLOT(exec())); connect(ui_->actionRestore_all_default_settings, SIGNAL(triggered()), ui_->toolBox, SLOT(resetAllPages())); connect(ui_->actionRemove_all_objects, SIGNAL(triggered()), this, SLOT(removeAllObjects())); connect(ui_->pushButton_play, SIGNAL(clicked()), this, SLOT(startProcessing())); connect(ui_->pushButton_stop, SIGNAL(clicked()), this, SLOT(stopProcessing())); connect(ui_->pushButton_pause, SIGNAL(clicked()), this, SLOT(pauseProcessing())); connect(ui_->horizontalSlider_frames, SIGNAL(valueChanged(int)), this, SLOT(moveCameraFrame(int))); connect(ui_->horizontalSlider_frames, SIGNAL(valueChanged(int)), ui_->label_frame, SLOT(setNum(int))); ui_->pushButton_play->setVisible(true); ui_->pushButton_pause->setVisible(false); ui_->pushButton_stop->setEnabled(true); ui_->horizontalSlider_frames->setEnabled(false); ui_->label_frame->setVisible(false); ui_->objects_area->addAction(ui_->actionAdd_object_from_scene); ui_->objects_area->addAction(ui_->actionAdd_objects_from_files); ui_->objects_area->setContextMenuPolicy(Qt::ActionsContextMenu); ui_->actionStart_camera->setShortcut(Qt::Key_Space); ui_->actionPause_camera->setShortcut(Qt::Key_Space); ui_->actionCamera_from_video_file->setChecked(!Settings::getCamera_5mediaPath().isEmpty() && !UDirectory::exists(Settings::getCamera_5mediaPath().toStdString())); ui_->actionCamera_from_directory_of_images->setChecked(!Settings::getCamera_5mediaPath().isEmpty() && UDirectory::exists(Settings::getCamera_5mediaPath().toStdString())); if(Settings::getGeneral_autoStartCamera()) { // Set 1 msec to see state on the status bar. QTimer::singleShot(1, this, SLOT(startProcessing())); } }
bool TransfersConsumer::onNewBlocks(const CompleteBlock* blocks, uint32_t startHeight, uint32_t count) { assert(blocks); struct Tx { BlockInfo blockInfo; const ITransactionReader* tx; }; struct PreprocessedTx : Tx, PreprocessInfo {}; std::vector<PreprocessedTx> preprocessedTransactions; std::mutex preprocessedTransactionsMutex; size_t workers = std::thread::hardware_concurrency(); if (workers == 0) { workers = 2; } BlockingQueue<Tx> inputQueue(workers * 2); std::atomic<bool> stopProcessing(false); auto pushingThread = std::async(std::launch::async, [&] { for( uint32_t i = 0; i < count && !stopProcessing; ++i) { const auto& block = blocks[i].block; if (!block.is_initialized()) { continue; } // filter by syncStartTimestamp if (m_syncStart.timestamp && block->timestamp < m_syncStart.timestamp) { continue; } BlockInfo blockInfo; blockInfo.height = startHeight + i; blockInfo.timestamp = block->timestamp; blockInfo.transactionIndex = 0; // position in block for (const auto& tx : blocks[i].transactions) { auto pubKey = tx->getTransactionPublicKey(); if (pubKey == NULL_PUBLIC_KEY) { ++blockInfo.transactionIndex; continue; } Tx item = { blockInfo, tx.get() }; inputQueue.push(item); ++blockInfo.transactionIndex; } } inputQueue.close(); }); auto processingFunction = [&] { Tx item; std::error_code ec; while (!stopProcessing && inputQueue.pop(item)) { PreprocessedTx output; static_cast<Tx&>(output) = item; ec = preprocessOutputs(item.blockInfo, *item.tx, output); if (ec) { stopProcessing = true; break; } std::lock_guard<std::mutex> lk(preprocessedTransactionsMutex); preprocessedTransactions.push_back(std::move(output)); } return ec; }; std::vector<std::future<std::error_code>> processingThreads; for (size_t i = 0; i < workers; ++i) { processingThreads.push_back(std::async(std::launch::async, processingFunction)); } std::error_code processingError; for (auto& f : processingThreads) { try { std::error_code ec = f.get(); if (!processingError && ec) { processingError = ec; } } catch (const std::system_error& e) { processingError = e.code(); } catch (const std::exception&) { processingError = std::make_error_code(std::errc::operation_canceled); } } if (!processingError) { // sort by block height and transaction index in block std::sort(preprocessedTransactions.begin(), preprocessedTransactions.end(), [](const PreprocessedTx& a, const PreprocessedTx& b) { return std::tie(a.blockInfo.height, a.blockInfo.transactionIndex) < std::tie(b.blockInfo.height, b.blockInfo.transactionIndex); }); for (const auto& tx : preprocessedTransactions) { processingError = processTransaction(tx.blockInfo, *tx.tx, tx); if (processingError) { break; } } } if (processingError) { forEachSubscription([&](TransfersSubscription& sub) { sub.onError(processingError, startHeight); }); return false; } auto newHeight = startHeight + count; forEachSubscription([newHeight](TransfersSubscription& sub) { sub.advanceHeight(newHeight); }); return true; }
void StoragePoolToolBar::changeAutoReloadState(bool state) { if ( state ) enableAutoReload(); else stopProcessing(); }
AudioSoundIo::~AudioSoundIo() { stopProcessing(); soundio_destroy(m_soundio); }
AudioOss::~AudioOss() { stopProcessing(); close( m_audioFD ); }
void InterfaceToolBar::changeAutoReloadState(bool state) { if ( state ) enableAutoReload(); else stopProcessing(); }