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>
This commit is contained in:
committed by
The Qt Project
parent
703ee3879b
commit
5339aed040
@@ -21,7 +21,8 @@ PRIVATE_HEADERS += \
|
|||||||
qmediaserviceprovider_p.h \
|
qmediaserviceprovider_p.h \
|
||||||
qmediaresourcepolicyplugin_p.h \
|
qmediaresourcepolicyplugin_p.h \
|
||||||
qmediaresourcepolicy_p.h \
|
qmediaresourcepolicy_p.h \
|
||||||
qmediaresourceset_p.h
|
qmediaresourceset_p.h \
|
||||||
|
qmediastoragelocation_p.h
|
||||||
|
|
||||||
PUBLIC_HEADERS += \
|
PUBLIC_HEADERS += \
|
||||||
qmediabindableinterface.h \
|
qmediabindableinterface.h \
|
||||||
@@ -47,6 +48,7 @@ SOURCES += \
|
|||||||
qmediaresourcepolicyplugin_p.cpp \
|
qmediaresourcepolicyplugin_p.cpp \
|
||||||
qmediaresourcepolicy_p.cpp \
|
qmediaresourcepolicy_p.cpp \
|
||||||
qmediaresourceset_p.cpp \
|
qmediaresourceset_p.cpp \
|
||||||
|
qmediastoragelocation.cpp \
|
||||||
qmultimedia.cpp
|
qmultimedia.cpp
|
||||||
|
|
||||||
include(audio/audio.pri)
|
include(audio/audio.pri)
|
||||||
|
|||||||
@@ -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
|
** Contact: http://www.qt-project.org/legal
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Toolkit.
|
** 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
|
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;
|
QStringList dirCandidates;
|
||||||
|
|
||||||
if (source == Camera)
|
dirCandidates << m_customLocations.value(type);
|
||||||
dirCandidates << JMultimediaUtils::getDefaultMediaDirectory(JMultimediaUtils::DCIM);
|
|
||||||
else
|
switch (type) {
|
||||||
dirCandidates << JMultimediaUtils::getDefaultMediaDirectory(JMultimediaUtils::Sounds);
|
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::homePath();
|
||||||
dirCandidates << QDir::currentPath();
|
dirCandidates << QDir::currentPath();
|
||||||
dirCandidates << QDir::tempPath();
|
dirCandidates << QDir::tempPath();
|
||||||
@@ -69,31 +85,31 @@ QDir QAndroidMediaStorageLocation::defaultDir(CaptureSource source) const
|
|||||||
return QDir();
|
return QDir();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString QAndroidMediaStorageLocation::generateFileName(const QString &requestedName,
|
QString QMediaStorageLocation::generateFileName(const QString &requestedName,
|
||||||
CaptureSource source,
|
MediaType type,
|
||||||
const QString &prefix,
|
const QString &prefix,
|
||||||
const QString &extension) const
|
const QString &extension) const
|
||||||
{
|
{
|
||||||
if (requestedName.isEmpty())
|
if (requestedName.isEmpty())
|
||||||
return generateFileName(prefix, defaultDir(source), extension);
|
return generateFileName(prefix, defaultLocation(type), extension);
|
||||||
|
|
||||||
QString path = requestedName;
|
QString path = requestedName;
|
||||||
|
|
||||||
if (QFileInfo(path).isRelative())
|
if (QFileInfo(path).isRelative())
|
||||||
path = defaultDir(source).absoluteFilePath(path);
|
path = defaultLocation(type).absoluteFilePath(path);
|
||||||
|
|
||||||
if (QFileInfo(path).isDir())
|
if (QFileInfo(path).isDir())
|
||||||
return generateFileName(prefix, QDir(path), extension);
|
return generateFileName(prefix, QDir(path), extension);
|
||||||
|
|
||||||
if (!path.endsWith(extension))
|
if (!path.endsWith(extension))
|
||||||
path.append(QString(".%1").arg(extension));
|
path.append(QString(QLatin1String(".%1")).arg(extension));
|
||||||
|
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString QAndroidMediaStorageLocation::generateFileName(const QString &prefix,
|
QString QMediaStorageLocation::generateFileName(const QString &prefix,
|
||||||
const QDir &dir,
|
const QDir &dir,
|
||||||
const QString &extension) const
|
const QString &extension) const
|
||||||
{
|
{
|
||||||
QMutexLocker lock(&m_mutex);
|
QMutexLocker lock(&m_mutex);
|
||||||
|
|
||||||
@@ -102,7 +118,7 @@ QString QAndroidMediaStorageLocation::generateFileName(const QString &prefix,
|
|||||||
|
|
||||||
if (lastMediaIndex == 0) {
|
if (lastMediaIndex == 0) {
|
||||||
// first run, find the maximum media number during the fist capture
|
// 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();
|
const qint64 mediaIndex = fileName.midRef(prefix.length(), fileName.size() - prefix.length() - extension.length() - 1).toInt();
|
||||||
lastMediaIndex = qMax(lastMediaIndex, mediaIndex);
|
lastMediaIndex = qMax(lastMediaIndex, mediaIndex);
|
||||||
}
|
}
|
||||||
@@ -111,7 +127,7 @@ QString QAndroidMediaStorageLocation::generateFileName(const QString &prefix,
|
|||||||
// don't just rely on cached lastMediaIndex value,
|
// don't just rely on cached lastMediaIndex value,
|
||||||
// someone else may create a file after camera started
|
// someone else may create a file after camera started
|
||||||
while (true) {
|
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(lastMediaIndex + 1, 8, 10, QLatin1Char('0'))
|
||||||
.arg(extension);
|
.arg(extension);
|
||||||
|
|
||||||
@@ -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
|
** Contact: http://www.qt-project.org/legal
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Toolkit.
|
** This file is part of the Qt Toolkit.
|
||||||
@@ -39,37 +39,42 @@
|
|||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#ifndef QANDROIDMEDIASTORAGELOCATION_H
|
#ifndef QMEDIASTORAGELOCATION_H
|
||||||
#define QANDROIDMEDIASTORAGELOCATION_H
|
#define QMEDIASTORAGELOCATION_H
|
||||||
|
|
||||||
#include <QCamera>
|
#include <qtmultimediadefs.h>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
|
#include <QMap>
|
||||||
#include <QHash>
|
#include <QHash>
|
||||||
#include <QMutex>
|
#include <QMutex>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
class QAndroidMediaStorageLocation
|
class Q_MULTIMEDIA_EXPORT QMediaStorageLocation
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
enum CaptureSource {
|
enum MediaType {
|
||||||
Camera,
|
Movies,
|
||||||
Audio
|
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;
|
QString generateFileName(const QString &prefix, const QDir &dir, const QString &extension) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
mutable QHash<QString, qint64> m_lastUsedIndex;
|
|
||||||
|
|
||||||
mutable QMutex m_mutex;
|
mutable QMutex m_mutex;
|
||||||
|
mutable QHash<QString, qint64> m_lastUsedIndex;
|
||||||
|
QMap<MediaType, QStringList> m_customLocations;
|
||||||
};
|
};
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
#endif // QANDROIDMEDIASTORAGELOCATION_H
|
#endif // QMEDIASTORAGELOCATION_H
|
||||||
@@ -12,7 +12,6 @@ SOURCES += \
|
|||||||
$$PWD/qandroidcameraimagecapturecontrol.cpp \
|
$$PWD/qandroidcameraimagecapturecontrol.cpp \
|
||||||
$$PWD/qandroidcameracapturedestinationcontrol.cpp \
|
$$PWD/qandroidcameracapturedestinationcontrol.cpp \
|
||||||
$$PWD/qandroidcameracapturebufferformatcontrol.cpp \
|
$$PWD/qandroidcameracapturebufferformatcontrol.cpp \
|
||||||
$$PWD/qandroidmediastoragelocation.cpp \
|
|
||||||
$$PWD/qandroidcameraflashcontrol.cpp \
|
$$PWD/qandroidcameraflashcontrol.cpp \
|
||||||
$$PWD/qandroidcamerafocuscontrol.cpp \
|
$$PWD/qandroidcamerafocuscontrol.cpp \
|
||||||
$$PWD/qandroidcameralockscontrol.cpp \
|
$$PWD/qandroidcameralockscontrol.cpp \
|
||||||
@@ -37,7 +36,6 @@ HEADERS += \
|
|||||||
$$PWD/qandroidcameraimagecapturecontrol.h \
|
$$PWD/qandroidcameraimagecapturecontrol.h \
|
||||||
$$PWD/qandroidcameracapturedestinationcontrol.h \
|
$$PWD/qandroidcameracapturedestinationcontrol.h \
|
||||||
$$PWD/qandroidcameracapturebufferformatcontrol.h \
|
$$PWD/qandroidcameracapturebufferformatcontrol.h \
|
||||||
$$PWD/qandroidmediastoragelocation.h \
|
|
||||||
$$PWD/qandroidcameraflashcontrol.h \
|
$$PWD/qandroidcameraflashcontrol.h \
|
||||||
$$PWD/qandroidcamerafocuscontrol.h \
|
$$PWD/qandroidcamerafocuscontrol.h \
|
||||||
$$PWD/qandroidcameralockscontrol.h \
|
$$PWD/qandroidcameralockscontrol.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
|
** Contact: http://www.qt-project.org/legal
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Toolkit.
|
** This file is part of the Qt Toolkit.
|
||||||
@@ -111,6 +111,10 @@ QAndroidCameraSession::QAndroidCameraSession(QObject *parent)
|
|||||||
, m_captureCanceled(false)
|
, m_captureCanceled(false)
|
||||||
, m_currentImageCaptureId(-1)
|
, m_currentImageCaptureId(-1)
|
||||||
{
|
{
|
||||||
|
m_mediaStorageLocation.addStorageLocation(
|
||||||
|
QMediaStorageLocation::Pictures,
|
||||||
|
JMultimediaUtils::getDefaultMediaDirectory(JMultimediaUtils::DCIM));
|
||||||
|
|
||||||
if (qApp) {
|
if (qApp) {
|
||||||
connect(qApp, SIGNAL(applicationStateChanged(Qt::ApplicationState)),
|
connect(qApp, SIGNAL(applicationStateChanged(Qt::ApplicationState)),
|
||||||
this, SLOT(onApplicationStateChanged(Qt::ApplicationState)));
|
this, SLOT(onApplicationStateChanged(Qt::ApplicationState)));
|
||||||
@@ -644,7 +648,7 @@ void QAndroidCameraSession::processCapturedImage(int id,
|
|||||||
|
|
||||||
if (dest & QCameraImageCapture::CaptureToFile) {
|
if (dest & QCameraImageCapture::CaptureToFile) {
|
||||||
const QString actualFileName = m_mediaStorageLocation.generateFileName(fileName,
|
const QString actualFileName = m_mediaStorageLocation.generateFileName(fileName,
|
||||||
QAndroidMediaStorageLocation::Camera,
|
QMediaStorageLocation::Pictures,
|
||||||
QLatin1String("IMG_"),
|
QLatin1String("IMG_"),
|
||||||
QLatin1String("jpg"));
|
QLatin1String("jpg"));
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
** Contact: http://www.qt-project.org/legal
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Toolkit.
|
** This file is part of the Qt Toolkit.
|
||||||
@@ -47,7 +47,7 @@
|
|||||||
#include <QCameraImageCapture>
|
#include <QCameraImageCapture>
|
||||||
#include <QSet>
|
#include <QSet>
|
||||||
#include <QMutex>
|
#include <QMutex>
|
||||||
#include "qandroidmediastoragelocation.h"
|
#include <private/qmediastoragelocation_p.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
@@ -174,7 +174,7 @@ private:
|
|||||||
int m_currentImageCaptureId;
|
int m_currentImageCaptureId;
|
||||||
QString m_currentImageCaptureFileName;
|
QString m_currentImageCaptureFileName;
|
||||||
|
|
||||||
QAndroidMediaStorageLocation m_mediaStorageLocation;
|
QMediaStorageLocation m_mediaStorageLocation;
|
||||||
|
|
||||||
QSet<QAndroidMediaVideoProbeControl *> m_videoProbes;
|
QSet<QAndroidMediaVideoProbeControl *> m_videoProbes;
|
||||||
QMutex m_videoProbesMutex;
|
QMutex m_videoProbesMutex;
|
||||||
|
|||||||
@@ -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
|
** Contact: http://www.qt-project.org/legal
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Toolkit.
|
** This file is part of the Qt Toolkit.
|
||||||
@@ -65,6 +65,14 @@ QAndroidCaptureSession::QAndroidCaptureSession(QAndroidCameraSession *cameraSess
|
|||||||
, m_audioEncoder(JMediaRecorder::DefaultAudioEncoder)
|
, m_audioEncoder(JMediaRecorder::DefaultAudioEncoder)
|
||||||
, m_videoEncoder(JMediaRecorder::DefaultVideoEncoder)
|
, 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()));
|
connect(this, SIGNAL(stateChanged(QMediaRecorder::State)), this, SLOT(updateStatus()));
|
||||||
|
|
||||||
if (cameraSession) {
|
if (cameraSession) {
|
||||||
@@ -214,8 +222,8 @@ bool QAndroidCaptureSession::start()
|
|||||||
QString filePath = m_mediaStorageLocation.generateFileName(
|
QString filePath = m_mediaStorageLocation.generateFileName(
|
||||||
m_requestedOutputLocation.isLocalFile() ? m_requestedOutputLocation.toLocalFile()
|
m_requestedOutputLocation.isLocalFile() ? m_requestedOutputLocation.toLocalFile()
|
||||||
: m_requestedOutputLocation.toString(),
|
: m_requestedOutputLocation.toString(),
|
||||||
m_cameraSession ? QAndroidMediaStorageLocation::Camera
|
m_cameraSession ? QMediaStorageLocation::Movies
|
||||||
: QAndroidMediaStorageLocation::Audio,
|
: QMediaStorageLocation::Sounds,
|
||||||
m_cameraSession ? QLatin1String("VID_")
|
m_cameraSession ? QLatin1String("VID_")
|
||||||
: QLatin1String("REC_"),
|
: QLatin1String("REC_"),
|
||||||
m_containerFormat);
|
m_containerFormat);
|
||||||
|
|||||||
@@ -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
|
** Contact: http://www.qt-project.org/legal
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Toolkit.
|
** This file is part of the Qt Toolkit.
|
||||||
@@ -47,7 +47,7 @@
|
|||||||
#include <qurl.h>
|
#include <qurl.h>
|
||||||
#include <qelapsedtimer.h>
|
#include <qelapsedtimer.h>
|
||||||
#include <qtimer.h>
|
#include <qtimer.h>
|
||||||
#include "qandroidmediastoragelocation.h"
|
#include <private/qmediastoragelocation_p.h>
|
||||||
#include "jmediarecorder.h"
|
#include "jmediarecorder.h"
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
@@ -152,7 +152,7 @@ private:
|
|||||||
QString m_audioInput;
|
QString m_audioInput;
|
||||||
JMediaRecorder::AudioSource m_audioSource;
|
JMediaRecorder::AudioSource m_audioSource;
|
||||||
|
|
||||||
QAndroidMediaStorageLocation m_mediaStorageLocation;
|
QMediaStorageLocation m_mediaStorageLocation;
|
||||||
|
|
||||||
QElapsedTimer m_elapsedTime;
|
QElapsedTimer m_elapsedTime;
|
||||||
QTimer m_notifyTimer;
|
QTimer m_notifyTimer;
|
||||||
|
|||||||
Reference in New Issue
Block a user