Android: Rename the wrapper classes
Change-Id: I2ce15c8475da3186f128ba59b7c58f9b5b0a67e1 Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
This commit is contained in:
committed by
The Qt Project
parent
efa4628e74
commit
9214742012
@@ -40,8 +40,8 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "qandroidvideorendercontrol.h"
|
#include "qandroidvideorendercontrol.h"
|
||||||
|
#include "androidsurfacetexture.h"
|
||||||
|
|
||||||
#include <QtCore/private/qjni_p.h>
|
|
||||||
#include <QAbstractVideoSurface>
|
#include <QAbstractVideoSurface>
|
||||||
#include <QVideoSurfaceFormat>
|
#include <QVideoSurfaceFormat>
|
||||||
#include <qevent.h>
|
#include <qevent.h>
|
||||||
@@ -50,7 +50,6 @@
|
|||||||
#include <qopenglfunctions.h>
|
#include <qopenglfunctions.h>
|
||||||
#include <qopenglshaderprogram.h>
|
#include <qopenglshaderprogram.h>
|
||||||
#include <qopenglframebufferobject.h>
|
#include <qopenglframebufferobject.h>
|
||||||
#include <QtCore/private/qjnihelpers_p.h>
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
@@ -175,7 +174,7 @@ bool QAndroidVideoRendererControl::initSurfaceTexture()
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_surfaceTexture = new JSurfaceTexture(m_externalTex);
|
m_surfaceTexture = new AndroidSurfaceTexture(m_externalTex);
|
||||||
|
|
||||||
if (m_surfaceTexture->object()) {
|
if (m_surfaceTexture->object()) {
|
||||||
connect(m_surfaceTexture, SIGNAL(frameAvailable()), this, SLOT(onFrameAvailable()));
|
connect(m_surfaceTexture, SIGNAL(frameAvailable()), this, SLOT(onFrameAvailable()));
|
||||||
|
|||||||
@@ -45,13 +45,13 @@
|
|||||||
#include <qvideorenderercontrol.h>
|
#include <qvideorenderercontrol.h>
|
||||||
#include <qmutex.h>
|
#include <qmutex.h>
|
||||||
#include "qandroidvideooutput.h"
|
#include "qandroidvideooutput.h"
|
||||||
#include "jsurfacetexture.h"
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
class QOpenGLTexture;
|
class QOpenGLTexture;
|
||||||
class QOpenGLFramebufferObject;
|
class QOpenGLFramebufferObject;
|
||||||
class QOpenGLShaderProgram;
|
class QOpenGLShaderProgram;
|
||||||
|
class AndroidSurfaceTexture;
|
||||||
|
|
||||||
class OpenGLResourcesDeleter : public QObject
|
class OpenGLResourcesDeleter : public QObject
|
||||||
{
|
{
|
||||||
@@ -113,7 +113,7 @@ private:
|
|||||||
QSize m_nativeSize;
|
QSize m_nativeSize;
|
||||||
|
|
||||||
QJNIObjectPrivate *m_androidSurface;
|
QJNIObjectPrivate *m_androidSurface;
|
||||||
JSurfaceTexture *m_surfaceTexture;
|
AndroidSurfaceTexture *m_surfaceTexture;
|
||||||
QJNIObjectPrivate *m_surfaceHolder;
|
QJNIObjectPrivate *m_surfaceHolder;
|
||||||
|
|
||||||
quint32 m_externalTex;
|
quint32 m_externalTex;
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
#include "qandroidcameraexposurecontrol.h"
|
#include "qandroidcameraexposurecontrol.h"
|
||||||
|
|
||||||
#include "qandroidcamerasession.h"
|
#include "qandroidcamerasession.h"
|
||||||
#include "jcamera.h"
|
#include "androidcamera.h"
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
#include "qandroidcameraflashcontrol.h"
|
#include "qandroidcameraflashcontrol.h"
|
||||||
|
|
||||||
#include "qandroidcamerasession.h"
|
#include "qandroidcamerasession.h"
|
||||||
#include "jcamera.h"
|
#include "androidcamera.h"
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
#include "qandroidcamerafocuscontrol.h"
|
#include "qandroidcamerafocuscontrol.h"
|
||||||
|
|
||||||
#include "qandroidcamerasession.h"
|
#include "qandroidcamerasession.h"
|
||||||
#include "jcamera.h"
|
#include "androidcamera.h"
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
#include "qandroidcameraimageprocessingcontrol.h"
|
#include "qandroidcameraimageprocessingcontrol.h"
|
||||||
|
|
||||||
#include "qandroidcamerasession.h"
|
#include "qandroidcamerasession.h"
|
||||||
#include "jcamera.h"
|
#include "androidcamera.h"
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
#include "qandroidcameralockscontrol.h"
|
#include "qandroidcameralockscontrol.h"
|
||||||
|
|
||||||
#include "qandroidcamerasession.h"
|
#include "qandroidcamerasession.h"
|
||||||
#include "jcamera.h"
|
#include "androidcamera.h"
|
||||||
#include <qtimer.h>
|
#include <qtimer.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|||||||
@@ -41,8 +41,8 @@
|
|||||||
|
|
||||||
#include "qandroidcamerasession.h"
|
#include "qandroidcamerasession.h"
|
||||||
|
|
||||||
#include "jcamera.h"
|
#include "androidcamera.h"
|
||||||
#include "jmultimediautils.h"
|
#include "androidmultimediautils.h"
|
||||||
#include "qandroidvideooutput.h"
|
#include "qandroidvideooutput.h"
|
||||||
#include "qandroidmediavideoprobecontrol.h"
|
#include "qandroidmediavideoprobecontrol.h"
|
||||||
#include "qandroidmultimediautils.h"
|
#include "qandroidmultimediautils.h"
|
||||||
@@ -113,7 +113,7 @@ QAndroidCameraSession::QAndroidCameraSession(QObject *parent)
|
|||||||
{
|
{
|
||||||
m_mediaStorageLocation.addStorageLocation(
|
m_mediaStorageLocation.addStorageLocation(
|
||||||
QMediaStorageLocation::Pictures,
|
QMediaStorageLocation::Pictures,
|
||||||
JMultimediaUtils::getDefaultMediaDirectory(JMultimediaUtils::DCIM));
|
AndroidMultimediaUtils::getDefaultMediaDirectory(AndroidMultimediaUtils::DCIM));
|
||||||
|
|
||||||
if (qApp) {
|
if (qApp) {
|
||||||
connect(qApp, SIGNAL(applicationStateChanged(Qt::ApplicationState)),
|
connect(qApp, SIGNAL(applicationStateChanged(Qt::ApplicationState)),
|
||||||
@@ -195,17 +195,17 @@ void QAndroidCameraSession::updateAvailableCameras()
|
|||||||
"(ILandroid/hardware/Camera$CameraInfo;)V",
|
"(ILandroid/hardware/Camera$CameraInfo;)V",
|
||||||
i, cameraInfo.object());
|
i, cameraInfo.object());
|
||||||
|
|
||||||
JCamera::CameraFacing facing = JCamera::CameraFacing(cameraInfo.getField<jint>("facing"));
|
AndroidCamera::CameraFacing facing = AndroidCamera::CameraFacing(cameraInfo.getField<jint>("facing"));
|
||||||
// The orientation provided by Android is counter-clockwise, we need it clockwise
|
// The orientation provided by Android is counter-clockwise, we need it clockwise
|
||||||
info.orientation = (360 - cameraInfo.getField<jint>("orientation")) % 360;
|
info.orientation = (360 - cameraInfo.getField<jint>("orientation")) % 360;
|
||||||
|
|
||||||
switch (facing) {
|
switch (facing) {
|
||||||
case JCamera::CameraFacingBack:
|
case AndroidCamera::CameraFacingBack:
|
||||||
info.name = QByteArray("back");
|
info.name = QByteArray("back");
|
||||||
info.description = QStringLiteral("Rear-facing camera");
|
info.description = QStringLiteral("Rear-facing camera");
|
||||||
info.position = QCamera::BackFace;
|
info.position = QCamera::BackFace;
|
||||||
break;
|
break;
|
||||||
case JCamera::CameraFacingFront:
|
case AndroidCamera::CameraFacingFront:
|
||||||
info.name = QByteArray("front");
|
info.name = QByteArray("front");
|
||||||
info.description = QStringLiteral("Front-facing camera");
|
info.description = QStringLiteral("Front-facing camera");
|
||||||
info.position = QCamera::FrontFace;
|
info.position = QCamera::FrontFace;
|
||||||
@@ -234,7 +234,7 @@ bool QAndroidCameraSession::open()
|
|||||||
m_status = QCamera::LoadingStatus;
|
m_status = QCamera::LoadingStatus;
|
||||||
emit statusChanged(m_status);
|
emit statusChanged(m_status);
|
||||||
|
|
||||||
m_camera = JCamera::open(m_selectedCamera);
|
m_camera = AndroidCamera::open(m_selectedCamera);
|
||||||
|
|
||||||
if (m_camera) {
|
if (m_camera) {
|
||||||
connect(m_camera, SIGNAL(pictureExposed()), this, SLOT(onCameraPictureExposed()));
|
connect(m_camera, SIGNAL(pictureExposed()), this, SLOT(onCameraPictureExposed()));
|
||||||
@@ -250,8 +250,8 @@ bool QAndroidCameraSession::open()
|
|||||||
|
|
||||||
m_status = QCamera::LoadedStatus;
|
m_status = QCamera::LoadedStatus;
|
||||||
|
|
||||||
if (m_camera->getPreviewFormat() != JCamera::NV21)
|
if (m_camera->getPreviewFormat() != AndroidCamera::NV21)
|
||||||
m_camera->setPreviewFormat(JCamera::NV21);
|
m_camera->setPreviewFormat(AndroidCamera::NV21);
|
||||||
|
|
||||||
m_camera->fetchEachFrame(m_videoProbes.count());
|
m_camera->fetchEachFrame(m_videoProbes.count());
|
||||||
|
|
||||||
@@ -356,7 +356,7 @@ void QAndroidCameraSession::startPreview()
|
|||||||
if (m_videoOutput && m_videoOutput->isReady())
|
if (m_videoOutput && m_videoOutput->isReady())
|
||||||
onVideoOutputReady(true);
|
onVideoOutputReady(true);
|
||||||
|
|
||||||
JMultimediaUtils::enableOrientationListener(true);
|
AndroidMultimediaUtils::enableOrientationListener(true);
|
||||||
|
|
||||||
m_camera->startPreview();
|
m_camera->startPreview();
|
||||||
m_previewStarted = true;
|
m_previewStarted = true;
|
||||||
@@ -370,7 +370,7 @@ void QAndroidCameraSession::stopPreview()
|
|||||||
m_status = QCamera::StoppingStatus;
|
m_status = QCamera::StoppingStatus;
|
||||||
emit statusChanged(m_status);
|
emit statusChanged(m_status);
|
||||||
|
|
||||||
JMultimediaUtils::enableOrientationListener(false);
|
AndroidMultimediaUtils::enableOrientationListener(false);
|
||||||
|
|
||||||
m_camera->stopPreview();
|
m_camera->stopPreview();
|
||||||
m_camera->setPreviewSize(QSize());
|
m_camera->setPreviewSize(QSize());
|
||||||
@@ -407,8 +407,8 @@ int QAndroidCameraSession::currentCameraRotation() const
|
|||||||
|
|
||||||
// subtract natural camera orientation and physical device orientation
|
// subtract natural camera orientation and physical device orientation
|
||||||
int rotation = 0;
|
int rotation = 0;
|
||||||
int deviceOrientation = (JMultimediaUtils::getDeviceOrientation() + 45) / 90 * 90;
|
int deviceOrientation = (AndroidMultimediaUtils::getDeviceOrientation() + 45) / 90 * 90;
|
||||||
if (m_camera->getFacing() == JCamera::CameraFacingFront)
|
if (m_camera->getFacing() == AndroidCamera::CameraFacingFront)
|
||||||
rotation = (m_nativeOrientation - deviceOrientation + 360) % 360;
|
rotation = (m_nativeOrientation - deviceOrientation + 360) % 360;
|
||||||
else // back-facing camera
|
else // back-facing camera
|
||||||
rotation = (m_nativeOrientation + deviceOrientation) % 360;
|
rotation = (m_nativeOrientation + deviceOrientation) % 360;
|
||||||
@@ -658,9 +658,9 @@ void QAndroidCameraSession::processCapturedImage(int id,
|
|||||||
// if the picture is saved into the standard picture location, register it
|
// if the picture is saved into the standard picture location, register it
|
||||||
// with the Android media scanner so it appears immediately in apps
|
// with the Android media scanner so it appears immediately in apps
|
||||||
// such as the gallery.
|
// such as the gallery.
|
||||||
QString standardLoc = JMultimediaUtils::getDefaultMediaDirectory(JMultimediaUtils::DCIM);
|
QString standardLoc = AndroidMultimediaUtils::getDefaultMediaDirectory(AndroidMultimediaUtils::DCIM);
|
||||||
if (actualFileName.startsWith(standardLoc))
|
if (actualFileName.startsWith(standardLoc))
|
||||||
JMultimediaUtils::registerMediaFile(actualFileName);
|
AndroidMultimediaUtils::registerMediaFile(actualFileName);
|
||||||
|
|
||||||
emit imageSaved(id, actualFileName);
|
emit imageSaved(id, actualFileName);
|
||||||
} else {
|
} else {
|
||||||
@@ -697,7 +697,7 @@ QImage QAndroidCameraSession::prepareImageFromPreviewData(const QByteArray &data
|
|||||||
// Preview display of front-facing cameras is flipped horizontally, but the frame data
|
// Preview display of front-facing cameras is flipped horizontally, but the frame data
|
||||||
// we get here is not. Flip it ourselves if the camera is front-facing to match what the user
|
// we get here is not. Flip it ourselves if the camera is front-facing to match what the user
|
||||||
// sees on the viewfinder.
|
// sees on the viewfinder.
|
||||||
if (m_camera->getFacing() == JCamera::CameraFacingFront)
|
if (m_camera->getFacing() == AndroidCamera::CameraFacingFront)
|
||||||
transform.scale(-1, 1);
|
transform.scale(-1, 1);
|
||||||
|
|
||||||
transform.rotate(rotation);
|
transform.rotate(rotation);
|
||||||
|
|||||||
@@ -51,7 +51,7 @@
|
|||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
class JCamera;
|
class AndroidCamera;
|
||||||
class QAndroidVideoOutput;
|
class QAndroidVideoOutput;
|
||||||
class QAndroidMediaVideoProbeControl;
|
class QAndroidMediaVideoProbeControl;
|
||||||
|
|
||||||
@@ -73,7 +73,7 @@ public:
|
|||||||
static const QList<AndroidCameraInfo> &availableCameras();
|
static const QList<AndroidCameraInfo> &availableCameras();
|
||||||
|
|
||||||
void setSelectedCamera(int cameraId) { m_selectedCamera = cameraId; }
|
void setSelectedCamera(int cameraId) { m_selectedCamera = cameraId; }
|
||||||
JCamera *camera() const { return m_camera; }
|
AndroidCamera *camera() const { return m_camera; }
|
||||||
|
|
||||||
QCamera::State state() const { return m_state; }
|
QCamera::State state() const { return m_state; }
|
||||||
void setState(QCamera::State state);
|
void setState(QCamera::State state);
|
||||||
@@ -154,7 +154,7 @@ private:
|
|||||||
const QString &fileName);
|
const QString &fileName);
|
||||||
|
|
||||||
int m_selectedCamera;
|
int m_selectedCamera;
|
||||||
JCamera *m_camera;
|
AndroidCamera *m_camera;
|
||||||
int m_nativeOrientation;
|
int m_nativeOrientation;
|
||||||
QAndroidVideoOutput *m_videoOutput;
|
QAndroidVideoOutput *m_videoOutput;
|
||||||
|
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
#include "qandroidcamerazoomcontrol.h"
|
#include "qandroidcamerazoomcontrol.h"
|
||||||
|
|
||||||
#include "qandroidcamerasession.h"
|
#include "qandroidcamerasession.h"
|
||||||
#include "jcamera.h"
|
#include "androidcamera.h"
|
||||||
#include "qandroidmultimediautils.h"
|
#include "qandroidmultimediautils.h"
|
||||||
#include <qmath.h>
|
#include <qmath.h>
|
||||||
|
|
||||||
|
|||||||
@@ -41,11 +41,10 @@
|
|||||||
|
|
||||||
#include "qandroidcapturesession.h"
|
#include "qandroidcapturesession.h"
|
||||||
|
|
||||||
#include "jcamera.h"
|
#include "androidcamera.h"
|
||||||
#include "qandroidcamerasession.h"
|
#include "qandroidcamerasession.h"
|
||||||
#include "jmultimediautils.h"
|
#include "androidmultimediautils.h"
|
||||||
#include "qandroidmultimediautils.h"
|
#include "qandroidmultimediautils.h"
|
||||||
#include <QtCore/private/qjni_p.h>
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
@@ -53,7 +52,7 @@ QAndroidCaptureSession::QAndroidCaptureSession(QAndroidCameraSession *cameraSess
|
|||||||
: QObject()
|
: QObject()
|
||||||
, m_mediaRecorder(0)
|
, m_mediaRecorder(0)
|
||||||
, m_cameraSession(cameraSession)
|
, m_cameraSession(cameraSession)
|
||||||
, m_audioSource(JMediaRecorder::DefaultAudioSource)
|
, m_audioSource(AndroidMediaRecorder::DefaultAudioSource)
|
||||||
, m_duration(0)
|
, m_duration(0)
|
||||||
, m_state(QMediaRecorder::StoppedState)
|
, m_state(QMediaRecorder::StoppedState)
|
||||||
, m_status(QMediaRecorder::UnloadedStatus)
|
, m_status(QMediaRecorder::UnloadedStatus)
|
||||||
@@ -61,17 +60,17 @@ QAndroidCaptureSession::QAndroidCaptureSession(QAndroidCameraSession *cameraSess
|
|||||||
, m_containerFormatDirty(true)
|
, m_containerFormatDirty(true)
|
||||||
, m_videoSettingsDirty(true)
|
, m_videoSettingsDirty(true)
|
||||||
, m_audioSettingsDirty(true)
|
, m_audioSettingsDirty(true)
|
||||||
, m_outputFormat(JMediaRecorder::DefaultOutputFormat)
|
, m_outputFormat(AndroidMediaRecorder::DefaultOutputFormat)
|
||||||
, m_audioEncoder(JMediaRecorder::DefaultAudioEncoder)
|
, m_audioEncoder(AndroidMediaRecorder::DefaultAudioEncoder)
|
||||||
, m_videoEncoder(JMediaRecorder::DefaultVideoEncoder)
|
, m_videoEncoder(AndroidMediaRecorder::DefaultVideoEncoder)
|
||||||
{
|
{
|
||||||
m_mediaStorageLocation.addStorageLocation(
|
m_mediaStorageLocation.addStorageLocation(
|
||||||
QMediaStorageLocation::Movies,
|
QMediaStorageLocation::Movies,
|
||||||
JMultimediaUtils::getDefaultMediaDirectory(JMultimediaUtils::DCIM));
|
AndroidMultimediaUtils::getDefaultMediaDirectory(AndroidMultimediaUtils::DCIM));
|
||||||
|
|
||||||
m_mediaStorageLocation.addStorageLocation(
|
m_mediaStorageLocation.addStorageLocation(
|
||||||
QMediaStorageLocation::Sounds,
|
QMediaStorageLocation::Sounds,
|
||||||
JMultimediaUtils::getDefaultMediaDirectory(JMultimediaUtils::Sounds));
|
AndroidMultimediaUtils::getDefaultMediaDirectory(AndroidMultimediaUtils::Sounds));
|
||||||
|
|
||||||
connect(this, SIGNAL(stateChanged(QMediaRecorder::State)), this, SLOT(updateStatus()));
|
connect(this, SIGNAL(stateChanged(QMediaRecorder::State)), this, SLOT(updateStatus()));
|
||||||
|
|
||||||
@@ -103,19 +102,19 @@ void QAndroidCaptureSession::setAudioInput(const QString &input)
|
|||||||
m_audioInput = input;
|
m_audioInput = input;
|
||||||
|
|
||||||
if (m_audioInput == QLatin1String("default"))
|
if (m_audioInput == QLatin1String("default"))
|
||||||
m_audioSource = JMediaRecorder::DefaultAudioSource;
|
m_audioSource = AndroidMediaRecorder::DefaultAudioSource;
|
||||||
else if (m_audioInput == QLatin1String("mic"))
|
else if (m_audioInput == QLatin1String("mic"))
|
||||||
m_audioSource = JMediaRecorder::Mic;
|
m_audioSource = AndroidMediaRecorder::Mic;
|
||||||
else if (m_audioInput == QLatin1String("voice_uplink"))
|
else if (m_audioInput == QLatin1String("voice_uplink"))
|
||||||
m_audioSource = JMediaRecorder::VoiceUplink;
|
m_audioSource = AndroidMediaRecorder::VoiceUplink;
|
||||||
else if (m_audioInput == QLatin1String("voice_downlink"))
|
else if (m_audioInput == QLatin1String("voice_downlink"))
|
||||||
m_audioSource = JMediaRecorder::VoiceDownlink;
|
m_audioSource = AndroidMediaRecorder::VoiceDownlink;
|
||||||
else if (m_audioInput == QLatin1String("voice_call"))
|
else if (m_audioInput == QLatin1String("voice_call"))
|
||||||
m_audioSource = JMediaRecorder::VoiceCall;
|
m_audioSource = AndroidMediaRecorder::VoiceCall;
|
||||||
else if (m_audioInput == QLatin1String("voice_recognition"))
|
else if (m_audioInput == QLatin1String("voice_recognition"))
|
||||||
m_audioSource = JMediaRecorder::VoiceRecognition;
|
m_audioSource = AndroidMediaRecorder::VoiceRecognition;
|
||||||
else
|
else
|
||||||
m_audioSource = JMediaRecorder::DefaultAudioSource;
|
m_audioSource = AndroidMediaRecorder::DefaultAudioSource;
|
||||||
|
|
||||||
emit audioInputChanged(m_audioInput);
|
emit audioInputChanged(m_audioInput);
|
||||||
}
|
}
|
||||||
@@ -184,7 +183,7 @@ bool QAndroidCaptureSession::start()
|
|||||||
m_mediaRecorder->release();
|
m_mediaRecorder->release();
|
||||||
delete m_mediaRecorder;
|
delete m_mediaRecorder;
|
||||||
}
|
}
|
||||||
m_mediaRecorder = new JMediaRecorder;
|
m_mediaRecorder = new AndroidMediaRecorder;
|
||||||
connect(m_mediaRecorder, SIGNAL(error(int,int)), this, SLOT(onError(int,int)));
|
connect(m_mediaRecorder, SIGNAL(error(int,int)), this, SLOT(onError(int,int)));
|
||||||
connect(m_mediaRecorder, SIGNAL(info(int,int)), this, SLOT(onInfo(int,int)));
|
connect(m_mediaRecorder, SIGNAL(info(int,int)), this, SLOT(onInfo(int,int)));
|
||||||
|
|
||||||
@@ -193,8 +192,8 @@ bool QAndroidCaptureSession::start()
|
|||||||
updateViewfinder();
|
updateViewfinder();
|
||||||
m_cameraSession->camera()->unlock();
|
m_cameraSession->camera()->unlock();
|
||||||
m_mediaRecorder->setCamera(m_cameraSession->camera());
|
m_mediaRecorder->setCamera(m_cameraSession->camera());
|
||||||
m_mediaRecorder->setAudioSource(JMediaRecorder::Camcorder);
|
m_mediaRecorder->setAudioSource(AndroidMediaRecorder::Camcorder);
|
||||||
m_mediaRecorder->setVideoSource(JMediaRecorder::Camera);
|
m_mediaRecorder->setVideoSource(AndroidMediaRecorder::Camera);
|
||||||
} else {
|
} else {
|
||||||
m_mediaRecorder->setAudioSource(m_audioSource);
|
m_mediaRecorder->setAudioSource(m_audioSource);
|
||||||
}
|
}
|
||||||
@@ -280,10 +279,10 @@ void QAndroidCaptureSession::stop(bool error)
|
|||||||
// with the Android media scanner so it appears immediately in apps
|
// with the Android media scanner so it appears immediately in apps
|
||||||
// such as the gallery.
|
// such as the gallery.
|
||||||
QString mediaPath = m_actualOutputLocation.toLocalFile();
|
QString mediaPath = m_actualOutputLocation.toLocalFile();
|
||||||
QString standardLoc = m_cameraSession ? JMultimediaUtils::getDefaultMediaDirectory(JMultimediaUtils::DCIM)
|
QString standardLoc = m_cameraSession ? AndroidMultimediaUtils::getDefaultMediaDirectory(AndroidMultimediaUtils::DCIM)
|
||||||
: JMultimediaUtils::getDefaultMediaDirectory(JMultimediaUtils::Sounds);
|
: AndroidMultimediaUtils::getDefaultMediaDirectory(AndroidMultimediaUtils::Sounds);
|
||||||
if (mediaPath.startsWith(standardLoc))
|
if (mediaPath.startsWith(standardLoc))
|
||||||
JMultimediaUtils::registerMediaFile(mediaPath);
|
AndroidMultimediaUtils::registerMediaFile(mediaPath);
|
||||||
|
|
||||||
m_actualOutputLocation = m_usedOutputLocation;
|
m_actualOutputLocation = m_usedOutputLocation;
|
||||||
emit actualLocationChanged(m_actualOutputLocation);
|
emit actualLocationChanged(m_actualOutputLocation);
|
||||||
@@ -347,14 +346,14 @@ void QAndroidCaptureSession::applySettings()
|
|||||||
m_containerFormat = m_defaultSettings.outputFileExtension;
|
m_containerFormat = m_defaultSettings.outputFileExtension;
|
||||||
m_outputFormat = m_defaultSettings.outputFormat;
|
m_outputFormat = m_defaultSettings.outputFormat;
|
||||||
} else if (m_containerFormat == QLatin1String("3gp")) {
|
} else if (m_containerFormat == QLatin1String("3gp")) {
|
||||||
m_outputFormat = JMediaRecorder::THREE_GPP;
|
m_outputFormat = AndroidMediaRecorder::THREE_GPP;
|
||||||
} else if (!m_cameraSession && m_containerFormat == QLatin1String("amr")) {
|
} else if (!m_cameraSession && m_containerFormat == QLatin1String("amr")) {
|
||||||
m_outputFormat = JMediaRecorder::AMR_NB_Format;
|
m_outputFormat = AndroidMediaRecorder::AMR_NB_Format;
|
||||||
} else if (!m_cameraSession && m_containerFormat == QLatin1String("awb")) {
|
} else if (!m_cameraSession && m_containerFormat == QLatin1String("awb")) {
|
||||||
m_outputFormat = JMediaRecorder::AMR_WB_Format;
|
m_outputFormat = AndroidMediaRecorder::AMR_WB_Format;
|
||||||
} else {
|
} else {
|
||||||
m_containerFormat = QStringLiteral("mp4");
|
m_containerFormat = QStringLiteral("mp4");
|
||||||
m_outputFormat = JMediaRecorder::MPEG_4;
|
m_outputFormat = AndroidMediaRecorder::MPEG_4;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_containerFormatDirty = false;
|
m_containerFormatDirty = false;
|
||||||
@@ -372,11 +371,11 @@ void QAndroidCaptureSession::applySettings()
|
|||||||
if (m_audioSettings.codec().isEmpty())
|
if (m_audioSettings.codec().isEmpty())
|
||||||
m_audioEncoder = m_defaultSettings.audioEncoder;
|
m_audioEncoder = m_defaultSettings.audioEncoder;
|
||||||
else if (m_audioSettings.codec() == QLatin1String("aac"))
|
else if (m_audioSettings.codec() == QLatin1String("aac"))
|
||||||
m_audioEncoder = JMediaRecorder::AAC;
|
m_audioEncoder = AndroidMediaRecorder::AAC;
|
||||||
else if (m_audioSettings.codec() == QLatin1String("amr-nb"))
|
else if (m_audioSettings.codec() == QLatin1String("amr-nb"))
|
||||||
m_audioEncoder = JMediaRecorder::AMR_NB_Encoder;
|
m_audioEncoder = AndroidMediaRecorder::AMR_NB_Encoder;
|
||||||
else if (m_audioSettings.codec() == QLatin1String("amr-wb"))
|
else if (m_audioSettings.codec() == QLatin1String("amr-wb"))
|
||||||
m_audioEncoder = JMediaRecorder::AMR_WB_Encoder;
|
m_audioEncoder = AndroidMediaRecorder::AMR_WB_Encoder;
|
||||||
else
|
else
|
||||||
m_audioEncoder = m_defaultSettings.audioEncoder;
|
m_audioEncoder = m_defaultSettings.audioEncoder;
|
||||||
|
|
||||||
@@ -410,11 +409,11 @@ void QAndroidCaptureSession::applySettings()
|
|||||||
if (m_videoSettings.codec().isEmpty())
|
if (m_videoSettings.codec().isEmpty())
|
||||||
m_videoEncoder = m_defaultSettings.videoEncoder;
|
m_videoEncoder = m_defaultSettings.videoEncoder;
|
||||||
else if (m_videoSettings.codec() == QLatin1String("h263"))
|
else if (m_videoSettings.codec() == QLatin1String("h263"))
|
||||||
m_videoEncoder = JMediaRecorder::H263;
|
m_videoEncoder = AndroidMediaRecorder::H263;
|
||||||
else if (m_videoSettings.codec() == QLatin1String("h264"))
|
else if (m_videoSettings.codec() == QLatin1String("h264"))
|
||||||
m_videoEncoder = JMediaRecorder::H264;
|
m_videoEncoder = AndroidMediaRecorder::H264;
|
||||||
else if (m_videoSettings.codec() == QLatin1String("mpeg4_sp"))
|
else if (m_videoSettings.codec() == QLatin1String("mpeg4_sp"))
|
||||||
m_videoEncoder = JMediaRecorder::MPEG_4_SP;
|
m_videoEncoder = AndroidMediaRecorder::MPEG_4_SP;
|
||||||
else
|
else
|
||||||
m_videoEncoder = m_defaultSettings.videoEncoder;
|
m_videoEncoder = m_defaultSettings.videoEncoder;
|
||||||
|
|
||||||
@@ -489,24 +488,24 @@ QAndroidCaptureSession::CaptureProfile QAndroidCaptureSession::getProfile(int id
|
|||||||
id);
|
id);
|
||||||
|
|
||||||
|
|
||||||
profile.outputFormat = JMediaRecorder::OutputFormat(obj.getField<jint>("fileFormat"));
|
profile.outputFormat = AndroidMediaRecorder::OutputFormat(obj.getField<jint>("fileFormat"));
|
||||||
profile.audioEncoder = JMediaRecorder::AudioEncoder(obj.getField<jint>("audioCodec"));
|
profile.audioEncoder = AndroidMediaRecorder::AudioEncoder(obj.getField<jint>("audioCodec"));
|
||||||
profile.audioBitRate = obj.getField<jint>("audioBitRate");
|
profile.audioBitRate = obj.getField<jint>("audioBitRate");
|
||||||
profile.audioChannels = obj.getField<jint>("audioChannels");
|
profile.audioChannels = obj.getField<jint>("audioChannels");
|
||||||
profile.audioSampleRate = obj.getField<jint>("audioSampleRate");
|
profile.audioSampleRate = obj.getField<jint>("audioSampleRate");
|
||||||
profile.videoEncoder = JMediaRecorder::VideoEncoder(obj.getField<jint>("videoCodec"));
|
profile.videoEncoder = AndroidMediaRecorder::VideoEncoder(obj.getField<jint>("videoCodec"));
|
||||||
profile.videoBitRate = obj.getField<jint>("videoBitRate");
|
profile.videoBitRate = obj.getField<jint>("videoBitRate");
|
||||||
profile.videoFrameRate = obj.getField<jint>("videoFrameRate");
|
profile.videoFrameRate = obj.getField<jint>("videoFrameRate");
|
||||||
profile.videoResolution = QSize(obj.getField<jint>("videoFrameWidth"),
|
profile.videoResolution = QSize(obj.getField<jint>("videoFrameWidth"),
|
||||||
obj.getField<jint>("videoFrameHeight"));
|
obj.getField<jint>("videoFrameHeight"));
|
||||||
|
|
||||||
if (profile.outputFormat == JMediaRecorder::MPEG_4)
|
if (profile.outputFormat == AndroidMediaRecorder::MPEG_4)
|
||||||
profile.outputFileExtension = QStringLiteral("mp4");
|
profile.outputFileExtension = QStringLiteral("mp4");
|
||||||
else if (profile.outputFormat == JMediaRecorder::THREE_GPP)
|
else if (profile.outputFormat == AndroidMediaRecorder::THREE_GPP)
|
||||||
profile.outputFileExtension = QStringLiteral("3gp");
|
profile.outputFileExtension = QStringLiteral("3gp");
|
||||||
else if (profile.outputFormat == JMediaRecorder::AMR_NB_Format)
|
else if (profile.outputFormat == AndroidMediaRecorder::AMR_NB_Format)
|
||||||
profile.outputFileExtension = QStringLiteral("amr");
|
profile.outputFileExtension = QStringLiteral("amr");
|
||||||
else if (profile.outputFormat == JMediaRecorder::AMR_WB_Format)
|
else if (profile.outputFormat == AndroidMediaRecorder::AMR_WB_Format)
|
||||||
profile.outputFileExtension = QStringLiteral("awb");
|
profile.outputFileExtension = QStringLiteral("awb");
|
||||||
|
|
||||||
profile.isNull = false;
|
profile.isNull = false;
|
||||||
|
|||||||
@@ -48,7 +48,7 @@
|
|||||||
#include <qelapsedtimer.h>
|
#include <qelapsedtimer.h>
|
||||||
#include <qtimer.h>
|
#include <qtimer.h>
|
||||||
#include <private/qmediastoragelocation_p.h>
|
#include <private/qmediastoragelocation_p.h>
|
||||||
#include "jmediarecorder.h"
|
#include "androidmediarecorder.h"
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
@@ -106,15 +106,15 @@ private Q_SLOTS:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
struct CaptureProfile {
|
struct CaptureProfile {
|
||||||
JMediaRecorder::OutputFormat outputFormat;
|
AndroidMediaRecorder::OutputFormat outputFormat;
|
||||||
QString outputFileExtension;
|
QString outputFileExtension;
|
||||||
|
|
||||||
JMediaRecorder::AudioEncoder audioEncoder;
|
AndroidMediaRecorder::AudioEncoder audioEncoder;
|
||||||
int audioBitRate;
|
int audioBitRate;
|
||||||
int audioChannels;
|
int audioChannels;
|
||||||
int audioSampleRate;
|
int audioSampleRate;
|
||||||
|
|
||||||
JMediaRecorder::VideoEncoder videoEncoder;
|
AndroidMediaRecorder::VideoEncoder videoEncoder;
|
||||||
int videoBitRate;
|
int videoBitRate;
|
||||||
int videoFrameRate;
|
int videoFrameRate;
|
||||||
QSize videoResolution;
|
QSize videoResolution;
|
||||||
@@ -122,13 +122,13 @@ private:
|
|||||||
bool isNull;
|
bool isNull;
|
||||||
|
|
||||||
CaptureProfile()
|
CaptureProfile()
|
||||||
: outputFormat(JMediaRecorder::MPEG_4)
|
: outputFormat(AndroidMediaRecorder::MPEG_4)
|
||||||
, outputFileExtension(QLatin1String("mp4"))
|
, outputFileExtension(QLatin1String("mp4"))
|
||||||
, audioEncoder(JMediaRecorder::DefaultAudioEncoder)
|
, audioEncoder(AndroidMediaRecorder::DefaultAudioEncoder)
|
||||||
, audioBitRate(128000)
|
, audioBitRate(128000)
|
||||||
, audioChannels(2)
|
, audioChannels(2)
|
||||||
, audioSampleRate(44100)
|
, audioSampleRate(44100)
|
||||||
, videoEncoder(JMediaRecorder::DefaultVideoEncoder)
|
, videoEncoder(AndroidMediaRecorder::DefaultVideoEncoder)
|
||||||
, videoBitRate(1)
|
, videoBitRate(1)
|
||||||
, videoFrameRate(-1)
|
, videoFrameRate(-1)
|
||||||
, videoResolution(320, 240)
|
, videoResolution(320, 240)
|
||||||
@@ -146,11 +146,11 @@ private:
|
|||||||
void updateViewfinder();
|
void updateViewfinder();
|
||||||
void restartViewfinder();
|
void restartViewfinder();
|
||||||
|
|
||||||
JMediaRecorder *m_mediaRecorder;
|
AndroidMediaRecorder *m_mediaRecorder;
|
||||||
QAndroidCameraSession *m_cameraSession;
|
QAndroidCameraSession *m_cameraSession;
|
||||||
|
|
||||||
QString m_audioInput;
|
QString m_audioInput;
|
||||||
JMediaRecorder::AudioSource m_audioSource;
|
AndroidMediaRecorder::AudioSource m_audioSource;
|
||||||
|
|
||||||
QMediaStorageLocation m_mediaStorageLocation;
|
QMediaStorageLocation m_mediaStorageLocation;
|
||||||
|
|
||||||
@@ -173,9 +173,9 @@ private:
|
|||||||
bool m_containerFormatDirty;
|
bool m_containerFormatDirty;
|
||||||
bool m_videoSettingsDirty;
|
bool m_videoSettingsDirty;
|
||||||
bool m_audioSettingsDirty;
|
bool m_audioSettingsDirty;
|
||||||
JMediaRecorder::OutputFormat m_outputFormat;
|
AndroidMediaRecorder::OutputFormat m_outputFormat;
|
||||||
JMediaRecorder::AudioEncoder m_audioEncoder;
|
AndroidMediaRecorder::AudioEncoder m_audioEncoder;
|
||||||
JMediaRecorder::VideoEncoder m_videoEncoder;
|
AndroidMediaRecorder::VideoEncoder m_videoEncoder;
|
||||||
|
|
||||||
QList<QSize> m_supportedResolutions;
|
QList<QSize> m_supportedResolutions;
|
||||||
QList<qreal> m_supportedFramerates;
|
QList<qreal> m_supportedFramerates;
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
#include "qandroidimageencodercontrol.h"
|
#include "qandroidimageencodercontrol.h"
|
||||||
|
|
||||||
#include "qandroidcamerasession.h"
|
#include "qandroidcamerasession.h"
|
||||||
#include "jcamera.h"
|
#include "androidcamera.h"
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
#include "qandroidvideodeviceselectorcontrol.h"
|
#include "qandroidvideodeviceselectorcontrol.h"
|
||||||
|
|
||||||
#include "qandroidcamerasession.h"
|
#include "qandroidcamerasession.h"
|
||||||
#include "jcamera.h"
|
#include "androidcamera.h"
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
|||||||
@@ -40,14 +40,14 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "qandroidmediaplayercontrol.h"
|
#include "qandroidmediaplayercontrol.h"
|
||||||
#include "jmediaplayer.h"
|
#include "androidmediaplayer.h"
|
||||||
#include "qandroidvideooutput.h"
|
#include "qandroidvideooutput.h"
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
QAndroidMediaPlayerControl::QAndroidMediaPlayerControl(QObject *parent)
|
QAndroidMediaPlayerControl::QAndroidMediaPlayerControl(QObject *parent)
|
||||||
: QMediaPlayerControl(parent),
|
: QMediaPlayerControl(parent),
|
||||||
mMediaPlayer(new JMediaPlayer),
|
mMediaPlayer(new AndroidMediaPlayer),
|
||||||
mCurrentState(QMediaPlayer::StoppedState),
|
mCurrentState(QMediaPlayer::StoppedState),
|
||||||
mCurrentMediaStatus(QMediaPlayer::NoMedia),
|
mCurrentMediaStatus(QMediaPlayer::NoMedia),
|
||||||
mMediaStream(0),
|
mMediaStream(0),
|
||||||
@@ -58,7 +58,7 @@ QAndroidMediaPlayerControl::QAndroidMediaPlayerControl(QObject *parent)
|
|||||||
mAudioAvailable(false),
|
mAudioAvailable(false),
|
||||||
mVideoAvailable(false),
|
mVideoAvailable(false),
|
||||||
mBuffering(false),
|
mBuffering(false),
|
||||||
mState(JMediaPlayer::Uninitialized),
|
mState(AndroidMediaPlayer::Uninitialized),
|
||||||
mPendingState(-1),
|
mPendingState(-1),
|
||||||
mPendingPosition(-1),
|
mPendingPosition(-1),
|
||||||
mPendingSetMedia(false),
|
mPendingSetMedia(false),
|
||||||
@@ -99,11 +99,11 @@ QMediaPlayer::MediaStatus QAndroidMediaPlayerControl::mediaStatus() const
|
|||||||
|
|
||||||
qint64 QAndroidMediaPlayerControl::duration() const
|
qint64 QAndroidMediaPlayerControl::duration() const
|
||||||
{
|
{
|
||||||
if ((mState & (JMediaPlayer::Prepared
|
if ((mState & (AndroidMediaPlayer::Prepared
|
||||||
| JMediaPlayer::Started
|
| AndroidMediaPlayer::Started
|
||||||
| JMediaPlayer::Paused
|
| AndroidMediaPlayer::Paused
|
||||||
| JMediaPlayer::Stopped
|
| AndroidMediaPlayer::Stopped
|
||||||
| JMediaPlayer::PlaybackCompleted)) == 0) {
|
| AndroidMediaPlayer::PlaybackCompleted)) == 0) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,13 +115,13 @@ qint64 QAndroidMediaPlayerControl::position() const
|
|||||||
if (mCurrentMediaStatus == QMediaPlayer::EndOfMedia)
|
if (mCurrentMediaStatus == QMediaPlayer::EndOfMedia)
|
||||||
return duration();
|
return duration();
|
||||||
|
|
||||||
if ((mState & (JMediaPlayer::Idle
|
if ((mState & (AndroidMediaPlayer::Idle
|
||||||
| JMediaPlayer::Initialized
|
| AndroidMediaPlayer::Initialized
|
||||||
| JMediaPlayer::Prepared
|
| AndroidMediaPlayer::Prepared
|
||||||
| JMediaPlayer::Started
|
| AndroidMediaPlayer::Started
|
||||||
| JMediaPlayer::Paused
|
| AndroidMediaPlayer::Paused
|
||||||
| JMediaPlayer::Stopped
|
| AndroidMediaPlayer::Stopped
|
||||||
| JMediaPlayer::PlaybackCompleted)) == 0) {
|
| AndroidMediaPlayer::PlaybackCompleted)) == 0) {
|
||||||
return (mPendingPosition == -1) ? 0 : mPendingPosition;
|
return (mPendingPosition == -1) ? 0 : mPendingPosition;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -135,10 +135,10 @@ void QAndroidMediaPlayerControl::setPosition(qint64 position)
|
|||||||
|
|
||||||
const int seekPosition = (position > INT_MAX) ? INT_MAX : position;
|
const int seekPosition = (position > INT_MAX) ? INT_MAX : position;
|
||||||
|
|
||||||
if ((mState & (JMediaPlayer::Prepared
|
if ((mState & (AndroidMediaPlayer::Prepared
|
||||||
| JMediaPlayer::Started
|
| AndroidMediaPlayer::Started
|
||||||
| JMediaPlayer::Paused
|
| AndroidMediaPlayer::Paused
|
||||||
| JMediaPlayer::PlaybackCompleted)) == 0) {
|
| AndroidMediaPlayer::PlaybackCompleted)) == 0) {
|
||||||
if (mPendingPosition != seekPosition) {
|
if (mPendingPosition != seekPosition) {
|
||||||
mPendingPosition = seekPosition;
|
mPendingPosition = seekPosition;
|
||||||
Q_EMIT positionChanged(seekPosition);
|
Q_EMIT positionChanged(seekPosition);
|
||||||
@@ -165,13 +165,13 @@ int QAndroidMediaPlayerControl::volume() const
|
|||||||
|
|
||||||
void QAndroidMediaPlayerControl::setVolume(int volume)
|
void QAndroidMediaPlayerControl::setVolume(int volume)
|
||||||
{
|
{
|
||||||
if ((mState & (JMediaPlayer::Idle
|
if ((mState & (AndroidMediaPlayer::Idle
|
||||||
| JMediaPlayer::Initialized
|
| AndroidMediaPlayer::Initialized
|
||||||
| JMediaPlayer::Stopped
|
| AndroidMediaPlayer::Stopped
|
||||||
| JMediaPlayer::Prepared
|
| AndroidMediaPlayer::Prepared
|
||||||
| JMediaPlayer::Started
|
| AndroidMediaPlayer::Started
|
||||||
| JMediaPlayer::Paused
|
| AndroidMediaPlayer::Paused
|
||||||
| JMediaPlayer::PlaybackCompleted)) == 0) {
|
| AndroidMediaPlayer::PlaybackCompleted)) == 0) {
|
||||||
if (mPendingVolume != volume) {
|
if (mPendingVolume != volume) {
|
||||||
mPendingVolume = volume;
|
mPendingVolume = volume;
|
||||||
Q_EMIT volumeChanged(volume);
|
Q_EMIT volumeChanged(volume);
|
||||||
@@ -196,13 +196,13 @@ bool QAndroidMediaPlayerControl::isMuted() const
|
|||||||
|
|
||||||
void QAndroidMediaPlayerControl::setMuted(bool muted)
|
void QAndroidMediaPlayerControl::setMuted(bool muted)
|
||||||
{
|
{
|
||||||
if ((mState & (JMediaPlayer::Idle
|
if ((mState & (AndroidMediaPlayer::Idle
|
||||||
| JMediaPlayer::Initialized
|
| AndroidMediaPlayer::Initialized
|
||||||
| JMediaPlayer::Stopped
|
| AndroidMediaPlayer::Stopped
|
||||||
| JMediaPlayer::Prepared
|
| AndroidMediaPlayer::Prepared
|
||||||
| JMediaPlayer::Started
|
| AndroidMediaPlayer::Started
|
||||||
| JMediaPlayer::Paused
|
| AndroidMediaPlayer::Paused
|
||||||
| JMediaPlayer::PlaybackCompleted)) == 0) {
|
| AndroidMediaPlayer::PlaybackCompleted)) == 0) {
|
||||||
if (mPendingMute != muted) {
|
if (mPendingMute != muted) {
|
||||||
mPendingMute = muted;
|
mPendingMute = muted;
|
||||||
Q_EMIT mutedChanged(muted);
|
Q_EMIT mutedChanged(muted);
|
||||||
@@ -291,7 +291,7 @@ void QAndroidMediaPlayerControl::setMedia(const QMediaContent &mediaContent,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Release the mediaplayer if it's not in in Idle or Uninitialized state
|
// Release the mediaplayer if it's not in in Idle or Uninitialized state
|
||||||
if ((mState & (JMediaPlayer::Idle | JMediaPlayer::Uninitialized)) == 0)
|
if ((mState & (AndroidMediaPlayer::Idle | AndroidMediaPlayer::Uninitialized)) == 0)
|
||||||
mMediaPlayer->release();
|
mMediaPlayer->release();
|
||||||
|
|
||||||
if (mediaContent.isNull()) {
|
if (mediaContent.isNull()) {
|
||||||
@@ -353,16 +353,16 @@ void QAndroidMediaPlayerControl::setVideoOutput(QObject *videoOutput)
|
|||||||
void QAndroidMediaPlayerControl::play()
|
void QAndroidMediaPlayerControl::play()
|
||||||
{
|
{
|
||||||
// We need to prepare the mediaplayer again.
|
// We need to prepare the mediaplayer again.
|
||||||
if ((mState & JMediaPlayer::Stopped) && !mMediaContent.isNull()) {
|
if ((mState & AndroidMediaPlayer::Stopped) && !mMediaContent.isNull()) {
|
||||||
setMedia(mMediaContent, mMediaStream);
|
setMedia(mMediaContent, mMediaStream);
|
||||||
}
|
}
|
||||||
|
|
||||||
setState(QMediaPlayer::PlayingState);
|
setState(QMediaPlayer::PlayingState);
|
||||||
|
|
||||||
if ((mState & (JMediaPlayer::Prepared
|
if ((mState & (AndroidMediaPlayer::Prepared
|
||||||
| JMediaPlayer::Started
|
| AndroidMediaPlayer::Started
|
||||||
| JMediaPlayer::Paused
|
| AndroidMediaPlayer::Paused
|
||||||
| JMediaPlayer::PlaybackCompleted)) == 0) {
|
| AndroidMediaPlayer::PlaybackCompleted)) == 0) {
|
||||||
mPendingState = QMediaPlayer::PlayingState;
|
mPendingState = QMediaPlayer::PlayingState;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -374,9 +374,9 @@ void QAndroidMediaPlayerControl::pause()
|
|||||||
{
|
{
|
||||||
setState(QMediaPlayer::PausedState);
|
setState(QMediaPlayer::PausedState);
|
||||||
|
|
||||||
if ((mState & (JMediaPlayer::Started
|
if ((mState & (AndroidMediaPlayer::Started
|
||||||
| JMediaPlayer::Paused
|
| AndroidMediaPlayer::Paused
|
||||||
| JMediaPlayer::PlaybackCompleted)) == 0) {
|
| AndroidMediaPlayer::PlaybackCompleted)) == 0) {
|
||||||
mPendingState = QMediaPlayer::PausedState;
|
mPendingState = QMediaPlayer::PausedState;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -388,12 +388,12 @@ void QAndroidMediaPlayerControl::stop()
|
|||||||
{
|
{
|
||||||
setState(QMediaPlayer::StoppedState);
|
setState(QMediaPlayer::StoppedState);
|
||||||
|
|
||||||
if ((mState & (JMediaPlayer::Prepared
|
if ((mState & (AndroidMediaPlayer::Prepared
|
||||||
| JMediaPlayer::Started
|
| AndroidMediaPlayer::Started
|
||||||
| JMediaPlayer::Stopped
|
| AndroidMediaPlayer::Stopped
|
||||||
| JMediaPlayer::Paused
|
| AndroidMediaPlayer::Paused
|
||||||
| JMediaPlayer::PlaybackCompleted)) == 0) {
|
| AndroidMediaPlayer::PlaybackCompleted)) == 0) {
|
||||||
if ((mState & (JMediaPlayer::Idle | JMediaPlayer::Uninitialized | JMediaPlayer::Error)) == 0)
|
if ((mState & (AndroidMediaPlayer::Idle | AndroidMediaPlayer::Uninitialized | AndroidMediaPlayer::Error)) == 0)
|
||||||
mPendingState = QMediaPlayer::StoppedState;
|
mPendingState = QMediaPlayer::StoppedState;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -405,28 +405,28 @@ void QAndroidMediaPlayerControl::onInfo(qint32 what, qint32 extra)
|
|||||||
{
|
{
|
||||||
Q_UNUSED(extra);
|
Q_UNUSED(extra);
|
||||||
switch (what) {
|
switch (what) {
|
||||||
case JMediaPlayer::MEDIA_INFO_UNKNOWN:
|
case AndroidMediaPlayer::MEDIA_INFO_UNKNOWN:
|
||||||
break;
|
break;
|
||||||
case JMediaPlayer::MEDIA_INFO_VIDEO_TRACK_LAGGING:
|
case AndroidMediaPlayer::MEDIA_INFO_VIDEO_TRACK_LAGGING:
|
||||||
// IGNORE
|
// IGNORE
|
||||||
break;
|
break;
|
||||||
case JMediaPlayer::MEDIA_INFO_VIDEO_RENDERING_START:
|
case AndroidMediaPlayer::MEDIA_INFO_VIDEO_RENDERING_START:
|
||||||
break;
|
break;
|
||||||
case JMediaPlayer::MEDIA_INFO_BUFFERING_START:
|
case AndroidMediaPlayer::MEDIA_INFO_BUFFERING_START:
|
||||||
mPendingState = mCurrentState;
|
mPendingState = mCurrentState;
|
||||||
setState(QMediaPlayer::PausedState);
|
setState(QMediaPlayer::PausedState);
|
||||||
setMediaStatus(QMediaPlayer::StalledMedia);
|
setMediaStatus(QMediaPlayer::StalledMedia);
|
||||||
break;
|
break;
|
||||||
case JMediaPlayer::MEDIA_INFO_BUFFERING_END:
|
case AndroidMediaPlayer::MEDIA_INFO_BUFFERING_END:
|
||||||
if (mCurrentState != QMediaPlayer::StoppedState)
|
if (mCurrentState != QMediaPlayer::StoppedState)
|
||||||
flushPendingStates();
|
flushPendingStates();
|
||||||
break;
|
break;
|
||||||
case JMediaPlayer::MEDIA_INFO_BAD_INTERLEAVING:
|
case AndroidMediaPlayer::MEDIA_INFO_BAD_INTERLEAVING:
|
||||||
break;
|
break;
|
||||||
case JMediaPlayer::MEDIA_INFO_NOT_SEEKABLE:
|
case AndroidMediaPlayer::MEDIA_INFO_NOT_SEEKABLE:
|
||||||
setSeekable(false);
|
setSeekable(false);
|
||||||
break;
|
break;
|
||||||
case JMediaPlayer::MEDIA_INFO_METADATA_UPDATE:
|
case AndroidMediaPlayer::MEDIA_INFO_METADATA_UPDATE:
|
||||||
Q_EMIT metaDataUpdated();
|
Q_EMIT metaDataUpdated();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -438,44 +438,44 @@ void QAndroidMediaPlayerControl::onError(qint32 what, qint32 extra)
|
|||||||
QMediaPlayer::Error error = QMediaPlayer::ResourceError;
|
QMediaPlayer::Error error = QMediaPlayer::ResourceError;
|
||||||
|
|
||||||
switch (what) {
|
switch (what) {
|
||||||
case JMediaPlayer::MEDIA_ERROR_UNKNOWN:
|
case AndroidMediaPlayer::MEDIA_ERROR_UNKNOWN:
|
||||||
errorString = QLatin1String("Error:");
|
errorString = QLatin1String("Error:");
|
||||||
break;
|
break;
|
||||||
case JMediaPlayer::MEDIA_ERROR_SERVER_DIED:
|
case AndroidMediaPlayer::MEDIA_ERROR_SERVER_DIED:
|
||||||
errorString = QLatin1String("Error: Server died");
|
errorString = QLatin1String("Error: Server died");
|
||||||
error = QMediaPlayer::ServiceMissingError;
|
error = QMediaPlayer::ServiceMissingError;
|
||||||
break;
|
break;
|
||||||
case JMediaPlayer::MEDIA_ERROR_INVALID_STATE:
|
case AndroidMediaPlayer::MEDIA_ERROR_INVALID_STATE:
|
||||||
errorString = QLatin1String("Error: Invalid state");
|
errorString = QLatin1String("Error: Invalid state");
|
||||||
error = QMediaPlayer::ServiceMissingError;
|
error = QMediaPlayer::ServiceMissingError;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (extra) {
|
switch (extra) {
|
||||||
case JMediaPlayer::MEDIA_ERROR_IO: // Network OR file error
|
case AndroidMediaPlayer::MEDIA_ERROR_IO: // Network OR file error
|
||||||
errorString += QLatin1String(" (I/O operation failed)");
|
errorString += QLatin1String(" (I/O operation failed)");
|
||||||
error = QMediaPlayer::NetworkError;
|
error = QMediaPlayer::NetworkError;
|
||||||
setMediaStatus(QMediaPlayer::InvalidMedia);
|
setMediaStatus(QMediaPlayer::InvalidMedia);
|
||||||
break;
|
break;
|
||||||
case JMediaPlayer::MEDIA_ERROR_MALFORMED:
|
case AndroidMediaPlayer::MEDIA_ERROR_MALFORMED:
|
||||||
errorString += QLatin1String(" (Malformed bitstream)");
|
errorString += QLatin1String(" (Malformed bitstream)");
|
||||||
error = QMediaPlayer::FormatError;
|
error = QMediaPlayer::FormatError;
|
||||||
setMediaStatus(QMediaPlayer::InvalidMedia);
|
setMediaStatus(QMediaPlayer::InvalidMedia);
|
||||||
break;
|
break;
|
||||||
case JMediaPlayer::MEDIA_ERROR_UNSUPPORTED:
|
case AndroidMediaPlayer::MEDIA_ERROR_UNSUPPORTED:
|
||||||
errorString += QLatin1String(" (Unsupported media)");
|
errorString += QLatin1String(" (Unsupported media)");
|
||||||
error = QMediaPlayer::FormatError;
|
error = QMediaPlayer::FormatError;
|
||||||
setMediaStatus(QMediaPlayer::InvalidMedia);
|
setMediaStatus(QMediaPlayer::InvalidMedia);
|
||||||
break;
|
break;
|
||||||
case JMediaPlayer::MEDIA_ERROR_TIMED_OUT:
|
case AndroidMediaPlayer::MEDIA_ERROR_TIMED_OUT:
|
||||||
errorString += QLatin1String(" (Timed out)");
|
errorString += QLatin1String(" (Timed out)");
|
||||||
break;
|
break;
|
||||||
case JMediaPlayer::MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK:
|
case AndroidMediaPlayer::MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK:
|
||||||
errorString += QLatin1String(" (Unable to start progressive playback')");
|
errorString += QLatin1String(" (Unable to start progressive playback')");
|
||||||
error = QMediaPlayer::FormatError;
|
error = QMediaPlayer::FormatError;
|
||||||
setMediaStatus(QMediaPlayer::InvalidMedia);
|
setMediaStatus(QMediaPlayer::InvalidMedia);
|
||||||
break;
|
break;
|
||||||
case JMediaPlayer::MEDIA_ERROR_BAD_THINGS_ARE_GOING_TO_HAPPEN:
|
case AndroidMediaPlayer::MEDIA_ERROR_BAD_THINGS_ARE_GOING_TO_HAPPEN:
|
||||||
errorString += QLatin1String(" (Unknown error/Insufficient resources)");
|
errorString += QLatin1String(" (Unknown error/Insufficient resources)");
|
||||||
error = QMediaPlayer::ServiceMissingError;
|
error = QMediaPlayer::ServiceMissingError;
|
||||||
break;
|
break;
|
||||||
@@ -512,21 +512,21 @@ void QAndroidMediaPlayerControl::onVideoSizeChanged(qint32 width, qint32 height)
|
|||||||
void QAndroidMediaPlayerControl::onStateChanged(qint32 state)
|
void QAndroidMediaPlayerControl::onStateChanged(qint32 state)
|
||||||
{
|
{
|
||||||
// If reloading, don't report state changes unless the new state is Prepared or Error.
|
// If reloading, don't report state changes unless the new state is Prepared or Error.
|
||||||
if ((mState & JMediaPlayer::Stopped)
|
if ((mState & AndroidMediaPlayer::Stopped)
|
||||||
&& (state & (JMediaPlayer::Prepared | JMediaPlayer::Error | JMediaPlayer::Uninitialized)) == 0) {
|
&& (state & (AndroidMediaPlayer::Prepared | AndroidMediaPlayer::Error | AndroidMediaPlayer::Uninitialized)) == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
mState = state;
|
mState = state;
|
||||||
switch (mState) {
|
switch (mState) {
|
||||||
case JMediaPlayer::Idle:
|
case AndroidMediaPlayer::Idle:
|
||||||
break;
|
break;
|
||||||
case JMediaPlayer::Initialized:
|
case AndroidMediaPlayer::Initialized:
|
||||||
break;
|
break;
|
||||||
case JMediaPlayer::Preparing:
|
case AndroidMediaPlayer::Preparing:
|
||||||
setMediaStatus(QMediaPlayer::LoadingMedia);
|
setMediaStatus(QMediaPlayer::LoadingMedia);
|
||||||
break;
|
break;
|
||||||
case JMediaPlayer::Prepared:
|
case AndroidMediaPlayer::Prepared:
|
||||||
setMediaStatus(QMediaPlayer::LoadedMedia);
|
setMediaStatus(QMediaPlayer::LoadedMedia);
|
||||||
if (mBuffering) {
|
if (mBuffering) {
|
||||||
setMediaStatus(mBufferPercent == 100 ? QMediaPlayer::BufferedMedia
|
setMediaStatus(mBufferPercent == 100 ? QMediaPlayer::BufferedMedia
|
||||||
@@ -537,7 +537,7 @@ void QAndroidMediaPlayerControl::onStateChanged(qint32 state)
|
|||||||
setAudioAvailable(true);
|
setAudioAvailable(true);
|
||||||
flushPendingStates();
|
flushPendingStates();
|
||||||
break;
|
break;
|
||||||
case JMediaPlayer::Started:
|
case AndroidMediaPlayer::Started:
|
||||||
setState(QMediaPlayer::PlayingState);
|
setState(QMediaPlayer::PlayingState);
|
||||||
if (mBuffering) {
|
if (mBuffering) {
|
||||||
setMediaStatus(mBufferPercent == 100 ? QMediaPlayer::BufferedMedia
|
setMediaStatus(mBufferPercent == 100 ? QMediaPlayer::BufferedMedia
|
||||||
@@ -546,25 +546,25 @@ void QAndroidMediaPlayerControl::onStateChanged(qint32 state)
|
|||||||
setMediaStatus(QMediaPlayer::BufferedMedia);
|
setMediaStatus(QMediaPlayer::BufferedMedia);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case JMediaPlayer::Paused:
|
case AndroidMediaPlayer::Paused:
|
||||||
setState(QMediaPlayer::PausedState);
|
setState(QMediaPlayer::PausedState);
|
||||||
break;
|
break;
|
||||||
case JMediaPlayer::Error:
|
case AndroidMediaPlayer::Error:
|
||||||
setState(QMediaPlayer::StoppedState);
|
setState(QMediaPlayer::StoppedState);
|
||||||
setMediaStatus(QMediaPlayer::UnknownMediaStatus);
|
setMediaStatus(QMediaPlayer::UnknownMediaStatus);
|
||||||
mMediaPlayer->release();
|
mMediaPlayer->release();
|
||||||
break;
|
break;
|
||||||
case JMediaPlayer::Stopped:
|
case AndroidMediaPlayer::Stopped:
|
||||||
setState(QMediaPlayer::StoppedState);
|
setState(QMediaPlayer::StoppedState);
|
||||||
setMediaStatus(QMediaPlayer::LoadedMedia);
|
setMediaStatus(QMediaPlayer::LoadedMedia);
|
||||||
setPosition(0);
|
setPosition(0);
|
||||||
break;
|
break;
|
||||||
case JMediaPlayer::PlaybackCompleted:
|
case AndroidMediaPlayer::PlaybackCompleted:
|
||||||
setState(QMediaPlayer::StoppedState);
|
setState(QMediaPlayer::StoppedState);
|
||||||
setPosition(0);
|
setPosition(0);
|
||||||
setMediaStatus(QMediaPlayer::EndOfMedia);
|
setMediaStatus(QMediaPlayer::EndOfMedia);
|
||||||
break;
|
break;
|
||||||
case JMediaPlayer::Uninitialized:
|
case AndroidMediaPlayer::Uninitialized:
|
||||||
// reset some properties
|
// reset some properties
|
||||||
resetBufferingProgress();
|
resetBufferingProgress();
|
||||||
mPendingPosition = -1;
|
mPendingPosition = -1;
|
||||||
@@ -579,7 +579,7 @@ void QAndroidMediaPlayerControl::onStateChanged(qint32 state)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((mState & (JMediaPlayer::Stopped | JMediaPlayer::Uninitialized)) != 0) {
|
if ((mState & (AndroidMediaPlayer::Stopped | AndroidMediaPlayer::Uninitialized)) != 0) {
|
||||||
mMediaPlayer->setDisplay(0);
|
mMediaPlayer->setDisplay(0);
|
||||||
if (mVideoOutput) {
|
if (mVideoOutput) {
|
||||||
mVideoOutput->stop();
|
mVideoOutput->stop();
|
||||||
|
|||||||
@@ -49,7 +49,7 @@
|
|||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
class JMediaPlayer;
|
class AndroidMediaPlayer;
|
||||||
class QAndroidVideoOutput;
|
class QAndroidVideoOutput;
|
||||||
|
|
||||||
class QAndroidMediaPlayerControl : public QMediaPlayerControl
|
class QAndroidMediaPlayerControl : public QMediaPlayerControl
|
||||||
@@ -98,7 +98,7 @@ private Q_SLOTS:
|
|||||||
void onStateChanged(qint32 state);
|
void onStateChanged(qint32 state);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
JMediaPlayer *mMediaPlayer;
|
AndroidMediaPlayer *mMediaPlayer;
|
||||||
QMediaPlayer::State mCurrentState;
|
QMediaPlayer::State mCurrentState;
|
||||||
QMediaPlayer::MediaStatus mCurrentMediaStatus;
|
QMediaPlayer::MediaStatus mCurrentMediaStatus;
|
||||||
QMediaContent mMediaContent;
|
QMediaContent mMediaContent;
|
||||||
|
|||||||
@@ -41,7 +41,7 @@
|
|||||||
|
|
||||||
#include "qandroidmetadatareadercontrol.h"
|
#include "qandroidmetadatareadercontrol.h"
|
||||||
|
|
||||||
#include "jmediametadataretriever.h"
|
#include "androidmediametadataretriever.h"
|
||||||
#include <QtMultimedia/qmediametadata.h>
|
#include <QtMultimedia/qmediametadata.h>
|
||||||
#include <qsize.h>
|
#include <qsize.h>
|
||||||
#include <QDate>
|
#include <QDate>
|
||||||
@@ -74,7 +74,7 @@ static const char* qt_ID3GenreNames[] =
|
|||||||
QAndroidMetaDataReaderControl::QAndroidMetaDataReaderControl(QObject *parent)
|
QAndroidMetaDataReaderControl::QAndroidMetaDataReaderControl(QObject *parent)
|
||||||
: QMetaDataReaderControl(parent)
|
: QMetaDataReaderControl(parent)
|
||||||
, m_available(false)
|
, m_available(false)
|
||||||
, m_retriever(new JMediaMetadataRetriever)
|
, m_retriever(new AndroidMediaMetadataRetriever)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -124,56 +124,56 @@ void QAndroidMetaDataReaderControl::updateData()
|
|||||||
|
|
||||||
if (!m_mediaContent.isNull()) {
|
if (!m_mediaContent.isNull()) {
|
||||||
if (m_retriever->setDataSource(m_mediaContent.canonicalUrl())) {
|
if (m_retriever->setDataSource(m_mediaContent.canonicalUrl())) {
|
||||||
QString mimeType = m_retriever->extractMetadata(JMediaMetadataRetriever::MimeType);
|
QString mimeType = m_retriever->extractMetadata(AndroidMediaMetadataRetriever::MimeType);
|
||||||
if (!mimeType.isNull())
|
if (!mimeType.isNull())
|
||||||
m_metadata.insert(QMediaMetaData::MediaType, mimeType);
|
m_metadata.insert(QMediaMetaData::MediaType, mimeType);
|
||||||
|
|
||||||
bool isVideo = !m_retriever->extractMetadata(JMediaMetadataRetriever::HasVideo).isNull()
|
bool isVideo = !m_retriever->extractMetadata(AndroidMediaMetadataRetriever::HasVideo).isNull()
|
||||||
|| mimeType.startsWith(QStringLiteral("video"));
|
|| mimeType.startsWith(QStringLiteral("video"));
|
||||||
|
|
||||||
QString string = m_retriever->extractMetadata(JMediaMetadataRetriever::Album);
|
QString string = m_retriever->extractMetadata(AndroidMediaMetadataRetriever::Album);
|
||||||
if (!string.isNull())
|
if (!string.isNull())
|
||||||
m_metadata.insert(QMediaMetaData::AlbumTitle, string);
|
m_metadata.insert(QMediaMetaData::AlbumTitle, string);
|
||||||
|
|
||||||
string = m_retriever->extractMetadata(JMediaMetadataRetriever::AlbumArtist);
|
string = m_retriever->extractMetadata(AndroidMediaMetadataRetriever::AlbumArtist);
|
||||||
if (!string.isNull())
|
if (!string.isNull())
|
||||||
m_metadata.insert(QMediaMetaData::AlbumArtist, string);
|
m_metadata.insert(QMediaMetaData::AlbumArtist, string);
|
||||||
|
|
||||||
string = m_retriever->extractMetadata(JMediaMetadataRetriever::Artist);
|
string = m_retriever->extractMetadata(AndroidMediaMetadataRetriever::Artist);
|
||||||
if (!string.isNull()) {
|
if (!string.isNull()) {
|
||||||
m_metadata.insert(isVideo ? QMediaMetaData::LeadPerformer
|
m_metadata.insert(isVideo ? QMediaMetaData::LeadPerformer
|
||||||
: QMediaMetaData::ContributingArtist,
|
: QMediaMetaData::ContributingArtist,
|
||||||
string.split('/', QString::SkipEmptyParts));
|
string.split('/', QString::SkipEmptyParts));
|
||||||
}
|
}
|
||||||
|
|
||||||
string = m_retriever->extractMetadata(JMediaMetadataRetriever::Author);
|
string = m_retriever->extractMetadata(AndroidMediaMetadataRetriever::Author);
|
||||||
if (!string.isNull())
|
if (!string.isNull())
|
||||||
m_metadata.insert(QMediaMetaData::Author, string.split('/', QString::SkipEmptyParts));
|
m_metadata.insert(QMediaMetaData::Author, string.split('/', QString::SkipEmptyParts));
|
||||||
|
|
||||||
string = m_retriever->extractMetadata(JMediaMetadataRetriever::Bitrate);
|
string = m_retriever->extractMetadata(AndroidMediaMetadataRetriever::Bitrate);
|
||||||
if (!string.isNull()) {
|
if (!string.isNull()) {
|
||||||
m_metadata.insert(isVideo ? QMediaMetaData::VideoBitRate
|
m_metadata.insert(isVideo ? QMediaMetaData::VideoBitRate
|
||||||
: QMediaMetaData::AudioBitRate,
|
: QMediaMetaData::AudioBitRate,
|
||||||
string.toInt());
|
string.toInt());
|
||||||
}
|
}
|
||||||
|
|
||||||
string = m_retriever->extractMetadata(JMediaMetadataRetriever::CDTrackNumber);
|
string = m_retriever->extractMetadata(AndroidMediaMetadataRetriever::CDTrackNumber);
|
||||||
if (!string.isNull())
|
if (!string.isNull())
|
||||||
m_metadata.insert(QMediaMetaData::TrackNumber, string.toInt());
|
m_metadata.insert(QMediaMetaData::TrackNumber, string.toInt());
|
||||||
|
|
||||||
string = m_retriever->extractMetadata(JMediaMetadataRetriever::Composer);
|
string = m_retriever->extractMetadata(AndroidMediaMetadataRetriever::Composer);
|
||||||
if (!string.isNull())
|
if (!string.isNull())
|
||||||
m_metadata.insert(QMediaMetaData::Composer, string.split('/', QString::SkipEmptyParts));
|
m_metadata.insert(QMediaMetaData::Composer, string.split('/', QString::SkipEmptyParts));
|
||||||
|
|
||||||
string = m_retriever->extractMetadata(JMediaMetadataRetriever::Date);
|
string = m_retriever->extractMetadata(AndroidMediaMetadataRetriever::Date);
|
||||||
if (!string.isNull())
|
if (!string.isNull())
|
||||||
m_metadata.insert(QMediaMetaData::Date, QDateTime::fromString(string, QStringLiteral("yyyyMMddTHHmmss.zzzZ")).date());
|
m_metadata.insert(QMediaMetaData::Date, QDateTime::fromString(string, QStringLiteral("yyyyMMddTHHmmss.zzzZ")).date());
|
||||||
|
|
||||||
string = m_retriever->extractMetadata(JMediaMetadataRetriever::Duration);
|
string = m_retriever->extractMetadata(AndroidMediaMetadataRetriever::Duration);
|
||||||
if (!string.isNull())
|
if (!string.isNull())
|
||||||
m_metadata.insert(QMediaMetaData::Duration, string.toLongLong());
|
m_metadata.insert(QMediaMetaData::Duration, string.toLongLong());
|
||||||
|
|
||||||
string = m_retriever->extractMetadata(JMediaMetadataRetriever::Genre);
|
string = m_retriever->extractMetadata(AndroidMediaMetadataRetriever::Genre);
|
||||||
if (!string.isNull()) {
|
if (!string.isNull()) {
|
||||||
// The genre can be returned as an ID3v2 id, get the name for it in that case
|
// The genre can be returned as an ID3v2 id, get the name for it in that case
|
||||||
if (string.startsWith('(') && string.endsWith(')')) {
|
if (string.startsWith('(') && string.endsWith(')')) {
|
||||||
@@ -185,22 +185,22 @@ void QAndroidMetaDataReaderControl::updateData()
|
|||||||
m_metadata.insert(QMediaMetaData::Genre, string);
|
m_metadata.insert(QMediaMetaData::Genre, string);
|
||||||
}
|
}
|
||||||
|
|
||||||
string = m_retriever->extractMetadata(JMediaMetadataRetriever::Title);
|
string = m_retriever->extractMetadata(AndroidMediaMetadataRetriever::Title);
|
||||||
if (!string.isNull())
|
if (!string.isNull())
|
||||||
m_metadata.insert(QMediaMetaData::Title, string);
|
m_metadata.insert(QMediaMetaData::Title, string);
|
||||||
|
|
||||||
string = m_retriever->extractMetadata(JMediaMetadataRetriever::VideoHeight);
|
string = m_retriever->extractMetadata(AndroidMediaMetadataRetriever::VideoHeight);
|
||||||
if (!string.isNull()) {
|
if (!string.isNull()) {
|
||||||
int height = string.toInt();
|
int height = string.toInt();
|
||||||
int width = m_retriever->extractMetadata(JMediaMetadataRetriever::VideoWidth).toInt();
|
int width = m_retriever->extractMetadata(AndroidMediaMetadataRetriever::VideoWidth).toInt();
|
||||||
m_metadata.insert(QMediaMetaData::Resolution, QSize(width, height));
|
m_metadata.insert(QMediaMetaData::Resolution, QSize(width, height));
|
||||||
}
|
}
|
||||||
|
|
||||||
string = m_retriever->extractMetadata(JMediaMetadataRetriever::Writer);
|
string = m_retriever->extractMetadata(AndroidMediaMetadataRetriever::Writer);
|
||||||
if (!string.isNull())
|
if (!string.isNull())
|
||||||
m_metadata.insert(QMediaMetaData::Writer, string.split('/', QString::SkipEmptyParts));
|
m_metadata.insert(QMediaMetaData::Writer, string.split('/', QString::SkipEmptyParts));
|
||||||
|
|
||||||
string = m_retriever->extractMetadata(JMediaMetadataRetriever::Year);
|
string = m_retriever->extractMetadata(AndroidMediaMetadataRetriever::Year);
|
||||||
if (!string.isNull())
|
if (!string.isNull())
|
||||||
m_metadata.insert(QMediaMetaData::Year, string.toInt());
|
m_metadata.insert(QMediaMetaData::Year, string.toInt());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,7 +47,7 @@
|
|||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
class JMediaMetadataRetriever;
|
class AndroidMediaMetadataRetriever;
|
||||||
|
|
||||||
class QAndroidMetaDataReaderControl : public QMetaDataReaderControl
|
class QAndroidMetaDataReaderControl : public QMetaDataReaderControl
|
||||||
{
|
{
|
||||||
@@ -72,7 +72,7 @@ private:
|
|||||||
bool m_available;
|
bool m_available;
|
||||||
QVariantMap m_metadata;
|
QVariantMap m_metadata;
|
||||||
|
|
||||||
JMediaMetadataRetriever *m_retriever;
|
AndroidMediaMetadataRetriever *m_retriever;
|
||||||
};
|
};
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|||||||
@@ -46,11 +46,11 @@
|
|||||||
#include "qandroidaudioinputselectorcontrol.h"
|
#include "qandroidaudioinputselectorcontrol.h"
|
||||||
#include "qandroidcamerainfocontrol.h"
|
#include "qandroidcamerainfocontrol.h"
|
||||||
#include "qandroidcamerasession.h"
|
#include "qandroidcamerasession.h"
|
||||||
#include "jmediaplayer.h"
|
#include "androidmediaplayer.h"
|
||||||
#include "jsurfacetexture.h"
|
#include "androidsurfacetexture.h"
|
||||||
#include "jcamera.h"
|
#include "androidcamera.h"
|
||||||
#include "jmultimediautils.h"
|
#include "androidmultimediautils.h"
|
||||||
#include "jmediarecorder.h"
|
#include "androidmediarecorder.h"
|
||||||
#include <qdebug.h>
|
#include <qdebug.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
@@ -149,6 +149,7 @@ int QAndroidMediaServicePlugin::cameraOrientation(const QByteArray &device) cons
|
|||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
#ifndef Q_OS_ANDROID_NO_SDK
|
||||||
Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void * /*reserved*/)
|
Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void * /*reserved*/)
|
||||||
{
|
{
|
||||||
QT_USE_NAMESPACE
|
QT_USE_NAMESPACE
|
||||||
@@ -165,13 +166,14 @@ Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void * /*reserved*/)
|
|||||||
|
|
||||||
JNIEnv *jniEnv = uenv.nativeEnvironment;
|
JNIEnv *jniEnv = uenv.nativeEnvironment;
|
||||||
|
|
||||||
if (!JMediaPlayer::initJNI(jniEnv) ||
|
if (!AndroidMediaPlayer::initJNI(jniEnv) ||
|
||||||
!JCamera::initJNI(jniEnv) ||
|
!AndroidCamera::initJNI(jniEnv) ||
|
||||||
!JMediaRecorder::initJNI(jniEnv)) {
|
!AndroidMediaRecorder::initJNI(jniEnv)) {
|
||||||
return JNI_ERR;
|
return JNI_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
JSurfaceTexture::initJNI(jniEnv);
|
AndroidSurfaceTexture::initJNI(jniEnv);
|
||||||
|
|
||||||
return JNI_VERSION_1_4;
|
return JNI_VERSION_1_4;
|
||||||
}
|
}
|
||||||
|
#endif // Q_OS_ANDROID_NO_SDK
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ HEADERS += \
|
|||||||
SOURCES += \
|
SOURCES += \
|
||||||
qandroidmediaserviceplugin.cpp
|
qandroidmediaserviceplugin.cpp
|
||||||
|
|
||||||
include (wrappers/wrappers.pri)
|
include (wrappers/jni/jni.pri)
|
||||||
include (common/common.pri)
|
include (common/common.pri)
|
||||||
include (mediaplayer/mediaplayer.pri)
|
include (mediaplayer/mediaplayer.pri)
|
||||||
include (mediacapture/mediacapture.pri)
|
include (mediacapture/mediacapture.pri)
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -39,8 +39,8 @@
|
|||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#ifndef JCAMERA_H
|
#ifndef ANDROIDCAMERA_H
|
||||||
#define JCAMERA_H
|
#define ANDROIDCAMERA_H
|
||||||
|
|
||||||
#include <qobject.h>
|
#include <qobject.h>
|
||||||
#include <QtCore/private/qjni_p.h>
|
#include <QtCore/private/qjni_p.h>
|
||||||
@@ -51,9 +51,9 @@ QT_BEGIN_NAMESPACE
|
|||||||
|
|
||||||
class QThread;
|
class QThread;
|
||||||
|
|
||||||
class JCameraPrivate;
|
class AndroidCameraPrivate;
|
||||||
|
|
||||||
class JCamera : public QObject
|
class AndroidCamera : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
Q_ENUMS(CameraFacing)
|
Q_ENUMS(CameraFacing)
|
||||||
@@ -74,9 +74,9 @@ public:
|
|||||||
YV12 = 842094169
|
YV12 = 842094169
|
||||||
};
|
};
|
||||||
|
|
||||||
~JCamera();
|
~AndroidCamera();
|
||||||
|
|
||||||
static JCamera *open(int cameraId);
|
static AndroidCamera *open(int cameraId);
|
||||||
|
|
||||||
int cameraId() const;
|
int cameraId() const;
|
||||||
|
|
||||||
@@ -175,13 +175,13 @@ Q_SIGNALS:
|
|||||||
void frameFetched(const QByteArray &frame);
|
void frameFetched(const QByteArray &frame);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
JCamera(JCameraPrivate *d, QThread *worker);
|
AndroidCamera(AndroidCameraPrivate *d, QThread *worker);
|
||||||
|
|
||||||
Q_DECLARE_PRIVATE(JCamera)
|
Q_DECLARE_PRIVATE(AndroidCamera)
|
||||||
JCameraPrivate *d_ptr;
|
AndroidCameraPrivate *d_ptr;
|
||||||
QScopedPointer<QThread> m_worker;
|
QScopedPointer<QThread> m_worker;
|
||||||
};
|
};
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
#endif // JCAMERA_H
|
#endif // ANDROIDCAMERA_H
|
||||||
@@ -39,23 +39,23 @@
|
|||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "jmediametadataretriever.h"
|
#include "androidmediametadataretriever.h"
|
||||||
|
|
||||||
#include <QtCore/private/qjnihelpers_p.h>
|
#include <QtCore/private/qjnihelpers_p.h>
|
||||||
#include <QtCore/private/qjni_p.h>
|
#include <QtCore/private/qjni_p.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
JMediaMetadataRetriever::JMediaMetadataRetriever()
|
AndroidMediaMetadataRetriever::AndroidMediaMetadataRetriever()
|
||||||
{
|
{
|
||||||
m_metadataRetriever = QJNIObjectPrivate("android/media/MediaMetadataRetriever");
|
m_metadataRetriever = QJNIObjectPrivate("android/media/MediaMetadataRetriever");
|
||||||
}
|
}
|
||||||
|
|
||||||
JMediaMetadataRetriever::~JMediaMetadataRetriever()
|
AndroidMediaMetadataRetriever::~AndroidMediaMetadataRetriever()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
QString JMediaMetadataRetriever::extractMetadata(MetadataKey key)
|
QString AndroidMediaMetadataRetriever::extractMetadata(MetadataKey key)
|
||||||
{
|
{
|
||||||
QString value;
|
QString value;
|
||||||
|
|
||||||
@@ -68,7 +68,7 @@ QString JMediaMetadataRetriever::extractMetadata(MetadataKey key)
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
void JMediaMetadataRetriever::release()
|
void AndroidMediaMetadataRetriever::release()
|
||||||
{
|
{
|
||||||
if (!m_metadataRetriever.isValid())
|
if (!m_metadataRetriever.isValid())
|
||||||
return;
|
return;
|
||||||
@@ -76,7 +76,7 @@ void JMediaMetadataRetriever::release()
|
|||||||
m_metadataRetriever.callMethod<void>("release");
|
m_metadataRetriever.callMethod<void>("release");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool JMediaMetadataRetriever::setDataSource(const QUrl &url)
|
bool AndroidMediaMetadataRetriever::setDataSource(const QUrl &url)
|
||||||
{
|
{
|
||||||
if (!m_metadataRetriever.isValid())
|
if (!m_metadataRetriever.isValid())
|
||||||
return false;
|
return false;
|
||||||
@@ -107,7 +107,7 @@ bool JMediaMetadataRetriever::setDataSource(const QUrl &url)
|
|||||||
return loaded;
|
return loaded;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool JMediaMetadataRetriever::setDataSource(const QString &path)
|
bool AndroidMediaMetadataRetriever::setDataSource(const QString &path)
|
||||||
{
|
{
|
||||||
if (!m_metadataRetriever.isValid())
|
if (!m_metadataRetriever.isValid())
|
||||||
return false;
|
return false;
|
||||||
@@ -39,15 +39,15 @@
|
|||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#ifndef JMEDIAMETADATARETRIEVER_H
|
#ifndef ANDROIDMEDIAMETADATARETRIEVER_H
|
||||||
#define JMEDIAMETADATARETRIEVER_H
|
#define ANDROIDMEDIAMETADATARETRIEVER_H
|
||||||
|
|
||||||
#include <QtCore/private/qjni_p.h>
|
#include <QtCore/private/qjni_p.h>
|
||||||
#include <qurl.h>
|
#include <qurl.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
class JMediaMetadataRetriever
|
class AndroidMediaMetadataRetriever
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
enum MetadataKey {
|
enum MetadataKey {
|
||||||
@@ -76,8 +76,8 @@ public:
|
|||||||
Year = 8
|
Year = 8
|
||||||
};
|
};
|
||||||
|
|
||||||
JMediaMetadataRetriever();
|
AndroidMediaMetadataRetriever();
|
||||||
~JMediaMetadataRetriever();
|
~AndroidMediaMetadataRetriever();
|
||||||
|
|
||||||
QString extractMetadata(MetadataKey key);
|
QString extractMetadata(MetadataKey key);
|
||||||
void release();
|
void release();
|
||||||
@@ -90,4 +90,4 @@ private:
|
|||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
#endif // JMEDIAMETADATARETRIEVER_H
|
#endif // ANDROIDMEDIAMETADATARETRIEVER_H
|
||||||
@@ -39,7 +39,7 @@
|
|||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "jmediaplayer.h"
|
#include "androidmediaplayer.h"
|
||||||
|
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QtCore/private/qjni_p.h>
|
#include <QtCore/private/qjni_p.h>
|
||||||
@@ -47,12 +47,12 @@
|
|||||||
#include <QMap>
|
#include <QMap>
|
||||||
|
|
||||||
static jclass mediaPlayerClass = Q_NULLPTR;
|
static jclass mediaPlayerClass = Q_NULLPTR;
|
||||||
typedef QMap<jlong, JMediaPlayer *> MediaPlayerMap;
|
typedef QMap<jlong, AndroidMediaPlayer *> MediaPlayerMap;
|
||||||
Q_GLOBAL_STATIC(MediaPlayerMap, mediaPlayers)
|
Q_GLOBAL_STATIC(MediaPlayerMap, mediaPlayers)
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
JMediaPlayer::JMediaPlayer()
|
AndroidMediaPlayer::AndroidMediaPlayer()
|
||||||
: QObject()
|
: QObject()
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -64,93 +64,93 @@ JMediaPlayer::JMediaPlayer()
|
|||||||
(*mediaPlayers)[id] = this;
|
(*mediaPlayers)[id] = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
JMediaPlayer::~JMediaPlayer()
|
AndroidMediaPlayer::~AndroidMediaPlayer()
|
||||||
{
|
{
|
||||||
mediaPlayers->remove(reinterpret_cast<jlong>(this));
|
mediaPlayers->remove(reinterpret_cast<jlong>(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
void JMediaPlayer::release()
|
void AndroidMediaPlayer::release()
|
||||||
{
|
{
|
||||||
mMediaPlayer.callMethod<void>("release");
|
mMediaPlayer.callMethod<void>("release");
|
||||||
}
|
}
|
||||||
|
|
||||||
void JMediaPlayer::reset()
|
void AndroidMediaPlayer::reset()
|
||||||
{
|
{
|
||||||
mMediaPlayer.callMethod<void>("reset");
|
mMediaPlayer.callMethod<void>("reset");
|
||||||
}
|
}
|
||||||
|
|
||||||
int JMediaPlayer::getCurrentPosition()
|
int AndroidMediaPlayer::getCurrentPosition()
|
||||||
{
|
{
|
||||||
return mMediaPlayer.callMethod<jint>("getCurrentPosition");
|
return mMediaPlayer.callMethod<jint>("getCurrentPosition");
|
||||||
}
|
}
|
||||||
|
|
||||||
int JMediaPlayer::getDuration()
|
int AndroidMediaPlayer::getDuration()
|
||||||
{
|
{
|
||||||
return mMediaPlayer.callMethod<jint>("getDuration");
|
return mMediaPlayer.callMethod<jint>("getDuration");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool JMediaPlayer::isPlaying()
|
bool AndroidMediaPlayer::isPlaying()
|
||||||
{
|
{
|
||||||
return mMediaPlayer.callMethod<jboolean>("isPlaying");
|
return mMediaPlayer.callMethod<jboolean>("isPlaying");
|
||||||
}
|
}
|
||||||
|
|
||||||
int JMediaPlayer::volume()
|
int AndroidMediaPlayer::volume()
|
||||||
{
|
{
|
||||||
return mMediaPlayer.callMethod<jint>("getVolume");
|
return mMediaPlayer.callMethod<jint>("getVolume");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool JMediaPlayer::isMuted()
|
bool AndroidMediaPlayer::isMuted()
|
||||||
{
|
{
|
||||||
return mMediaPlayer.callMethod<jboolean>("isMuted");
|
return mMediaPlayer.callMethod<jboolean>("isMuted");
|
||||||
}
|
}
|
||||||
|
|
||||||
jobject JMediaPlayer::display()
|
jobject AndroidMediaPlayer::display()
|
||||||
{
|
{
|
||||||
return mMediaPlayer.callObjectMethod("display", "()Landroid/view/SurfaceHolder;").object();
|
return mMediaPlayer.callObjectMethod("display", "()Landroid/view/SurfaceHolder;").object();
|
||||||
}
|
}
|
||||||
|
|
||||||
void JMediaPlayer::play()
|
void AndroidMediaPlayer::play()
|
||||||
{
|
{
|
||||||
mMediaPlayer.callMethod<void>("start");
|
mMediaPlayer.callMethod<void>("start");
|
||||||
}
|
}
|
||||||
|
|
||||||
void JMediaPlayer::pause()
|
void AndroidMediaPlayer::pause()
|
||||||
{
|
{
|
||||||
mMediaPlayer.callMethod<void>("pause");
|
mMediaPlayer.callMethod<void>("pause");
|
||||||
}
|
}
|
||||||
|
|
||||||
void JMediaPlayer::stop()
|
void AndroidMediaPlayer::stop()
|
||||||
{
|
{
|
||||||
mMediaPlayer.callMethod<void>("stop");
|
mMediaPlayer.callMethod<void>("stop");
|
||||||
}
|
}
|
||||||
|
|
||||||
void JMediaPlayer::seekTo(qint32 msec)
|
void AndroidMediaPlayer::seekTo(qint32 msec)
|
||||||
{
|
{
|
||||||
mMediaPlayer.callMethod<void>("seekTo", "(I)V", jint(msec));
|
mMediaPlayer.callMethod<void>("seekTo", "(I)V", jint(msec));
|
||||||
}
|
}
|
||||||
|
|
||||||
void JMediaPlayer::setMuted(bool mute)
|
void AndroidMediaPlayer::setMuted(bool mute)
|
||||||
{
|
{
|
||||||
mMediaPlayer.callMethod<void>("mute", "(Z)V", jboolean(mute));
|
mMediaPlayer.callMethod<void>("mute", "(Z)V", jboolean(mute));
|
||||||
}
|
}
|
||||||
|
|
||||||
void JMediaPlayer::setDataSource(const QString &path)
|
void AndroidMediaPlayer::setDataSource(const QString &path)
|
||||||
{
|
{
|
||||||
QJNIObjectPrivate string = QJNIObjectPrivate::fromString(path);
|
QJNIObjectPrivate string = QJNIObjectPrivate::fromString(path);
|
||||||
mMediaPlayer.callMethod<void>("setDataSource", "(Ljava/lang/String;)V", string.object());
|
mMediaPlayer.callMethod<void>("setDataSource", "(Ljava/lang/String;)V", string.object());
|
||||||
}
|
}
|
||||||
|
|
||||||
void JMediaPlayer::prepareAsync()
|
void AndroidMediaPlayer::prepareAsync()
|
||||||
{
|
{
|
||||||
mMediaPlayer.callMethod<void>("prepareAsync");
|
mMediaPlayer.callMethod<void>("prepareAsync");
|
||||||
}
|
}
|
||||||
|
|
||||||
void JMediaPlayer::setVolume(int volume)
|
void AndroidMediaPlayer::setVolume(int volume)
|
||||||
{
|
{
|
||||||
mMediaPlayer.callMethod<void>("setVolume", "(I)V", jint(volume));
|
mMediaPlayer.callMethod<void>("setVolume", "(I)V", jint(volume));
|
||||||
}
|
}
|
||||||
|
|
||||||
void JMediaPlayer::setDisplay(jobject surfaceHolder)
|
void AndroidMediaPlayer::setDisplay(jobject surfaceHolder)
|
||||||
{
|
{
|
||||||
mMediaPlayer.callMethod<void>("setDisplay", "(Landroid/view/SurfaceHolder;)V", surfaceHolder);
|
mMediaPlayer.callMethod<void>("setDisplay", "(Landroid/view/SurfaceHolder;)V", surfaceHolder);
|
||||||
}
|
}
|
||||||
@@ -159,7 +159,7 @@ static void onErrorNative(JNIEnv *env, jobject thiz, jint what, jint extra, jlon
|
|||||||
{
|
{
|
||||||
Q_UNUSED(env);
|
Q_UNUSED(env);
|
||||||
Q_UNUSED(thiz);
|
Q_UNUSED(thiz);
|
||||||
JMediaPlayer *const mp = (*mediaPlayers)[id];
|
AndroidMediaPlayer *const mp = (*mediaPlayers)[id];
|
||||||
if (!mp)
|
if (!mp)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -170,7 +170,7 @@ static void onBufferingUpdateNative(JNIEnv *env, jobject thiz, jint percent, jlo
|
|||||||
{
|
{
|
||||||
Q_UNUSED(env);
|
Q_UNUSED(env);
|
||||||
Q_UNUSED(thiz);
|
Q_UNUSED(thiz);
|
||||||
JMediaPlayer *const mp = (*mediaPlayers)[id];
|
AndroidMediaPlayer *const mp = (*mediaPlayers)[id];
|
||||||
if (!mp)
|
if (!mp)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -181,7 +181,7 @@ static void onProgressUpdateNative(JNIEnv *env, jobject thiz, jint progress, jlo
|
|||||||
{
|
{
|
||||||
Q_UNUSED(env);
|
Q_UNUSED(env);
|
||||||
Q_UNUSED(thiz);
|
Q_UNUSED(thiz);
|
||||||
JMediaPlayer *const mp = (*mediaPlayers)[id];
|
AndroidMediaPlayer *const mp = (*mediaPlayers)[id];
|
||||||
if (!mp)
|
if (!mp)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -192,7 +192,7 @@ static void onDurationChangedNative(JNIEnv *env, jobject thiz, jint duration, jl
|
|||||||
{
|
{
|
||||||
Q_UNUSED(env);
|
Q_UNUSED(env);
|
||||||
Q_UNUSED(thiz);
|
Q_UNUSED(thiz);
|
||||||
JMediaPlayer *const mp = (*mediaPlayers)[id];
|
AndroidMediaPlayer *const mp = (*mediaPlayers)[id];
|
||||||
if (!mp)
|
if (!mp)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -203,7 +203,7 @@ static void onInfoNative(JNIEnv *env, jobject thiz, jint what, jint extra, jlong
|
|||||||
{
|
{
|
||||||
Q_UNUSED(env);
|
Q_UNUSED(env);
|
||||||
Q_UNUSED(thiz);
|
Q_UNUSED(thiz);
|
||||||
JMediaPlayer *const mp = (*mediaPlayers)[id];
|
AndroidMediaPlayer *const mp = (*mediaPlayers)[id];
|
||||||
if (!mp)
|
if (!mp)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -214,7 +214,7 @@ static void onStateChangedNative(JNIEnv *env, jobject thiz, jint state, jlong id
|
|||||||
{
|
{
|
||||||
Q_UNUSED(env);
|
Q_UNUSED(env);
|
||||||
Q_UNUSED(thiz);
|
Q_UNUSED(thiz);
|
||||||
JMediaPlayer *const mp = (*mediaPlayers)[id];
|
AndroidMediaPlayer *const mp = (*mediaPlayers)[id];
|
||||||
if (!mp)
|
if (!mp)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -229,14 +229,14 @@ static void onVideoSizeChangedNative(JNIEnv *env,
|
|||||||
{
|
{
|
||||||
Q_UNUSED(env);
|
Q_UNUSED(env);
|
||||||
Q_UNUSED(thiz);
|
Q_UNUSED(thiz);
|
||||||
JMediaPlayer *const mp = (*mediaPlayers)[id];
|
AndroidMediaPlayer *const mp = (*mediaPlayers)[id];
|
||||||
if (!mp)
|
if (!mp)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Q_EMIT mp->videoSizeChanged(width, height);
|
Q_EMIT mp->videoSizeChanged(width, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool JMediaPlayer::initJNI(JNIEnv *env)
|
bool AndroidMediaPlayer::initJNI(JNIEnv *env)
|
||||||
{
|
{
|
||||||
jclass jClass = env->FindClass("org/qtproject/qt5/android/multimedia/QtAndroidMediaPlayer");
|
jclass jClass = env->FindClass("org/qtproject/qt5/android/multimedia/QtAndroidMediaPlayer");
|
||||||
|
|
||||||
@@ -39,20 +39,20 @@
|
|||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#ifndef QANDROIDMEDIAPLAYER_H
|
#ifndef ANDROIDMEDIAPLAYER_H
|
||||||
#define QANDROIDMEDIAPLAYER_H
|
#define ANDROIDMEDIAPLAYER_H
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QtCore/private/qjni_p.h>
|
#include <QtCore/private/qjni_p.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
class JMediaPlayer : public QObject
|
class AndroidMediaPlayer : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
JMediaPlayer();
|
AndroidMediaPlayer();
|
||||||
~JMediaPlayer();
|
~AndroidMediaPlayer();
|
||||||
|
|
||||||
enum MediaError
|
enum MediaError
|
||||||
{
|
{
|
||||||
@@ -132,4 +132,4 @@ private:
|
|||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
#endif // QANDROIDMEDIAPLAYER_H
|
#endif // ANDROIDMEDIAPLAYER_H
|
||||||
@@ -39,33 +39,33 @@
|
|||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "jmediarecorder.h"
|
#include "androidmediarecorder.h"
|
||||||
|
|
||||||
#include "jcamera.h"
|
#include "androidcamera.h"
|
||||||
#include <QtCore/private/qjni_p.h>
|
#include <QtCore/private/qjni_p.h>
|
||||||
#include <qmap.h>
|
#include <qmap.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
static jclass g_qtMediaRecorderListenerClass = 0;
|
static jclass g_qtMediaRecorderListenerClass = 0;
|
||||||
typedef QMap<jlong, JMediaRecorder*> MediaRecorderMap;
|
typedef QMap<jlong, AndroidMediaRecorder*> MediaRecorderMap;
|
||||||
Q_GLOBAL_STATIC(MediaRecorderMap, mediaRecorders)
|
Q_GLOBAL_STATIC(MediaRecorderMap, mediaRecorders)
|
||||||
|
|
||||||
static void notifyError(JNIEnv* , jobject, jlong id, jint what, jint extra)
|
static void notifyError(JNIEnv* , jobject, jlong id, jint what, jint extra)
|
||||||
{
|
{
|
||||||
JMediaRecorder *obj = mediaRecorders->value(id, 0);
|
AndroidMediaRecorder *obj = mediaRecorders->value(id, 0);
|
||||||
if (obj)
|
if (obj)
|
||||||
emit obj->error(what, extra);
|
emit obj->error(what, extra);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void notifyInfo(JNIEnv* , jobject, jlong id, jint what, jint extra)
|
static void notifyInfo(JNIEnv* , jobject, jlong id, jint what, jint extra)
|
||||||
{
|
{
|
||||||
JMediaRecorder *obj = mediaRecorders->value(id, 0);
|
AndroidMediaRecorder *obj = mediaRecorders->value(id, 0);
|
||||||
if (obj)
|
if (obj)
|
||||||
emit obj->info(what, extra);
|
emit obj->info(what, extra);
|
||||||
}
|
}
|
||||||
|
|
||||||
JMediaRecorder::JMediaRecorder()
|
AndroidMediaRecorder::AndroidMediaRecorder()
|
||||||
: QObject()
|
: QObject()
|
||||||
, m_id(reinterpret_cast<jlong>(this))
|
, m_id(reinterpret_cast<jlong>(this))
|
||||||
{
|
{
|
||||||
@@ -82,17 +82,17 @@ JMediaRecorder::JMediaRecorder()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
JMediaRecorder::~JMediaRecorder()
|
AndroidMediaRecorder::~AndroidMediaRecorder()
|
||||||
{
|
{
|
||||||
mediaRecorders->remove(m_id);
|
mediaRecorders->remove(m_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
void JMediaRecorder::release()
|
void AndroidMediaRecorder::release()
|
||||||
{
|
{
|
||||||
m_mediaRecorder.callMethod<void>("release");
|
m_mediaRecorder.callMethod<void>("release");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool JMediaRecorder::prepare()
|
bool AndroidMediaRecorder::prepare()
|
||||||
{
|
{
|
||||||
QJNIEnvironmentPrivate env;
|
QJNIEnvironmentPrivate env;
|
||||||
m_mediaRecorder.callMethod<void>("prepare");
|
m_mediaRecorder.callMethod<void>("prepare");
|
||||||
@@ -106,12 +106,12 @@ bool JMediaRecorder::prepare()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void JMediaRecorder::reset()
|
void AndroidMediaRecorder::reset()
|
||||||
{
|
{
|
||||||
m_mediaRecorder.callMethod<void>("reset");
|
m_mediaRecorder.callMethod<void>("reset");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool JMediaRecorder::start()
|
bool AndroidMediaRecorder::start()
|
||||||
{
|
{
|
||||||
QJNIEnvironmentPrivate env;
|
QJNIEnvironmentPrivate env;
|
||||||
m_mediaRecorder.callMethod<void>("start");
|
m_mediaRecorder.callMethod<void>("start");
|
||||||
@@ -125,7 +125,7 @@ bool JMediaRecorder::start()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void JMediaRecorder::stop()
|
void AndroidMediaRecorder::stop()
|
||||||
{
|
{
|
||||||
QJNIEnvironmentPrivate env;
|
QJNIEnvironmentPrivate env;
|
||||||
m_mediaRecorder.callMethod<void>("stop");
|
m_mediaRecorder.callMethod<void>("stop");
|
||||||
@@ -137,12 +137,12 @@ void JMediaRecorder::stop()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void JMediaRecorder::setAudioChannels(int numChannels)
|
void AndroidMediaRecorder::setAudioChannels(int numChannels)
|
||||||
{
|
{
|
||||||
m_mediaRecorder.callMethod<void>("setAudioChannels", "(I)V", numChannels);
|
m_mediaRecorder.callMethod<void>("setAudioChannels", "(I)V", numChannels);
|
||||||
}
|
}
|
||||||
|
|
||||||
void JMediaRecorder::setAudioEncoder(AudioEncoder encoder)
|
void AndroidMediaRecorder::setAudioEncoder(AudioEncoder encoder)
|
||||||
{
|
{
|
||||||
QJNIEnvironmentPrivate env;
|
QJNIEnvironmentPrivate env;
|
||||||
m_mediaRecorder.callMethod<void>("setAudioEncoder", "(I)V", int(encoder));
|
m_mediaRecorder.callMethod<void>("setAudioEncoder", "(I)V", int(encoder));
|
||||||
@@ -154,17 +154,17 @@ void JMediaRecorder::setAudioEncoder(AudioEncoder encoder)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void JMediaRecorder::setAudioEncodingBitRate(int bitRate)
|
void AndroidMediaRecorder::setAudioEncodingBitRate(int bitRate)
|
||||||
{
|
{
|
||||||
m_mediaRecorder.callMethod<void>("setAudioEncodingBitRate", "(I)V", bitRate);
|
m_mediaRecorder.callMethod<void>("setAudioEncodingBitRate", "(I)V", bitRate);
|
||||||
}
|
}
|
||||||
|
|
||||||
void JMediaRecorder::setAudioSamplingRate(int samplingRate)
|
void AndroidMediaRecorder::setAudioSamplingRate(int samplingRate)
|
||||||
{
|
{
|
||||||
m_mediaRecorder.callMethod<void>("setAudioSamplingRate", "(I)V", samplingRate);
|
m_mediaRecorder.callMethod<void>("setAudioSamplingRate", "(I)V", samplingRate);
|
||||||
}
|
}
|
||||||
|
|
||||||
void JMediaRecorder::setAudioSource(AudioSource source)
|
void AndroidMediaRecorder::setAudioSource(AudioSource source)
|
||||||
{
|
{
|
||||||
QJNIEnvironmentPrivate env;
|
QJNIEnvironmentPrivate env;
|
||||||
m_mediaRecorder.callMethod<void>("setAudioSource", "(I)V", int(source));
|
m_mediaRecorder.callMethod<void>("setAudioSource", "(I)V", int(source));
|
||||||
@@ -176,13 +176,13 @@ void JMediaRecorder::setAudioSource(AudioSource source)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void JMediaRecorder::setCamera(JCamera *camera)
|
void AndroidMediaRecorder::setCamera(AndroidCamera *camera)
|
||||||
{
|
{
|
||||||
QJNIObjectPrivate cam = camera->getCameraObject();
|
QJNIObjectPrivate cam = camera->getCameraObject();
|
||||||
m_mediaRecorder.callMethod<void>("setCamera", "(Landroid/hardware/Camera;)V", cam.object());
|
m_mediaRecorder.callMethod<void>("setCamera", "(Landroid/hardware/Camera;)V", cam.object());
|
||||||
}
|
}
|
||||||
|
|
||||||
void JMediaRecorder::setVideoEncoder(VideoEncoder encoder)
|
void AndroidMediaRecorder::setVideoEncoder(VideoEncoder encoder)
|
||||||
{
|
{
|
||||||
QJNIEnvironmentPrivate env;
|
QJNIEnvironmentPrivate env;
|
||||||
m_mediaRecorder.callMethod<void>("setVideoEncoder", "(I)V", int(encoder));
|
m_mediaRecorder.callMethod<void>("setVideoEncoder", "(I)V", int(encoder));
|
||||||
@@ -194,12 +194,12 @@ void JMediaRecorder::setVideoEncoder(VideoEncoder encoder)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void JMediaRecorder::setVideoEncodingBitRate(int bitRate)
|
void AndroidMediaRecorder::setVideoEncodingBitRate(int bitRate)
|
||||||
{
|
{
|
||||||
m_mediaRecorder.callMethod<void>("setVideoEncodingBitRate", "(I)V", bitRate);
|
m_mediaRecorder.callMethod<void>("setVideoEncodingBitRate", "(I)V", bitRate);
|
||||||
}
|
}
|
||||||
|
|
||||||
void JMediaRecorder::setVideoFrameRate(int rate)
|
void AndroidMediaRecorder::setVideoFrameRate(int rate)
|
||||||
{
|
{
|
||||||
QJNIEnvironmentPrivate env;
|
QJNIEnvironmentPrivate env;
|
||||||
m_mediaRecorder.callMethod<void>("setVideoFrameRate", "(I)V", rate);
|
m_mediaRecorder.callMethod<void>("setVideoFrameRate", "(I)V", rate);
|
||||||
@@ -211,7 +211,7 @@ void JMediaRecorder::setVideoFrameRate(int rate)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void JMediaRecorder::setVideoSize(const QSize &size)
|
void AndroidMediaRecorder::setVideoSize(const QSize &size)
|
||||||
{
|
{
|
||||||
QJNIEnvironmentPrivate env;
|
QJNIEnvironmentPrivate env;
|
||||||
m_mediaRecorder.callMethod<void>("setVideoSize", "(II)V", size.width(), size.height());
|
m_mediaRecorder.callMethod<void>("setVideoSize", "(II)V", size.width(), size.height());
|
||||||
@@ -223,7 +223,7 @@ void JMediaRecorder::setVideoSize(const QSize &size)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void JMediaRecorder::setVideoSource(VideoSource source)
|
void AndroidMediaRecorder::setVideoSource(VideoSource source)
|
||||||
{
|
{
|
||||||
QJNIEnvironmentPrivate env;
|
QJNIEnvironmentPrivate env;
|
||||||
m_mediaRecorder.callMethod<void>("setVideoSource", "(I)V", int(source));
|
m_mediaRecorder.callMethod<void>("setVideoSource", "(I)V", int(source));
|
||||||
@@ -235,7 +235,7 @@ void JMediaRecorder::setVideoSource(VideoSource source)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void JMediaRecorder::setOrientationHint(int degrees)
|
void AndroidMediaRecorder::setOrientationHint(int degrees)
|
||||||
{
|
{
|
||||||
QJNIEnvironmentPrivate env;
|
QJNIEnvironmentPrivate env;
|
||||||
m_mediaRecorder.callMethod<void>("setOrientationHint", "(I)V", degrees);
|
m_mediaRecorder.callMethod<void>("setOrientationHint", "(I)V", degrees);
|
||||||
@@ -247,7 +247,7 @@ void JMediaRecorder::setOrientationHint(int degrees)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void JMediaRecorder::setOutputFormat(OutputFormat format)
|
void AndroidMediaRecorder::setOutputFormat(OutputFormat format)
|
||||||
{
|
{
|
||||||
QJNIEnvironmentPrivate env;
|
QJNIEnvironmentPrivate env;
|
||||||
m_mediaRecorder.callMethod<void>("setOutputFormat", "(I)V", int(format));
|
m_mediaRecorder.callMethod<void>("setOutputFormat", "(I)V", int(format));
|
||||||
@@ -259,7 +259,7 @@ void JMediaRecorder::setOutputFormat(OutputFormat format)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void JMediaRecorder::setOutputFile(const QString &path)
|
void AndroidMediaRecorder::setOutputFile(const QString &path)
|
||||||
{
|
{
|
||||||
QJNIEnvironmentPrivate env;
|
QJNIEnvironmentPrivate env;
|
||||||
m_mediaRecorder.callMethod<void>("setOutputFile",
|
m_mediaRecorder.callMethod<void>("setOutputFile",
|
||||||
@@ -278,7 +278,7 @@ static JNINativeMethod methods[] = {
|
|||||||
{"notifyInfo", "(JII)V", (void *)notifyInfo}
|
{"notifyInfo", "(JII)V", (void *)notifyInfo}
|
||||||
};
|
};
|
||||||
|
|
||||||
bool JMediaRecorder::initJNI(JNIEnv *env)
|
bool AndroidMediaRecorder::initJNI(JNIEnv *env)
|
||||||
{
|
{
|
||||||
jclass clazz = env->FindClass("org/qtproject/qt5/android/multimedia/QtMediaRecorderListener");
|
jclass clazz = env->FindClass("org/qtproject/qt5/android/multimedia/QtMediaRecorderListener");
|
||||||
if (env->ExceptionCheck())
|
if (env->ExceptionCheck())
|
||||||
@@ -39,8 +39,8 @@
|
|||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#ifndef JMEDIARECORDER_H
|
#ifndef ANDROIDMEDIARECORDER_H
|
||||||
#define JMEDIARECORDER_H
|
#define ANDROIDMEDIARECORDER_H
|
||||||
|
|
||||||
#include <qobject.h>
|
#include <qobject.h>
|
||||||
#include <QtCore/private/qjni_p.h>
|
#include <QtCore/private/qjni_p.h>
|
||||||
@@ -48,9 +48,9 @@
|
|||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
class JCamera;
|
class AndroidCamera;
|
||||||
|
|
||||||
class JMediaRecorder : public QObject
|
class AndroidMediaRecorder : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
@@ -91,8 +91,8 @@ public:
|
|||||||
AMR_WB_Format = 4
|
AMR_WB_Format = 4
|
||||||
};
|
};
|
||||||
|
|
||||||
JMediaRecorder();
|
AndroidMediaRecorder();
|
||||||
~JMediaRecorder();
|
~AndroidMediaRecorder();
|
||||||
|
|
||||||
void release();
|
void release();
|
||||||
bool prepare();
|
bool prepare();
|
||||||
@@ -107,7 +107,7 @@ public:
|
|||||||
void setAudioSamplingRate(int samplingRate);
|
void setAudioSamplingRate(int samplingRate);
|
||||||
void setAudioSource(AudioSource source);
|
void setAudioSource(AudioSource source);
|
||||||
|
|
||||||
void setCamera(JCamera *camera);
|
void setCamera(AndroidCamera *camera);
|
||||||
void setVideoEncoder(VideoEncoder encoder);
|
void setVideoEncoder(VideoEncoder encoder);
|
||||||
void setVideoEncodingBitRate(int bitRate);
|
void setVideoEncodingBitRate(int bitRate);
|
||||||
void setVideoFrameRate(int rate);
|
void setVideoFrameRate(int rate);
|
||||||
@@ -132,4 +132,4 @@ private:
|
|||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
#endif // JMEDIARECORDER_H
|
#endif // ANDROIDMEDIARECORDER_H
|
||||||
@@ -39,14 +39,14 @@
|
|||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "jmultimediautils.h"
|
#include "androidmultimediautils.h"
|
||||||
|
|
||||||
#include <QtCore/private/qjni_p.h>
|
#include <QtCore/private/qjni_p.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
|
||||||
void JMultimediaUtils::enableOrientationListener(bool enable)
|
void AndroidMultimediaUtils::enableOrientationListener(bool enable)
|
||||||
{
|
{
|
||||||
QJNIObjectPrivate::callStaticMethod<void>("org/qtproject/qt5/android/multimedia/QtMultimediaUtils",
|
QJNIObjectPrivate::callStaticMethod<void>("org/qtproject/qt5/android/multimedia/QtMultimediaUtils",
|
||||||
"enableOrientationListener",
|
"enableOrientationListener",
|
||||||
@@ -54,13 +54,13 @@ void JMultimediaUtils::enableOrientationListener(bool enable)
|
|||||||
enable);
|
enable);
|
||||||
}
|
}
|
||||||
|
|
||||||
int JMultimediaUtils::getDeviceOrientation()
|
int AndroidMultimediaUtils::getDeviceOrientation()
|
||||||
{
|
{
|
||||||
return QJNIObjectPrivate::callStaticMethod<jint>("org/qtproject/qt5/android/multimedia/QtMultimediaUtils",
|
return QJNIObjectPrivate::callStaticMethod<jint>("org/qtproject/qt5/android/multimedia/QtMultimediaUtils",
|
||||||
"getDeviceOrientation");
|
"getDeviceOrientation");
|
||||||
}
|
}
|
||||||
|
|
||||||
QString JMultimediaUtils::getDefaultMediaDirectory(MediaType type)
|
QString AndroidMultimediaUtils::getDefaultMediaDirectory(MediaType type)
|
||||||
{
|
{
|
||||||
QJNIObjectPrivate path = QJNIObjectPrivate::callStaticObjectMethod("org/qtproject/qt5/android/multimedia/QtMultimediaUtils",
|
QJNIObjectPrivate path = QJNIObjectPrivate::callStaticObjectMethod("org/qtproject/qt5/android/multimedia/QtMultimediaUtils",
|
||||||
"getDefaultMediaDirectory",
|
"getDefaultMediaDirectory",
|
||||||
@@ -69,7 +69,7 @@ QString JMultimediaUtils::getDefaultMediaDirectory(MediaType type)
|
|||||||
return path.toString();
|
return path.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
void JMultimediaUtils::registerMediaFile(const QString &file)
|
void AndroidMultimediaUtils::registerMediaFile(const QString &file)
|
||||||
{
|
{
|
||||||
QJNIObjectPrivate::callStaticMethod<void>("org/qtproject/qt5/android/multimedia/QtMultimediaUtils",
|
QJNIObjectPrivate::callStaticMethod<void>("org/qtproject/qt5/android/multimedia/QtMultimediaUtils",
|
||||||
"registerMediaFile",
|
"registerMediaFile",
|
||||||
@@ -39,15 +39,15 @@
|
|||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#ifndef JMULTIMEDIAUTILS_H
|
#ifndef ANDROIDMULTIMEDIAUTILS_H
|
||||||
#define JMULTIMEDIAUTILS_H
|
#define ANDROIDMULTIMEDIAUTILS_H
|
||||||
|
|
||||||
#include <qobject.h>
|
#include <qobject.h>
|
||||||
#include <QtCore/private/qjni_p.h>
|
#include <QtCore/private/qjni_p.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
class JMultimediaUtils
|
class AndroidMultimediaUtils
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
enum MediaType {
|
enum MediaType {
|
||||||
@@ -65,4 +65,4 @@ public:
|
|||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
#endif // JMULTIMEDIAUTILS_H
|
#endif // ANDROIDMULTIMEDIAUTILS_H
|
||||||
@@ -39,24 +39,24 @@
|
|||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "jsurfacetexture.h"
|
#include "androidsurfacetexture.h"
|
||||||
#include <QtCore/private/qjni_p.h>
|
#include <QtCore/private/qjni_p.h>
|
||||||
#include <QtCore/private/qjnihelpers_p.h>
|
#include <QtCore/private/qjnihelpers_p.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
static jclass g_qtSurfaceTextureListenerClass = 0;
|
static jclass g_qtSurfaceTextureListenerClass = 0;
|
||||||
static QMap<int, JSurfaceTexture*> g_objectMap;
|
static QMap<int, AndroidSurfaceTexture*> g_objectMap;
|
||||||
|
|
||||||
// native method for QtSurfaceTexture.java
|
// native method for QtSurfaceTexture.java
|
||||||
static void notifyFrameAvailable(JNIEnv* , jobject, int id)
|
static void notifyFrameAvailable(JNIEnv* , jobject, int id)
|
||||||
{
|
{
|
||||||
JSurfaceTexture *obj = g_objectMap.value(id, 0);
|
AndroidSurfaceTexture *obj = g_objectMap.value(id, 0);
|
||||||
if (obj)
|
if (obj)
|
||||||
Q_EMIT obj->frameAvailable();
|
Q_EMIT obj->frameAvailable();
|
||||||
}
|
}
|
||||||
|
|
||||||
JSurfaceTexture::JSurfaceTexture(unsigned int texName)
|
AndroidSurfaceTexture::AndroidSurfaceTexture(unsigned int texName)
|
||||||
: QObject()
|
: QObject()
|
||||||
, m_texID(int(texName))
|
, m_texID(int(texName))
|
||||||
{
|
{
|
||||||
@@ -84,7 +84,7 @@ JSurfaceTexture::JSurfaceTexture(unsigned int texName)
|
|||||||
listener.object());
|
listener.object());
|
||||||
}
|
}
|
||||||
|
|
||||||
JSurfaceTexture::~JSurfaceTexture()
|
AndroidSurfaceTexture::~AndroidSurfaceTexture()
|
||||||
{
|
{
|
||||||
if (m_surfaceTexture.isValid()) {
|
if (m_surfaceTexture.isValid()) {
|
||||||
release();
|
release();
|
||||||
@@ -92,7 +92,7 @@ JSurfaceTexture::~JSurfaceTexture()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QMatrix4x4 JSurfaceTexture::getTransformMatrix()
|
QMatrix4x4 AndroidSurfaceTexture::getTransformMatrix()
|
||||||
{
|
{
|
||||||
QMatrix4x4 matrix;
|
QMatrix4x4 matrix;
|
||||||
if (!m_surfaceTexture.isValid())
|
if (!m_surfaceTexture.isValid())
|
||||||
@@ -108,7 +108,7 @@ QMatrix4x4 JSurfaceTexture::getTransformMatrix()
|
|||||||
return matrix;
|
return matrix;
|
||||||
}
|
}
|
||||||
|
|
||||||
void JSurfaceTexture::release()
|
void AndroidSurfaceTexture::release()
|
||||||
{
|
{
|
||||||
if (QtAndroidPrivate::androidSdkVersion() < 14)
|
if (QtAndroidPrivate::androidSdkVersion() < 14)
|
||||||
return;
|
return;
|
||||||
@@ -116,7 +116,7 @@ void JSurfaceTexture::release()
|
|||||||
m_surfaceTexture.callMethod<void>("release");
|
m_surfaceTexture.callMethod<void>("release");
|
||||||
}
|
}
|
||||||
|
|
||||||
void JSurfaceTexture::updateTexImage()
|
void AndroidSurfaceTexture::updateTexImage()
|
||||||
{
|
{
|
||||||
if (!m_surfaceTexture.isValid())
|
if (!m_surfaceTexture.isValid())
|
||||||
return;
|
return;
|
||||||
@@ -124,7 +124,7 @@ void JSurfaceTexture::updateTexImage()
|
|||||||
m_surfaceTexture.callMethod<void>("updateTexImage");
|
m_surfaceTexture.callMethod<void>("updateTexImage");
|
||||||
}
|
}
|
||||||
|
|
||||||
jobject JSurfaceTexture::object()
|
jobject AndroidSurfaceTexture::object()
|
||||||
{
|
{
|
||||||
return m_surfaceTexture.object();
|
return m_surfaceTexture.object();
|
||||||
}
|
}
|
||||||
@@ -133,7 +133,7 @@ static JNINativeMethod methods[] = {
|
|||||||
{"notifyFrameAvailable", "(I)V", (void *)notifyFrameAvailable}
|
{"notifyFrameAvailable", "(I)V", (void *)notifyFrameAvailable}
|
||||||
};
|
};
|
||||||
|
|
||||||
bool JSurfaceTexture::initJNI(JNIEnv *env)
|
bool AndroidSurfaceTexture::initJNI(JNIEnv *env)
|
||||||
{
|
{
|
||||||
// SurfaceTexture is available since API 11.
|
// SurfaceTexture is available since API 11.
|
||||||
if (QtAndroidPrivate::androidSdkVersion() < 11)
|
if (QtAndroidPrivate::androidSdkVersion() < 11)
|
||||||
@@ -39,8 +39,8 @@
|
|||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#ifndef JSURFACETEXTURE_H
|
#ifndef ANDROIDSURFACETEXTURE_H
|
||||||
#define JSURFACETEXTURE_H
|
#define ANDROIDSURFACETEXTURE_H
|
||||||
|
|
||||||
#include <qobject.h>
|
#include <qobject.h>
|
||||||
#include <QtCore/private/qjni_p.h>
|
#include <QtCore/private/qjni_p.h>
|
||||||
@@ -49,12 +49,12 @@
|
|||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
class JSurfaceTexture : public QObject
|
class AndroidSurfaceTexture : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit JSurfaceTexture(unsigned int texName);
|
explicit AndroidSurfaceTexture(unsigned int texName);
|
||||||
~JSurfaceTexture();
|
~AndroidSurfaceTexture();
|
||||||
|
|
||||||
int textureID() const { return m_texID; }
|
int textureID() const { return m_texID; }
|
||||||
jobject object();
|
jobject object();
|
||||||
@@ -75,4 +75,4 @@ private:
|
|||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
#endif // JSURFACETEXTURE_H
|
#endif // ANDROIDSURFACETEXTURE_H
|
||||||
19
src/plugins/android/src/wrappers/jni/jni.pri
Normal file
19
src/plugins/android/src/wrappers/jni/jni.pri
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
QT += platformsupport-private
|
||||||
|
|
||||||
|
INCLUDEPATH += $$PWD
|
||||||
|
|
||||||
|
HEADERS += \
|
||||||
|
$$PWD/androidmediaplayer.h \
|
||||||
|
$$PWD/androidsurfacetexture.h \
|
||||||
|
$$PWD/androidmediametadataretriever.h \
|
||||||
|
$$PWD/androidcamera.h \
|
||||||
|
$$PWD/androidmultimediautils.h \
|
||||||
|
$$PWD/androidmediarecorder.h
|
||||||
|
|
||||||
|
SOURCES += \
|
||||||
|
$$PWD/androidmediaplayer.cpp \
|
||||||
|
$$PWD/androidsurfacetexture.cpp \
|
||||||
|
$$PWD/androidmediametadataretriever.cpp \
|
||||||
|
$$PWD/androidcamera.cpp \
|
||||||
|
$$PWD/androidmultimediautils.cpp \
|
||||||
|
$$PWD/androidmediarecorder.cpp
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
QT += platformsupport-private
|
|
||||||
|
|
||||||
INCLUDEPATH += $$PWD
|
|
||||||
|
|
||||||
HEADERS += \
|
|
||||||
$$PWD/jmediaplayer.h \
|
|
||||||
$$PWD/jsurfacetexture.h \
|
|
||||||
$$PWD/jmediametadataretriever.h \
|
|
||||||
$$PWD/jcamera.h \
|
|
||||||
$$PWD/jmultimediautils.h \
|
|
||||||
$$PWD/jmediarecorder.h
|
|
||||||
|
|
||||||
SOURCES += \
|
|
||||||
$$PWD/jmediaplayer.cpp \
|
|
||||||
$$PWD/jsurfacetexture.cpp \
|
|
||||||
$$PWD/jmediametadataretriever.cpp \
|
|
||||||
$$PWD/jcamera.cpp \
|
|
||||||
$$PWD/jmultimediautils.cpp \
|
|
||||||
$$PWD/jmediarecorder.cpp
|
|
||||||
Reference in New Issue
Block a user