diff options
author | Yoann Lopes <yoann.lopes@digia.com> | 2014-04-09 19:13:45 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-05-09 16:33:12 +0200 |
commit | 5339aed040d58f8486205df1525508b8c02faa9c (patch) | |
tree | 5c73f5fcd04165f29f37c5a3170145daf9c193a0 | |
parent | 703ee3879bf055787f2219f5b2212053d9535fe9 (diff) | |
download | qtmultimedia-5339aed040d58f8486205df1525508b8c02faa9c.tar.gz |
Moved QMediaStorageLocation out of the Android plugin.
It's now a private API in the QtMultimedia library in order to be
accessible in other plugins.
Change-Id: I63541de1e8c540cebc210f9037646ce74d866c6f
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
-rw-r--r-- | src/multimedia/multimedia.pro | 4 | ||||
-rw-r--r-- | src/multimedia/qmediastoragelocation.cpp (renamed from src/plugins/android/src/mediacapture/qandroidmediastoragelocation.cpp) | 58 | ||||
-rw-r--r-- | src/multimedia/qmediastoragelocation_p.h (renamed from src/plugins/android/src/mediacapture/qandroidmediastoragelocation.h) | 33 | ||||
-rw-r--r-- | src/plugins/android/src/mediacapture/mediacapture.pri | 2 | ||||
-rw-r--r-- | src/plugins/android/src/mediacapture/qandroidcamerasession.cpp | 8 | ||||
-rw-r--r-- | src/plugins/android/src/mediacapture/qandroidcamerasession.h | 6 | ||||
-rw-r--r-- | src/plugins/android/src/mediacapture/qandroidcapturesession.cpp | 14 | ||||
-rw-r--r-- | src/plugins/android/src/mediacapture/qandroidcapturesession.h | 6 |
8 files changed, 82 insertions, 49 deletions
diff --git a/src/multimedia/multimedia.pro b/src/multimedia/multimedia.pro index 23cca2537..0f3ced913 100644 --- a/src/multimedia/multimedia.pro +++ b/src/multimedia/multimedia.pro @@ -21,7 +21,8 @@ PRIVATE_HEADERS += \ qmediaserviceprovider_p.h \ qmediaresourcepolicyplugin_p.h \ qmediaresourcepolicy_p.h \ - qmediaresourceset_p.h + qmediaresourceset_p.h \ + qmediastoragelocation_p.h PUBLIC_HEADERS += \ qmediabindableinterface.h \ @@ -47,6 +48,7 @@ SOURCES += \ qmediaresourcepolicyplugin_p.cpp \ qmediaresourcepolicy_p.cpp \ qmediaresourceset_p.cpp \ + qmediastoragelocation.cpp \ qmultimedia.cpp include(audio/audio.pri) diff --git a/src/plugins/android/src/mediacapture/qandroidmediastoragelocation.cpp b/src/multimedia/qmediastoragelocation.cpp index 2bd3da195..877c12138 100644 --- a/src/plugins/android/src/mediacapture/qandroidmediastoragelocation.cpp +++ b/src/multimedia/qmediastoragelocation.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the Qt Toolkit. @@ -39,24 +39,40 @@ ** ****************************************************************************/ -#include "qandroidmediastoragelocation.h" +#include "qmediastoragelocation_p.h" -#include "jmultimediautils.h" +#include <QStandardPaths> QT_BEGIN_NAMESPACE -QAndroidMediaStorageLocation::QAndroidMediaStorageLocation() +QMediaStorageLocation::QMediaStorageLocation() { } -QDir QAndroidMediaStorageLocation::defaultDir(CaptureSource source) const +void QMediaStorageLocation::addStorageLocation(MediaType type, const QString &location) +{ + m_customLocations[type].append(location); +} + +QDir QMediaStorageLocation::defaultLocation(MediaType type) const { QStringList dirCandidates; - if (source == Camera) - dirCandidates << JMultimediaUtils::getDefaultMediaDirectory(JMultimediaUtils::DCIM); - else - dirCandidates << JMultimediaUtils::getDefaultMediaDirectory(JMultimediaUtils::Sounds); + dirCandidates << m_customLocations.value(type); + + switch (type) { + case Movies: + dirCandidates << QStandardPaths::writableLocation(QStandardPaths::MoviesLocation); + break; + case Music: + dirCandidates << QStandardPaths::writableLocation(QStandardPaths::MusicLocation); + break; + case Pictures: + dirCandidates << QStandardPaths::writableLocation(QStandardPaths::PicturesLocation); + default: + break; + } + dirCandidates << QDir::homePath(); dirCandidates << QDir::currentPath(); dirCandidates << QDir::tempPath(); @@ -69,31 +85,31 @@ QDir QAndroidMediaStorageLocation::defaultDir(CaptureSource source) const return QDir(); } -QString QAndroidMediaStorageLocation::generateFileName(const QString &requestedName, - CaptureSource source, - const QString &prefix, - const QString &extension) const +QString QMediaStorageLocation::generateFileName(const QString &requestedName, + MediaType type, + const QString &prefix, + const QString &extension) const { if (requestedName.isEmpty()) - return generateFileName(prefix, defaultDir(source), extension); + return generateFileName(prefix, defaultLocation(type), extension); QString path = requestedName; if (QFileInfo(path).isRelative()) - path = defaultDir(source).absoluteFilePath(path); + path = defaultLocation(type).absoluteFilePath(path); if (QFileInfo(path).isDir()) return generateFileName(prefix, QDir(path), extension); if (!path.endsWith(extension)) - path.append(QString(".%1").arg(extension)); + path.append(QString(QLatin1String(".%1")).arg(extension)); return path; } -QString QAndroidMediaStorageLocation::generateFileName(const QString &prefix, - const QDir &dir, - const QString &extension) const +QString QMediaStorageLocation::generateFileName(const QString &prefix, + const QDir &dir, + const QString &extension) const { QMutexLocker lock(&m_mutex); @@ -102,7 +118,7 @@ QString QAndroidMediaStorageLocation::generateFileName(const QString &prefix, if (lastMediaIndex == 0) { // first run, find the maximum media number during the fist capture - Q_FOREACH (const QString &fileName, dir.entryList(QStringList() << QString("%1*.%2").arg(prefix).arg(extension))) { + Q_FOREACH (const QString &fileName, dir.entryList(QStringList() << QString(QLatin1String("%1*.%2")).arg(prefix).arg(extension))) { const qint64 mediaIndex = fileName.midRef(prefix.length(), fileName.size() - prefix.length() - extension.length() - 1).toInt(); lastMediaIndex = qMax(lastMediaIndex, mediaIndex); } @@ -111,7 +127,7 @@ QString QAndroidMediaStorageLocation::generateFileName(const QString &prefix, // don't just rely on cached lastMediaIndex value, // someone else may create a file after camera started while (true) { - const QString name = QString("%1%2.%3").arg(prefix) + const QString name = QString(QLatin1String("%1%2.%3")).arg(prefix) .arg(lastMediaIndex + 1, 8, 10, QLatin1Char('0')) .arg(extension); diff --git a/src/plugins/android/src/mediacapture/qandroidmediastoragelocation.h b/src/multimedia/qmediastoragelocation_p.h index 2e63f3df5..600fb63ff 100644 --- a/src/plugins/android/src/mediacapture/qandroidmediastoragelocation.h +++ b/src/multimedia/qmediastoragelocation_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the Qt Toolkit. @@ -39,37 +39,42 @@ ** ****************************************************************************/ -#ifndef QANDROIDMEDIASTORAGELOCATION_H -#define QANDROIDMEDIASTORAGELOCATION_H +#ifndef QMEDIASTORAGELOCATION_H +#define QMEDIASTORAGELOCATION_H -#include <QCamera> +#include <qtmultimediadefs.h> #include <QDir> +#include <QMap> #include <QHash> #include <QMutex> QT_BEGIN_NAMESPACE -class QAndroidMediaStorageLocation +class Q_MULTIMEDIA_EXPORT QMediaStorageLocation { public: - enum CaptureSource { - Camera, - Audio + enum MediaType { + Movies, + Music, + Pictures, + Sounds }; - QAndroidMediaStorageLocation(); + QMediaStorageLocation(); - QDir defaultDir(CaptureSource source) const; + void addStorageLocation(MediaType type, const QString &location); - QString generateFileName(const QString &requestedName, CaptureSource source, const QString &prefix, const QString &extension) const; + QDir defaultLocation(MediaType type) const; + + QString generateFileName(const QString &requestedName, MediaType type, const QString &prefix, const QString &extension) const; QString generateFileName(const QString &prefix, const QDir &dir, const QString &extension) const; private: - mutable QHash<QString, qint64> m_lastUsedIndex; - mutable QMutex m_mutex; + mutable QHash<QString, qint64> m_lastUsedIndex; + QMap<MediaType, QStringList> m_customLocations; }; QT_END_NAMESPACE -#endif // QANDROIDMEDIASTORAGELOCATION_H +#endif // QMEDIASTORAGELOCATION_H diff --git a/src/plugins/android/src/mediacapture/mediacapture.pri b/src/plugins/android/src/mediacapture/mediacapture.pri index 01274414b..fde0e3d6f 100644 --- a/src/plugins/android/src/mediacapture/mediacapture.pri +++ b/src/plugins/android/src/mediacapture/mediacapture.pri @@ -12,7 +12,6 @@ SOURCES += \ $$PWD/qandroidcameraimagecapturecontrol.cpp \ $$PWD/qandroidcameracapturedestinationcontrol.cpp \ $$PWD/qandroidcameracapturebufferformatcontrol.cpp \ - $$PWD/qandroidmediastoragelocation.cpp \ $$PWD/qandroidcameraflashcontrol.cpp \ $$PWD/qandroidcamerafocuscontrol.cpp \ $$PWD/qandroidcameralockscontrol.cpp \ @@ -37,7 +36,6 @@ HEADERS += \ $$PWD/qandroidcameraimagecapturecontrol.h \ $$PWD/qandroidcameracapturedestinationcontrol.h \ $$PWD/qandroidcameracapturebufferformatcontrol.h \ - $$PWD/qandroidmediastoragelocation.h \ $$PWD/qandroidcameraflashcontrol.h \ $$PWD/qandroidcamerafocuscontrol.h \ $$PWD/qandroidcameralockscontrol.h \ diff --git a/src/plugins/android/src/mediacapture/qandroidcamerasession.cpp b/src/plugins/android/src/mediacapture/qandroidcamerasession.cpp index 6051cf964..53fb2f516 100644 --- a/src/plugins/android/src/mediacapture/qandroidcamerasession.cpp +++ b/src/plugins/android/src/mediacapture/qandroidcamerasession.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the Qt Toolkit. @@ -111,6 +111,10 @@ QAndroidCameraSession::QAndroidCameraSession(QObject *parent) , m_captureCanceled(false) , m_currentImageCaptureId(-1) { + m_mediaStorageLocation.addStorageLocation( + QMediaStorageLocation::Pictures, + JMultimediaUtils::getDefaultMediaDirectory(JMultimediaUtils::DCIM)); + if (qApp) { connect(qApp, SIGNAL(applicationStateChanged(Qt::ApplicationState)), this, SLOT(onApplicationStateChanged(Qt::ApplicationState))); @@ -644,7 +648,7 @@ void QAndroidCameraSession::processCapturedImage(int id, if (dest & QCameraImageCapture::CaptureToFile) { const QString actualFileName = m_mediaStorageLocation.generateFileName(fileName, - QAndroidMediaStorageLocation::Camera, + QMediaStorageLocation::Pictures, QLatin1String("IMG_"), QLatin1String("jpg")); diff --git a/src/plugins/android/src/mediacapture/qandroidcamerasession.h b/src/plugins/android/src/mediacapture/qandroidcamerasession.h index f3ac67894..4c58cab9e 100644 --- a/src/plugins/android/src/mediacapture/qandroidcamerasession.h +++ b/src/plugins/android/src/mediacapture/qandroidcamerasession.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the Qt Toolkit. @@ -47,7 +47,7 @@ #include <QCameraImageCapture> #include <QSet> #include <QMutex> -#include "qandroidmediastoragelocation.h" +#include <private/qmediastoragelocation_p.h> QT_BEGIN_NAMESPACE @@ -174,7 +174,7 @@ private: int m_currentImageCaptureId; QString m_currentImageCaptureFileName; - QAndroidMediaStorageLocation m_mediaStorageLocation; + QMediaStorageLocation m_mediaStorageLocation; QSet<QAndroidMediaVideoProbeControl *> m_videoProbes; QMutex m_videoProbesMutex; diff --git a/src/plugins/android/src/mediacapture/qandroidcapturesession.cpp b/src/plugins/android/src/mediacapture/qandroidcapturesession.cpp index 008ebc7d5..4b1c58255 100644 --- a/src/plugins/android/src/mediacapture/qandroidcapturesession.cpp +++ b/src/plugins/android/src/mediacapture/qandroidcapturesession.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the Qt Toolkit. @@ -65,6 +65,14 @@ QAndroidCaptureSession::QAndroidCaptureSession(QAndroidCameraSession *cameraSess , m_audioEncoder(JMediaRecorder::DefaultAudioEncoder) , m_videoEncoder(JMediaRecorder::DefaultVideoEncoder) { + m_mediaStorageLocation.addStorageLocation( + QMediaStorageLocation::Movies, + JMultimediaUtils::getDefaultMediaDirectory(JMultimediaUtils::DCIM)); + + m_mediaStorageLocation.addStorageLocation( + QMediaStorageLocation::Sounds, + JMultimediaUtils::getDefaultMediaDirectory(JMultimediaUtils::Sounds)); + connect(this, SIGNAL(stateChanged(QMediaRecorder::State)), this, SLOT(updateStatus())); if (cameraSession) { @@ -214,8 +222,8 @@ bool QAndroidCaptureSession::start() QString filePath = m_mediaStorageLocation.generateFileName( m_requestedOutputLocation.isLocalFile() ? m_requestedOutputLocation.toLocalFile() : m_requestedOutputLocation.toString(), - m_cameraSession ? QAndroidMediaStorageLocation::Camera - : QAndroidMediaStorageLocation::Audio, + m_cameraSession ? QMediaStorageLocation::Movies + : QMediaStorageLocation::Sounds, m_cameraSession ? QLatin1String("VID_") : QLatin1String("REC_"), m_containerFormat); diff --git a/src/plugins/android/src/mediacapture/qandroidcapturesession.h b/src/plugins/android/src/mediacapture/qandroidcapturesession.h index 32ca9d1ae..4b6121dfa 100644 --- a/src/plugins/android/src/mediacapture/qandroidcapturesession.h +++ b/src/plugins/android/src/mediacapture/qandroidcapturesession.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the Qt Toolkit. @@ -47,7 +47,7 @@ #include <qurl.h> #include <qelapsedtimer.h> #include <qtimer.h> -#include "qandroidmediastoragelocation.h" +#include <private/qmediastoragelocation_p.h> #include "jmediarecorder.h" QT_BEGIN_NAMESPACE @@ -152,7 +152,7 @@ private: QString m_audioInput; JMediaRecorder::AudioSource m_audioSource; - QAndroidMediaStorageLocation m_mediaStorageLocation; + QMediaStorageLocation m_mediaStorageLocation; QElapsedTimer m_elapsedTime; QTimer m_notifyTimer; |