, m_audioEncoder(JMediaRecorder::DefaultAudioEncoder)
, m_videoEncoder(JMediaRecorder::DefaultVideoEncoder)
{
+ connect(this, SIGNAL(stateChanged(QMediaRecorder::State)), this, SLOT(updateStatus()));
+
if (cameraSession) {
connect(cameraSession, SIGNAL(opened()), this, SLOT(onCameraOpened()));
- connect(cameraSession, SIGNAL(statusChanged(QCamera::Status)),
- this, SLOT(onCameraStatusChanged(QCamera::Status)));
+ connect(cameraSession, SIGNAL(statusChanged(QCamera::Status)), this, SLOT(updateStatus()));
connect(cameraSession, SIGNAL(captureModeChanged(QCamera::CaptureModes)),
- this, SLOT(onCameraCaptureModeChanged(QCamera::CaptureModes)));
+ this, SLOT(updateStatus()));
+ connect(cameraSession, SIGNAL(readyForCaptureChanged(bool)), this, SLOT(updateStatus()));
+ } else {
+ updateStatus();
}
m_notifyTimer.setInterval(1000);
bool QAndroidCaptureSession::start()
{
- if (m_state == QMediaRecorder::RecordingState)
+ if (m_state == QMediaRecorder::RecordingState || m_status != QMediaRecorder::LoadedStatus)
return false;
- setStatus(QMediaRecorder::LoadingStatus);
+ setStatus(QMediaRecorder::StartingStatus);
if (m_mediaRecorder) {
m_mediaRecorder->release();
// Set audio/video sources
if (m_cameraSession) {
- if (m_cameraSession->status() != QCamera::ActiveStatus) {
- emit error(QMediaRecorder::ResourceError, QLatin1String("Camera must be active to record it."));
- setStatus(QMediaRecorder::UnloadedStatus);
- return false;
- } else {
- updateViewfinder();
- m_cameraSession->camera()->unlock();
- m_mediaRecorder->setCamera(m_cameraSession->camera());
- m_mediaRecorder->setAudioSource(JMediaRecorder::Camcorder);
- m_mediaRecorder->setVideoSource(JMediaRecorder::Camera);
- }
+ updateViewfinder();
+ m_cameraSession->camera()->unlock();
+ m_mediaRecorder->setCamera(m_cameraSession->camera());
+ m_mediaRecorder->setAudioSource(JMediaRecorder::Camcorder);
+ m_mediaRecorder->setVideoSource(JMediaRecorder::Camera);
} else {
m_mediaRecorder->setAudioSource(m_audioSource);
}
m_mediaRecorder->setOrientationHint(m_cameraSession->currentCameraRotation());
}
-
// Set output file
QString filePath = m_mediaStorageLocation.generateFileName(
m_requestedOutputLocation.isLocalFile() ? m_requestedOutputLocation.toLocalFile()
return false;
}
- setStatus(QMediaRecorder::LoadedStatus);
- setStatus(QMediaRecorder::StartingStatus);
-
if (!m_mediaRecorder->start()) {
emit error(QMediaRecorder::FormatError, QLatin1String("Unable to start the media recorder."));
setStatus(QMediaRecorder::UnloadedStatus);
return false;
}
- setStatus(QMediaRecorder::RecordingStatus);
-
m_elapsedTime.start();
m_notifyTimer.start();
updateDuration();
JMultimediaUtils::registerMediaFile(mediaPath);
}
- setStatus(QMediaRecorder::UnloadedStatus);
}
void QAndroidCaptureSession::setStatus(QMediaRecorder::Status status)
return profile;
}
-void QAndroidCaptureSession::onCameraStatusChanged(QCamera::Status status)
+void QAndroidCaptureSession::updateStatus()
{
- if (status == QCamera::StoppingStatus)
- setState(QMediaRecorder::StoppedState);
-}
+ if (m_cameraSession) {
+ // Video recording
-void QAndroidCaptureSession::onCameraCaptureModeChanged(QCamera::CaptureModes mode)
-{
- if (!mode.testFlag(QCamera::CaptureVideo))
- setState(QMediaRecorder::StoppedState);
+ // stop recording when stopping the camera
+ if (m_cameraSession->status() == QCamera::StoppingStatus
+ || !m_cameraSession->captureMode().testFlag(QCamera::CaptureVideo)) {
+ setState(QMediaRecorder::StoppedState);
+ }
+
+ if (m_state == QMediaRecorder::RecordingState) {
+ setStatus(QMediaRecorder::RecordingStatus);
+ } else if (m_cameraSession->status() == QCamera::UnavailableStatus) {
+ setStatus(QMediaRecorder::UnavailableStatus);
+ } else if (m_cameraSession->captureMode().testFlag(QCamera::CaptureVideo)
+ && m_cameraSession->isReadyForCapture()) {
+ if (m_cameraSession->status() == QCamera::StartingStatus)
+ setStatus(QMediaRecorder::LoadingStatus);
+ else if (m_cameraSession->status() == QCamera::ActiveStatus)
+ setStatus(QMediaRecorder::LoadedStatus);
+ else
+ setStatus(QMediaRecorder::UnloadedStatus);
+ } else {
+ setStatus(QMediaRecorder::UnloadedStatus);
+ }
+
+ } else {
+ // Audio-only recording
+ if (m_state == QMediaRecorder::RecordingState)
+ setStatus(QMediaRecorder::RecordingStatus);
+ else
+ setStatus(QMediaRecorder::LoadedStatus);
+ }
}
void QAndroidCaptureSession::onError(int what, int extra)