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
@@ -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 \
|
||||
|
||||
@@ -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"));
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -1,130 +0,0 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
||||
** Contact: http://www.qt-project.org/legal
|
||||
**
|
||||
** This file is part of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and Digia. For licensing terms and
|
||||
** conditions see http://qt.digia.com/licensing. For further information
|
||||
** use the contact form at http://qt.digia.com/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Digia gives you certain additional
|
||||
** rights. These rights are described in the Digia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3.0 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU General Public License version 3.0 requirements will be
|
||||
** met: http://www.gnu.org/copyleft/gpl.html.
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "qandroidmediastoragelocation.h"
|
||||
|
||||
#include "jmultimediautils.h"
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
QAndroidMediaStorageLocation::QAndroidMediaStorageLocation()
|
||||
{
|
||||
}
|
||||
|
||||
QDir QAndroidMediaStorageLocation::defaultDir(CaptureSource source) const
|
||||
{
|
||||
QStringList dirCandidates;
|
||||
|
||||
if (source == Camera)
|
||||
dirCandidates << JMultimediaUtils::getDefaultMediaDirectory(JMultimediaUtils::DCIM);
|
||||
else
|
||||
dirCandidates << JMultimediaUtils::getDefaultMediaDirectory(JMultimediaUtils::Sounds);
|
||||
dirCandidates << QDir::homePath();
|
||||
dirCandidates << QDir::currentPath();
|
||||
dirCandidates << QDir::tempPath();
|
||||
|
||||
Q_FOREACH (const QString &path, dirCandidates) {
|
||||
if (QFileInfo(path).isWritable())
|
||||
return QDir(path);
|
||||
}
|
||||
|
||||
return QDir();
|
||||
}
|
||||
|
||||
QString QAndroidMediaStorageLocation::generateFileName(const QString &requestedName,
|
||||
CaptureSource source,
|
||||
const QString &prefix,
|
||||
const QString &extension) const
|
||||
{
|
||||
if (requestedName.isEmpty())
|
||||
return generateFileName(prefix, defaultDir(source), extension);
|
||||
|
||||
QString path = requestedName;
|
||||
|
||||
if (QFileInfo(path).isRelative())
|
||||
path = defaultDir(source).absoluteFilePath(path);
|
||||
|
||||
if (QFileInfo(path).isDir())
|
||||
return generateFileName(prefix, QDir(path), extension);
|
||||
|
||||
if (!path.endsWith(extension))
|
||||
path.append(QString(".%1").arg(extension));
|
||||
|
||||
return path;
|
||||
}
|
||||
|
||||
QString QAndroidMediaStorageLocation::generateFileName(const QString &prefix,
|
||||
const QDir &dir,
|
||||
const QString &extension) const
|
||||
{
|
||||
QMutexLocker lock(&m_mutex);
|
||||
|
||||
const QString lastMediaKey = dir.absolutePath() + QLatin1Char(' ') + prefix + QLatin1Char(' ') + extension;
|
||||
qint64 lastMediaIndex = m_lastUsedIndex.value(lastMediaKey, 0);
|
||||
|
||||
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))) {
|
||||
const qint64 mediaIndex = fileName.midRef(prefix.length(), fileName.size() - prefix.length() - extension.length() - 1).toInt();
|
||||
lastMediaIndex = qMax(lastMediaIndex, mediaIndex);
|
||||
}
|
||||
}
|
||||
|
||||
// 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)
|
||||
.arg(lastMediaIndex + 1, 8, 10, QLatin1Char('0'))
|
||||
.arg(extension);
|
||||
|
||||
const QString path = dir.absoluteFilePath(name);
|
||||
if (!QFileInfo(path).exists()) {
|
||||
m_lastUsedIndex[lastMediaKey] = lastMediaIndex + 1;
|
||||
return path;
|
||||
}
|
||||
|
||||
lastMediaIndex++;
|
||||
}
|
||||
|
||||
return QString();
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
@@ -1,75 +0,0 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
||||
** Contact: http://www.qt-project.org/legal
|
||||
**
|
||||
** This file is part of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and Digia. For licensing terms and
|
||||
** conditions see http://qt.digia.com/licensing. For further information
|
||||
** use the contact form at http://qt.digia.com/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Digia gives you certain additional
|
||||
** rights. These rights are described in the Digia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3.0 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU General Public License version 3.0 requirements will be
|
||||
** met: http://www.gnu.org/copyleft/gpl.html.
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QANDROIDMEDIASTORAGELOCATION_H
|
||||
#define QANDROIDMEDIASTORAGELOCATION_H
|
||||
|
||||
#include <QCamera>
|
||||
#include <QDir>
|
||||
#include <QHash>
|
||||
#include <QMutex>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class QAndroidMediaStorageLocation
|
||||
{
|
||||
public:
|
||||
enum CaptureSource {
|
||||
Camera,
|
||||
Audio
|
||||
};
|
||||
|
||||
QAndroidMediaStorageLocation();
|
||||
|
||||
QDir defaultDir(CaptureSource source) const;
|
||||
|
||||
QString generateFileName(const QString &requestedName, CaptureSource source, 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;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#endif // QANDROIDMEDIASTORAGELOCATION_H
|
||||
Reference in New Issue
Block a user