diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/gstreamer/camerabin/camerabinsession.cpp | 79 | ||||
-rw-r--r-- | src/plugins/gstreamer/camerabin/camerabinsession.h | 5 |
2 files changed, 14 insertions, 70 deletions
diff --git a/src/plugins/gstreamer/camerabin/camerabinsession.cpp b/src/plugins/gstreamer/camerabin/camerabinsession.cpp index 10217c1ce..da317740b 100644 --- a/src/plugins/gstreamer/camerabin/camerabinsession.cpp +++ b/src/plugins/gstreamer/camerabin/camerabinsession.cpp @@ -542,9 +542,10 @@ GstElement *CameraBinSession::buildCameraSource() void CameraBinSession::captureImage(int requestId, const QString &fileName) { - QString actualFileName = fileName; - if (actualFileName.isEmpty()) - actualFileName = generateFileName("img_", defaultDir(QCamera::CaptureStillImage), "jpg"); + const QString actualFileName = m_mediaStorageLocation.generateFileName(fileName, + QMediaStorageLocation::Pictures, + QLatin1String("IMG_"), + QLatin1String("jpg")); m_requestId = requestId; @@ -592,60 +593,6 @@ bool CameraBinSession::setOutputLocation(const QUrl& sink) return true; } -QDir CameraBinSession::defaultDir(QCamera::CaptureModes mode) const -{ - QStringList dirCandidates; - -#if defined(Q_WS_MAEMO_6) - dirCandidates << QLatin1String("/home/user/MyDocs/DCIM"); - dirCandidates << QLatin1String("/home/user/MyDocs/"); -#endif - - if (mode == QCamera::CaptureVideo) { - dirCandidates << QStandardPaths::writableLocation(QStandardPaths::MoviesLocation); - dirCandidates << QDir::home().filePath("Documents/Video"); - dirCandidates << QDir::home().filePath("Documents/Videos"); - } else { - dirCandidates << QStandardPaths::writableLocation(QStandardPaths::PicturesLocation); - dirCandidates << QDir::home().filePath("Documents/Photo"); - dirCandidates << QDir::home().filePath("Documents/Photos"); - dirCandidates << QDir::home().filePath("Documents/photo"); - dirCandidates << QDir::home().filePath("Documents/photos"); - dirCandidates << QDir::home().filePath("Documents/Images"); - } - - dirCandidates << QDir::home().filePath("Documents"); - dirCandidates << QDir::home().filePath("My Documents"); - dirCandidates << QDir::homePath(); - dirCandidates << QDir::currentPath(); - dirCandidates << QDir::tempPath(); - - foreach (const QString &path, dirCandidates) { - if (QFileInfo(path).isWritable()) - return QDir(path); - } - - return QDir(); -} - -QString CameraBinSession::generateFileName(const QString &prefix, const QDir &dir, const QString &ext) const -{ - int lastClip = 0; - foreach(QString fileName, dir.entryList(QStringList() << QString("%1*.%2").arg(prefix).arg(ext))) { - int imgNumber = fileName.midRef(prefix.length(), fileName.size()-prefix.length()-ext.length()-1).toInt(); - lastClip = qMax(lastClip, imgNumber); - } - - QString name = QString("%1%2.%3").arg(prefix) - .arg(lastClip+1, - 4, //fieldWidth - 10, - QLatin1Char('0')) - .arg(ext); - - return dir.absoluteFilePath(name); -} - void CameraBinSession::setDevice(const QString &device) { if (m_inputDevice != device) { @@ -1122,18 +1069,16 @@ bool CameraBinSession::processBusMessage(const QGstreamerMessage &message) void CameraBinSession::recordVideo() { + const QString actualFileName = m_mediaStorageLocation.generateFileName(m_sink.isLocalFile() ? m_sink.toLocalFile() + : m_sink.toString(), + QMediaStorageLocation::Movies, + QLatin1String("clip_"), + m_mediaContainerControl->suggestedFileExtension(m_mediaContainerControl->actualContainerFormat())); + m_recordingActive = true; - m_actualSink = m_sink; - if (m_actualSink.isEmpty()) { - QString ext = m_mediaContainerControl->suggestedFileExtension(m_mediaContainerControl->actualContainerFormat()); - m_actualSink = QUrl::fromLocalFile(generateFileName("clip_", defaultDir(QCamera::CaptureVideo), ext)); - } else { - // Output location was rejected in setOutputlocation() if not a local file - m_actualSink = QUrl::fromLocalFile(QDir::currentPath()).resolved(m_actualSink); - } + m_actualSink = QUrl::fromLocalFile(actualFileName); - QString fileName = m_actualSink.toLocalFile(); - g_object_set(G_OBJECT(m_camerabin), FILENAME_PROPERTY, QFile::encodeName(fileName).constData(), NULL); + g_object_set(G_OBJECT(m_camerabin), FILENAME_PROPERTY, QFile::encodeName(actualFileName).constData(), NULL); g_signal_emit_by_name(G_OBJECT(m_camerabin), CAPTURE_START, NULL); } diff --git a/src/plugins/gstreamer/camerabin/camerabinsession.h b/src/plugins/gstreamer/camerabin/camerabinsession.h index 71590a7dc..553c2a1ad 100644 --- a/src/plugins/gstreamer/camerabin/camerabinsession.h +++ b/src/plugins/gstreamer/camerabin/camerabinsession.h @@ -46,6 +46,7 @@ #include <private/qgstreamerbushelper_p.h> #include <private/qgstreamerbufferprobe_p.h> +#include <private/qmediastoragelocation_p.h> #include "qcamera.h" QT_BEGIN_NAMESPACE @@ -102,9 +103,6 @@ public: QUrl outputLocation() const; bool setOutputLocation(const QUrl& sink); - QDir defaultDir(QCamera::CaptureModes mode) const; - QString generateFileName(const QString &prefix, const QDir &dir, const QString &ext) const; - GstElement *buildCameraSource(); GstElementFactory *sourceFactory() const { return m_sourceFactory; } @@ -209,6 +207,7 @@ private: QString m_inputDevice; bool m_muted; bool m_busy; + QMediaStorageLocation m_mediaStorageLocation; QCamera::CaptureModes m_captureMode; QMap<QByteArray, QVariant> m_metaData; |