void Document::stopRecording() { if(!isRecording()) return; m_recorder->close(); delete m_recorder; m_recorder = nullptr; emit recorderStateChanged(false); }
VideoRecorder::VideoRecorder(QDeclarativeItem *parent) : QDeclarativeItem(parent) { m_camera = new QCamera(this); connect(m_camera, SIGNAL(stateChanged(QCamera::State)), SLOT(cameraStateChanged(QCamera::State))); connect(m_camera, SIGNAL(statusChanged(QCamera::Status)), SLOT(cameraStatusChanged(QCamera::Status))); connect(m_camera, SIGNAL(error(QCamera::Error)), SLOT(cameraError(QCamera::Error))); m_viewFinder = new QGraphicsVideoItem(this); m_viewFinder->setAspectRatioMode(Qt::IgnoreAspectRatio); m_camera->setViewfinder(m_viewFinder); m_camera->setCaptureMode(QCamera::CaptureVideo); m_recorder = new QMediaRecorder(m_camera, this); connect(m_recorder, SIGNAL(stateChanged(QMediaRecorder::State)), SLOT(recorderStateChanged(QMediaRecorder::State))); connect(m_recorder, SIGNAL(error(QMediaRecorder::Error)), SLOT(recorderError(QMediaRecorder::Error))); connect(m_recorder, SIGNAL(durationChanged(qint64)), SLOT(videoDurationChanged(qint64))); }
bool Document::startRecording(const QString &filename, QString *error) { Q_ASSERT(!isRecording()); // Set file suffix if missing QString file = filename; const QFileInfo info(file); if(info.suffix().isEmpty()) file += ".dprec"; // Start the recorder m_recorder = new recording::Writer(file, this); if(!m_recorder->open()) { if(error) *error = m_recorder->errorString(); delete m_recorder; m_recorder = nullptr; return false; } QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); m_recorder->writeHeader(); QList<protocol::MessagePtr> snapshot = m_canvas->generateSnapshot(false); for(const protocol::MessagePtr ptr : snapshot) { m_recorder->recordMessage(ptr); } QSettings cfg; cfg.beginGroup("settings/recording"); if(cfg.value("recordpause", true).toBool()) m_recorder->setMinimumInterval(1000 * cfg.value("minimumpause", 0.5).toFloat()); connect(m_client, &net::Client::messageReceived, m_recorder, &recording::Writer::recordMessage); QApplication::restoreOverrideCursor(); emit recorderStateChanged(true); return true; }