Merge remote-tracking branch 'origin/stable' into dev
Change-Id: I25197ccc930730be363f8f65624d7fa10c1d33e9
This commit is contained in:
@@ -1,2 +0,0 @@
|
|||||||
LIBS += -lOpenSLES
|
|
||||||
SOURCES += main.cpp
|
|
||||||
@@ -2,7 +2,6 @@ requires(qtHaveModule(gui))
|
|||||||
|
|
||||||
load(configure)
|
load(configure)
|
||||||
qtCompileTest(openal)
|
qtCompileTest(openal)
|
||||||
qtCompileTest(opensles)
|
|
||||||
win32 {
|
win32 {
|
||||||
qtCompileTest(directshow) {
|
qtCompileTest(directshow) {
|
||||||
qtCompileTest(wshellitem)
|
qtCompileTest(wshellitem)
|
||||||
|
|||||||
@@ -8,13 +8,13 @@ QT = core multimedia-private gui-private
|
|||||||
|
|
||||||
unix:!maemo*:contains(QT_CONFIG, alsa) {
|
unix:!maemo*:contains(QT_CONFIG, alsa) {
|
||||||
DEFINES += HAVE_ALSA
|
DEFINES += HAVE_ALSA
|
||||||
LIBS += \
|
LIBS_PRIVATE += \
|
||||||
-lasound
|
-lasound
|
||||||
}
|
}
|
||||||
|
|
||||||
CONFIG += link_pkgconfig
|
CONFIG += link_pkgconfig
|
||||||
|
|
||||||
PKGCONFIG += \
|
PKGCONFIG_PRIVATE += \
|
||||||
gstreamer-0.10 \
|
gstreamer-0.10 \
|
||||||
gstreamer-base-0.10 \
|
gstreamer-base-0.10 \
|
||||||
gstreamer-interfaces-0.10 \
|
gstreamer-interfaces-0.10 \
|
||||||
@@ -22,11 +22,11 @@ PKGCONFIG += \
|
|||||||
gstreamer-video-0.10 \
|
gstreamer-video-0.10 \
|
||||||
gstreamer-pbutils-0.10
|
gstreamer-pbutils-0.10
|
||||||
|
|
||||||
maemo*:PKGCONFIG +=gstreamer-plugins-bad-0.10
|
maemo*: PKGCONFIG_PRIVATE +=gstreamer-plugins-bad-0.10
|
||||||
|
|
||||||
config_resourcepolicy {
|
config_resourcepolicy {
|
||||||
DEFINES += HAVE_RESOURCE_POLICY
|
DEFINES += HAVE_RESOURCE_POLICY
|
||||||
PKGCONFIG += libresourceqt5
|
PKGCONFIG_PRIVATE += libresourceqt5
|
||||||
}
|
}
|
||||||
|
|
||||||
# Header files must go inside source directory of a module
|
# Header files must go inside source directory of a module
|
||||||
@@ -79,24 +79,24 @@ qtHaveModule(widgets) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
maemo6 {
|
maemo6 {
|
||||||
PKGCONFIG += qmsystem2
|
PKGCONFIG_PRIVATE += qmsystem2
|
||||||
|
|
||||||
contains(QT_CONFIG, opengles2):qtHaveModule(widgets) {
|
contains(QT_CONFIG, opengles2):qtHaveModule(widgets) {
|
||||||
PRIVATE_HEADERS += qgstreamergltexturerenderer_p.h
|
PRIVATE_HEADERS += qgstreamergltexturerenderer_p.h
|
||||||
SOURCES += qgstreamergltexturerenderer.cpp
|
SOURCES += qgstreamergltexturerenderer.cpp
|
||||||
QT += opengl
|
QT += opengl
|
||||||
LIBS += -lEGL -lgstmeegointerfaces-0.10
|
LIBS_PRIVATE += -lEGL -lgstmeegointerfaces-0.10
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
config_gstreamer_appsrc {
|
config_gstreamer_appsrc {
|
||||||
PKGCONFIG += gstreamer-app-0.10
|
PKGCONFIG_PRIVATE += gstreamer-app-0.10
|
||||||
PRIVATE_HEADERS += qgstappsrc_p.h
|
PRIVATE_HEADERS += qgstappsrc_p.h
|
||||||
SOURCES += qgstappsrc.cpp
|
SOURCES += qgstappsrc.cpp
|
||||||
|
|
||||||
DEFINES += HAVE_GST_APPSRC
|
DEFINES += HAVE_GST_APPSRC
|
||||||
|
|
||||||
LIBS += -lgstapp-0.10
|
LIBS_PRIVATE += -lgstapp-0.10
|
||||||
}
|
}
|
||||||
|
|
||||||
HEADERS += $$PRIVATE_HEADERS
|
HEADERS += $$PRIVATE_HEADERS
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
module QtAudioEngine
|
module QtAudioEngine
|
||||||
plugin declarative_audioengine
|
plugin declarative_audioengine
|
||||||
typeinfo plugins.qmltypes
|
typeinfo plugins.qmltypes
|
||||||
|
classname QAudioEngineDeclarativeModule
|
||||||
@@ -1,4 +1,6 @@
|
|||||||
module QtMultimedia
|
module QtMultimedia
|
||||||
plugin declarative_multimedia
|
plugin declarative_multimedia
|
||||||
|
classname QMultimediaDeclarativeModule
|
||||||
typeinfo plugins.qmltypes
|
typeinfo plugins.qmltypes
|
||||||
Video 5.0 Video.qml
|
Video 5.0 Video.qml
|
||||||
|
classname QMultimediaDeclarativeModule
|
||||||
|
|||||||
@@ -44,14 +44,14 @@ win32 {
|
|||||||
SOURCES += audio/qaudiodeviceinfo_win32_p.cpp \
|
SOURCES += audio/qaudiodeviceinfo_win32_p.cpp \
|
||||||
audio/qaudiooutput_win32_p.cpp \
|
audio/qaudiooutput_win32_p.cpp \
|
||||||
audio/qaudioinput_win32_p.cpp
|
audio/qaudioinput_win32_p.cpp
|
||||||
LIBS += -lwinmm -lstrmiids -lole32 -loleaut32
|
LIBS_PRIVATE += -lwinmm -lstrmiids -lole32 -loleaut32
|
||||||
}
|
}
|
||||||
|
|
||||||
unix:!mac {
|
unix:!mac {
|
||||||
config_pulseaudio {
|
config_pulseaudio {
|
||||||
DEFINES += QT_NO_AUDIO_BACKEND
|
DEFINES += QT_NO_AUDIO_BACKEND
|
||||||
CONFIG += link_pkgconfig
|
CONFIG += link_pkgconfig
|
||||||
PKGCONFIG += libpulse
|
PKGCONFIG_PRIVATE += libpulse
|
||||||
|
|
||||||
DEFINES += QT_MULTIMEDIA_PULSEAUDIO
|
DEFINES += QT_MULTIMEDIA_PULSEAUDIO
|
||||||
PRIVATE_HEADERS += audio/qsoundeffect_pulse_p.h
|
PRIVATE_HEADERS += audio/qsoundeffect_pulse_p.h
|
||||||
|
|||||||
@@ -236,10 +236,9 @@ void QSoundEffectPrivate::play()
|
|||||||
setStatus(QSoundEffect::Null);
|
setStatus(QSoundEffect::Null);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
setPlaying(true);
|
||||||
if (d->m_audioOutput && d->m_audioOutput->state() == QAudio::StoppedState && d->m_sampleReady)
|
if (d->m_audioOutput && d->m_audioOutput->state() == QAudio::StoppedState && d->m_sampleReady)
|
||||||
d->m_audioOutput->start(d);
|
d->m_audioOutput->start(d);
|
||||||
|
|
||||||
setPlaying(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void QSoundEffectPrivate::stop()
|
void QSoundEffectPrivate::stop()
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
|
|||||||
|
|
||||||
project = QtMultimedia
|
project = QtMultimedia
|
||||||
description = Qt Multimedia Documentation
|
description = Qt Multimedia Documentation
|
||||||
url = http://qt-project.org/doc/qt-$QT_VER/qtmultimedia
|
url = http://qt-project.org/doc/qt-$QT_VER
|
||||||
version = $QT_VERSION
|
version = $QT_VERSION
|
||||||
|
|
||||||
# The following parameters are for creating a qhp file, the qhelpgenerator
|
# The following parameters are for creating a qhp file, the qhelpgenerator
|
||||||
|
|||||||
@@ -60,11 +60,16 @@ ANDROID_LIB_DEPENDENCIES = \
|
|||||||
lib/libQt5MultimediaQuick_p.so:Qt5Quick
|
lib/libQt5MultimediaQuick_p.so:Qt5Quick
|
||||||
ANDROID_BUNDLED_FILES += \
|
ANDROID_BUNDLED_FILES += \
|
||||||
lib/libQt5MultimediaQuick_p.so
|
lib/libQt5MultimediaQuick_p.so
|
||||||
|
ANDROID_PERMISSIONS += \
|
||||||
|
android.permission.CAMERA \
|
||||||
|
android.permission.RECORD_AUDIO
|
||||||
|
ANDROID_FEATURES += \
|
||||||
|
android.hardware.camera
|
||||||
MODULE_PLUGIN_TYPES = \
|
MODULE_PLUGIN_TYPES = \
|
||||||
mediaservice \
|
mediaservice \
|
||||||
audio \
|
audio \
|
||||||
video/videonode
|
video/videonode
|
||||||
|
|
||||||
win32:LIBS += -luuid
|
win32: LIBS_PRIVATE += -luuid
|
||||||
|
|
||||||
HEADERS += $$PUBLIC_HEADERS $$PRIVATE_HEADERS
|
HEADERS += $$PUBLIC_HEADERS $$PRIVATE_HEADERS
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
|
|||||||
|
|
||||||
project = QtMultimediaWidgets
|
project = QtMultimediaWidgets
|
||||||
description = Qt Multimedia Widgets Documentation
|
description = Qt Multimedia Widgets Documentation
|
||||||
url = http://qt-project.org/doc/qt-$QT_VER/qtmultimediawidgets
|
url = http://qt-project.org/doc/qt-$QT_VER
|
||||||
version = $QT_VERSION
|
version = $QT_VERSION
|
||||||
|
|
||||||
# The following parameters are for creating a qhp file, the qhelpgenerator
|
# The following parameters are for creating a qhp file, the qhelpgenerator
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ maemo6 {
|
|||||||
|
|
||||||
SOURCES += qgraphicsvideoitem_maemo6.cpp
|
SOURCES += qgraphicsvideoitem_maemo6.cpp
|
||||||
|
|
||||||
LIBS += -lX11
|
LIBS_PRIVATE += -lX11
|
||||||
} else {
|
} else {
|
||||||
SOURCES += qgraphicsvideoitem.cpp
|
SOURCES += qgraphicsvideoitem.cpp
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -159,7 +159,6 @@ public class QtAndroidMediaPlayer extends MediaPlayer
|
|||||||
public void onCompletion(final MediaPlayer mp)
|
public void onCompletion(final MediaPlayer mp)
|
||||||
{
|
{
|
||||||
onMediaPlayerInfoNative(MEDIA_PLAYER_FINISHED, 0, mID);
|
onMediaPlayerInfoNative(MEDIA_PLAYER_FINISHED, 0, mID);
|
||||||
reset();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -191,9 +190,9 @@ public class QtAndroidMediaPlayer extends MediaPlayer
|
|||||||
@Override
|
@Override
|
||||||
public void onPrepared(final MediaPlayer mp)
|
public void onPrepared(final MediaPlayer mp)
|
||||||
{
|
{
|
||||||
|
mPreparing = false;
|
||||||
onMediaPlayerInfoNative(MEDIA_PLAYER_READY, 0, mID);
|
onMediaPlayerInfoNative(MEDIA_PLAYER_READY, 0, mID);
|
||||||
onMediaPlayerInfoNative(MEDIA_PLAYER_DURATION, getDuration(), mID);
|
onMediaPlayerInfoNative(MEDIA_PLAYER_DURATION, getDuration(), mID);
|
||||||
mPreparing = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -238,6 +238,10 @@ void QAndroidCameraFocusControl::updateFocusZones(QCameraFocusZone::FocusZoneSta
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
QSize viewportSize = m_session->camera()->previewSize();
|
QSize viewportSize = m_session->camera()->previewSize();
|
||||||
|
|
||||||
|
if (!viewportSize.isValid())
|
||||||
|
return;
|
||||||
|
|
||||||
QSizeF focusSize(50.f / viewportSize.width(), 50.f / viewportSize.height());
|
QSizeF focusSize(50.f / viewportSize.width(), 50.f / viewportSize.height());
|
||||||
float x = qBound(qreal(0),
|
float x = qBound(qreal(0),
|
||||||
m_actualFocusPoint.x() - (focusSize.width() / 2),
|
m_actualFocusPoint.x() - (focusSize.width() / 2),
|
||||||
|
|||||||
@@ -52,6 +52,41 @@
|
|||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
class DataVideoBuffer : public QAbstractVideoBuffer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DataVideoBuffer(const QByteArray &d)
|
||||||
|
: QAbstractVideoBuffer(NoHandle)
|
||||||
|
, data(d)
|
||||||
|
, mode(NotMapped)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
MapMode mapMode() const { return mode; }
|
||||||
|
|
||||||
|
uchar *map(MapMode m, int *numBytes, int *bytesPerLine)
|
||||||
|
{
|
||||||
|
if (mode != NotMapped || m == NotMapped)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
mode = m;
|
||||||
|
|
||||||
|
if (numBytes)
|
||||||
|
*numBytes = data.size();
|
||||||
|
|
||||||
|
if (bytesPerLine)
|
||||||
|
*bytesPerLine = -1;
|
||||||
|
|
||||||
|
return reinterpret_cast<uchar *>(data.data());
|
||||||
|
}
|
||||||
|
|
||||||
|
void unmap() { mode = NotMapped; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
QByteArray data;
|
||||||
|
MapMode mode;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
QAndroidCameraSession::QAndroidCameraSession(QObject *parent)
|
QAndroidCameraSession::QAndroidCameraSession(QObject *parent)
|
||||||
: QObject(parent)
|
: QObject(parent)
|
||||||
, m_selectedCamera(0)
|
, m_selectedCamera(0)
|
||||||
@@ -205,8 +240,11 @@ void QAndroidCameraSession::adjustViewfinderSize(const QSize &captureSize, bool
|
|||||||
|
|
||||||
QSize viewfinderResolution = m_camera->previewSize();
|
QSize viewfinderResolution = m_camera->previewSize();
|
||||||
const qreal aspectRatio = qreal(captureSize.width()) / qreal(captureSize.height());
|
const qreal aspectRatio = qreal(captureSize.width()) / qreal(captureSize.height());
|
||||||
if (qFuzzyCompare(aspectRatio, qreal(viewfinderResolution.width()) / qreal(viewfinderResolution.height())))
|
if (viewfinderResolution.isValid() &&
|
||||||
|
qFuzzyCompare(aspectRatio,
|
||||||
|
qreal(viewfinderResolution.width()) / viewfinderResolution.height())) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
QList<QSize> previewSizes = m_camera->getSupportedPreviewSizes();
|
QList<QSize> previewSizes = m_camera->getSupportedPreviewSizes();
|
||||||
for (int i = previewSizes.count() - 1; i >= 0; --i) {
|
for (int i = previewSizes.count() - 1; i >= 0; --i) {
|
||||||
@@ -270,6 +308,7 @@ void QAndroidCameraSession::stopPreview()
|
|||||||
JMultimediaUtils::enableOrientationListener(false);
|
JMultimediaUtils::enableOrientationListener(false);
|
||||||
|
|
||||||
m_camera->stopPreview();
|
m_camera->stopPreview();
|
||||||
|
m_camera->setPreviewSize(QSize());
|
||||||
if (m_videoOutput)
|
if (m_videoOutput)
|
||||||
m_videoOutput->stop();
|
m_videoOutput->stop();
|
||||||
m_previewStarted = false;
|
m_previewStarted = false;
|
||||||
@@ -459,6 +498,7 @@ void QAndroidCameraSession::onCameraPictureCaptured(const QByteArray &data)
|
|||||||
QtConcurrent::run(this, &QAndroidCameraSession::processCapturedImage,
|
QtConcurrent::run(this, &QAndroidCameraSession::processCapturedImage,
|
||||||
m_currentImageCaptureId,
|
m_currentImageCaptureId,
|
||||||
data,
|
data,
|
||||||
|
m_imageSettings.resolution(),
|
||||||
m_captureDestination,
|
m_captureDestination,
|
||||||
m_currentImageCaptureFileName);
|
m_currentImageCaptureFileName);
|
||||||
}
|
}
|
||||||
@@ -473,6 +513,7 @@ void QAndroidCameraSession::onCameraPictureCaptured(const QByteArray &data)
|
|||||||
|
|
||||||
void QAndroidCameraSession::processCapturedImage(int id,
|
void QAndroidCameraSession::processCapturedImage(int id,
|
||||||
const QByteArray &data,
|
const QByteArray &data,
|
||||||
|
const QSize &resolution,
|
||||||
QCameraImageCapture::CaptureDestinations dest,
|
QCameraImageCapture::CaptureDestinations dest,
|
||||||
const QString &fileName)
|
const QString &fileName)
|
||||||
{
|
{
|
||||||
@@ -505,16 +546,8 @@ void QAndroidCameraSession::processCapturedImage(int id,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (dest & QCameraImageCapture::CaptureToBuffer) {
|
if (dest & QCameraImageCapture::CaptureToBuffer) {
|
||||||
QImage image;
|
QVideoFrame frame(new DataVideoBuffer(data), resolution, QVideoFrame::Format_Jpeg);
|
||||||
const bool ok = image.loadFromData(data, "JPG");
|
|
||||||
|
|
||||||
if (ok) {
|
|
||||||
QVideoFrame frame(image);
|
|
||||||
emit imageAvailable(id, frame);
|
emit imageAvailable(id, frame);
|
||||||
} else {
|
|
||||||
emit imageCaptureError(id, QCameraImageCapture::FormatError,
|
|
||||||
tr("Could not load JPEG data from captured image"));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -127,6 +127,7 @@ private:
|
|||||||
void processPreviewImage(int id, const QByteArray &data);
|
void processPreviewImage(int id, const QByteArray &data);
|
||||||
void processCapturedImage(int id,
|
void processCapturedImage(int id,
|
||||||
const QByteArray &data,
|
const QByteArray &data,
|
||||||
|
const QSize &resolution,
|
||||||
QCameraImageCapture::CaptureDestinations dest,
|
QCameraImageCapture::CaptureDestinations dest,
|
||||||
const QString &fileName);
|
const QString &fileName);
|
||||||
|
|
||||||
|
|||||||
@@ -344,7 +344,7 @@ void QAndroidMediaPlayerControl::onMediaPlayerInfo(qint32 what, qint32 extra)
|
|||||||
Q_EMIT positionChanged(extra);
|
Q_EMIT positionChanged(extra);
|
||||||
break;
|
break;
|
||||||
case JMediaPlayer::MEDIA_PLAYER_FINISHED:
|
case JMediaPlayer::MEDIA_PLAYER_FINISHED:
|
||||||
setState(QMediaPlayer::StoppedState);
|
stop();
|
||||||
setMediaStatus(QMediaPlayer::EndOfMedia);
|
setMediaStatus(QMediaPlayer::EndOfMedia);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -261,8 +261,10 @@ void JCamera::setPreviewSize(const QSize &size)
|
|||||||
|
|
||||||
m_previewSize = size;
|
m_previewSize = size;
|
||||||
|
|
||||||
|
if (m_previewSize.isValid()) {
|
||||||
m_parameters.callMethod<void>("setPreviewSize", "(II)V", size.width(), size.height());
|
m_parameters.callMethod<void>("setPreviewSize", "(II)V", size.width(), size.height());
|
||||||
applyParameters();
|
applyParameters();
|
||||||
|
}
|
||||||
|
|
||||||
emit previewSizeChanged();
|
emit previewSizeChanged();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,19 +0,0 @@
|
|||||||
TARGET = qtmedia_blackberry
|
|
||||||
QT += multimedia-private gui-private
|
|
||||||
|
|
||||||
PLUGIN_TYPE=mediaservice
|
|
||||||
PLUGIN_CLASS_NAME = BbServicePlugin
|
|
||||||
load(qt_plugin)
|
|
||||||
|
|
||||||
LIBS += -lscreen
|
|
||||||
|
|
||||||
HEADERS += bbserviceplugin.h
|
|
||||||
SOURCES += bbserviceplugin.cpp
|
|
||||||
|
|
||||||
include(common/common.pri)
|
|
||||||
|
|
||||||
include(camera/camera.pri)
|
|
||||||
|
|
||||||
include(mediaplayer/mediaplayer.pri)
|
|
||||||
|
|
||||||
OTHER_FILES += blackberry_mediaservice.json
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
INCLUDEPATH += $$PWD
|
|
||||||
|
|
||||||
HEADERS += \
|
|
||||||
$$PWD/bbmediaplayercontrol.h \
|
|
||||||
$$PWD/bbmediaplayerservice.h \
|
|
||||||
$$PWD/bbmetadata.h \
|
|
||||||
$$PWD/bbmetadatareadercontrol.h \
|
|
||||||
$$PWD/bbplayervideorenderercontrol.h \
|
|
||||||
$$PWD/bbutil.h \
|
|
||||||
$$PWD/bbvideowindowcontrol.h
|
|
||||||
|
|
||||||
SOURCES += \
|
|
||||||
$$PWD/bbmediaplayercontrol.cpp \
|
|
||||||
$$PWD/bbmediaplayerservice.cpp \
|
|
||||||
$$PWD/bbmetadata.cpp \
|
|
||||||
$$PWD/bbmetadatareadercontrol.cpp \
|
|
||||||
$$PWD/bbplayervideorenderercontrol.cpp \
|
|
||||||
$$PWD/bbutil.cpp \
|
|
||||||
$$PWD/bbvideowindowcontrol.cpp
|
|
||||||
|
|
||||||
LIBS += -lmmrndclient -lstrm
|
|
||||||
@@ -389,86 +389,86 @@ void DirectShowMetaDataControl::updateGraph(IFilterGraph2 *graph, IBaseFilter *s
|
|||||||
if (FAILED(pStore->GetValue(key, &var)))
|
if (FAILED(pStore->GetValue(key, &var)))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (key == PKEY_Author) {
|
if (IsEqualPropertyKey(key, PKEY_Author)) {
|
||||||
m_metadata.insert(QMediaMetaData::Author, convertValue(var));
|
m_metadata.insert(QMediaMetaData::Author, convertValue(var));
|
||||||
} else if (key == PKEY_Title) {
|
} else if (IsEqualPropertyKey(key, PKEY_Title)) {
|
||||||
m_metadata.insert(QMediaMetaData::Title, convertValue(var));
|
m_metadata.insert(QMediaMetaData::Title, convertValue(var));
|
||||||
} else if (key == PKEY_Media_SubTitle) {
|
} else if (IsEqualPropertyKey(key, PKEY_Media_SubTitle)) {
|
||||||
m_metadata.insert(QMediaMetaData::SubTitle, convertValue(var));
|
m_metadata.insert(QMediaMetaData::SubTitle, convertValue(var));
|
||||||
} else if (key == PKEY_ParentalRating) {
|
} else if (IsEqualPropertyKey(key, PKEY_ParentalRating)) {
|
||||||
m_metadata.insert(QMediaMetaData::ParentalRating, convertValue(var));
|
m_metadata.insert(QMediaMetaData::ParentalRating, convertValue(var));
|
||||||
} else if (key == PKEY_Comment) {
|
} else if (IsEqualPropertyKey(key, PKEY_Comment)) {
|
||||||
m_metadata.insert(QMediaMetaData::Description, convertValue(var));
|
m_metadata.insert(QMediaMetaData::Description, convertValue(var));
|
||||||
} else if (key == PKEY_Copyright) {
|
} else if (IsEqualPropertyKey(key, PKEY_Copyright)) {
|
||||||
m_metadata.insert(QMediaMetaData::Copyright, convertValue(var));
|
m_metadata.insert(QMediaMetaData::Copyright, convertValue(var));
|
||||||
} else if (key == PKEY_Media_ProviderStyle) {
|
} else if (IsEqualPropertyKey(key, PKEY_Media_ProviderStyle)) {
|
||||||
m_metadata.insert(QMediaMetaData::Genre, convertValue(var));
|
m_metadata.insert(QMediaMetaData::Genre, convertValue(var));
|
||||||
} else if (key == PKEY_Media_Year) {
|
} else if (IsEqualPropertyKey(key, PKEY_Media_Year)) {
|
||||||
m_metadata.insert(QMediaMetaData::Year, convertValue(var));
|
m_metadata.insert(QMediaMetaData::Year, convertValue(var));
|
||||||
} else if (key == PKEY_Media_DateEncoded) {
|
} else if (IsEqualPropertyKey(key, PKEY_Media_DateEncoded)) {
|
||||||
m_metadata.insert(QMediaMetaData::Date, convertValue(var));
|
m_metadata.insert(QMediaMetaData::Date, convertValue(var));
|
||||||
} else if (key == PKEY_Rating) {
|
} else if (IsEqualPropertyKey(key, PKEY_Rating)) {
|
||||||
m_metadata.insert(QMediaMetaData::UserRating,
|
m_metadata.insert(QMediaMetaData::UserRating,
|
||||||
int((convertValue(var).toUInt() - 1) / qreal(98) * 100));
|
int((convertValue(var).toUInt() - 1) / qreal(98) * 100));
|
||||||
} else if (key == PKEY_Keywords) {
|
} else if (IsEqualPropertyKey(key, PKEY_Keywords)) {
|
||||||
m_metadata.insert(QMediaMetaData::Keywords, convertValue(var));
|
m_metadata.insert(QMediaMetaData::Keywords, convertValue(var));
|
||||||
} else if (key == PKEY_Language) {
|
} else if (IsEqualPropertyKey(key, PKEY_Language)) {
|
||||||
m_metadata.insert(QMediaMetaData::Language, convertValue(var));
|
m_metadata.insert(QMediaMetaData::Language, convertValue(var));
|
||||||
} else if (key == PKEY_Media_Publisher) {
|
} else if (IsEqualPropertyKey(key, PKEY_Media_Publisher)) {
|
||||||
m_metadata.insert(QMediaMetaData::Publisher, convertValue(var));
|
m_metadata.insert(QMediaMetaData::Publisher, convertValue(var));
|
||||||
} else if (key == PKEY_Media_Duration) {
|
} else if (IsEqualPropertyKey(key, PKEY_Media_Duration)) {
|
||||||
m_metadata.insert(QMediaMetaData::Duration,
|
m_metadata.insert(QMediaMetaData::Duration,
|
||||||
(convertValue(var).toLongLong() + 10000) / 10000);
|
(convertValue(var).toLongLong() + 10000) / 10000);
|
||||||
} else if (key == PKEY_Audio_EncodingBitrate) {
|
} else if (IsEqualPropertyKey(key, PKEY_Audio_EncodingBitrate)) {
|
||||||
m_metadata.insert(QMediaMetaData::AudioBitRate, convertValue(var));
|
m_metadata.insert(QMediaMetaData::AudioBitRate, convertValue(var));
|
||||||
} else if (key == PKEY_Media_AverageLevel) {
|
} else if (IsEqualPropertyKey(key, PKEY_Media_AverageLevel)) {
|
||||||
m_metadata.insert(QMediaMetaData::AverageLevel, convertValue(var));
|
m_metadata.insert(QMediaMetaData::AverageLevel, convertValue(var));
|
||||||
} else if (key == PKEY_Audio_ChannelCount) {
|
} else if (IsEqualPropertyKey(key, PKEY_Audio_ChannelCount)) {
|
||||||
m_metadata.insert(QMediaMetaData::ChannelCount, convertValue(var));
|
m_metadata.insert(QMediaMetaData::ChannelCount, convertValue(var));
|
||||||
} else if (key == PKEY_Audio_PeakValue) {
|
} else if (IsEqualPropertyKey(key, PKEY_Audio_PeakValue)) {
|
||||||
m_metadata.insert(QMediaMetaData::PeakValue, convertValue(var));
|
m_metadata.insert(QMediaMetaData::PeakValue, convertValue(var));
|
||||||
} else if (key == PKEY_Audio_SampleRate) {
|
} else if (IsEqualPropertyKey(key, PKEY_Audio_SampleRate)) {
|
||||||
m_metadata.insert(QMediaMetaData::SampleRate, convertValue(var));
|
m_metadata.insert(QMediaMetaData::SampleRate, convertValue(var));
|
||||||
} else if (key == PKEY_Music_AlbumTitle) {
|
} else if (IsEqualPropertyKey(key, PKEY_Music_AlbumTitle)) {
|
||||||
m_metadata.insert(QMediaMetaData::AlbumTitle, convertValue(var));
|
m_metadata.insert(QMediaMetaData::AlbumTitle, convertValue(var));
|
||||||
} else if (key == PKEY_Music_AlbumArtist) {
|
} else if (IsEqualPropertyKey(key, PKEY_Music_AlbumArtist)) {
|
||||||
m_metadata.insert(QMediaMetaData::AlbumArtist, convertValue(var));
|
m_metadata.insert(QMediaMetaData::AlbumArtist, convertValue(var));
|
||||||
} else if (key == PKEY_Music_Artist) {
|
} else if (IsEqualPropertyKey(key, PKEY_Music_Artist)) {
|
||||||
m_metadata.insert(QMediaMetaData::ContributingArtist, convertValue(var));
|
m_metadata.insert(QMediaMetaData::ContributingArtist, convertValue(var));
|
||||||
} else if (key == PKEY_Music_Composer) {
|
} else if (IsEqualPropertyKey(key, PKEY_Music_Composer)) {
|
||||||
m_metadata.insert(QMediaMetaData::Composer, convertValue(var));
|
m_metadata.insert(QMediaMetaData::Composer, convertValue(var));
|
||||||
} else if (key == PKEY_Music_Conductor) {
|
} else if (IsEqualPropertyKey(key, PKEY_Music_Conductor)) {
|
||||||
m_metadata.insert(QMediaMetaData::Conductor, convertValue(var));
|
m_metadata.insert(QMediaMetaData::Conductor, convertValue(var));
|
||||||
} else if (key == PKEY_Music_Lyrics) {
|
} else if (IsEqualPropertyKey(key, PKEY_Music_Lyrics)) {
|
||||||
m_metadata.insert(QMediaMetaData::Lyrics, convertValue(var));
|
m_metadata.insert(QMediaMetaData::Lyrics, convertValue(var));
|
||||||
} else if (key == PKEY_Music_Mood) {
|
} else if (IsEqualPropertyKey(key, PKEY_Music_Mood)) {
|
||||||
m_metadata.insert(QMediaMetaData::Mood, convertValue(var));
|
m_metadata.insert(QMediaMetaData::Mood, convertValue(var));
|
||||||
} else if (key == PKEY_Music_TrackNumber) {
|
} else if (IsEqualPropertyKey(key, PKEY_Music_TrackNumber)) {
|
||||||
m_metadata.insert(QMediaMetaData::TrackNumber, convertValue(var));
|
m_metadata.insert(QMediaMetaData::TrackNumber, convertValue(var));
|
||||||
} else if (key == PKEY_Music_Genre) {
|
} else if (IsEqualPropertyKey(key, PKEY_Music_Genre)) {
|
||||||
m_metadata.insert(QMediaMetaData::Genre, convertValue(var));
|
m_metadata.insert(QMediaMetaData::Genre, convertValue(var));
|
||||||
} else if (key == PKEY_ThumbnailStream) {
|
} else if (IsEqualPropertyKey(key, PKEY_ThumbnailStream)) {
|
||||||
m_metadata.insert(QMediaMetaData::ThumbnailImage, convertValue(var));
|
m_metadata.insert(QMediaMetaData::ThumbnailImage, convertValue(var));
|
||||||
} else if (key == PKEY_Video_FrameHeight) {
|
} else if (IsEqualPropertyKey(key, PKEY_Video_FrameHeight)) {
|
||||||
QSize res;
|
QSize res;
|
||||||
res.setHeight(convertValue(var).toUInt());
|
res.setHeight(convertValue(var).toUInt());
|
||||||
if (SUCCEEDED(pStore->GetValue(PKEY_Video_FrameWidth, &var)))
|
if (SUCCEEDED(pStore->GetValue(PKEY_Video_FrameWidth, &var)))
|
||||||
res.setWidth(convertValue(var).toUInt());
|
res.setWidth(convertValue(var).toUInt());
|
||||||
m_metadata.insert(QMediaMetaData::Resolution, res);
|
m_metadata.insert(QMediaMetaData::Resolution, res);
|
||||||
} else if (key == PKEY_Video_HorizontalAspectRatio) {
|
} else if (IsEqualPropertyKey(key, PKEY_Video_HorizontalAspectRatio)) {
|
||||||
QSize aspectRatio;
|
QSize aspectRatio;
|
||||||
aspectRatio.setWidth(convertValue(var).toUInt());
|
aspectRatio.setWidth(convertValue(var).toUInt());
|
||||||
if (SUCCEEDED(pStore->GetValue(PKEY_Video_VerticalAspectRatio, &var)))
|
if (SUCCEEDED(pStore->GetValue(PKEY_Video_VerticalAspectRatio, &var)))
|
||||||
aspectRatio.setHeight(convertValue(var).toUInt());
|
aspectRatio.setHeight(convertValue(var).toUInt());
|
||||||
m_metadata.insert(QMediaMetaData::PixelAspectRatio, aspectRatio);
|
m_metadata.insert(QMediaMetaData::PixelAspectRatio, aspectRatio);
|
||||||
} else if (key == PKEY_Video_FrameRate) {
|
} else if (IsEqualPropertyKey(key, PKEY_Video_FrameRate)) {
|
||||||
m_metadata.insert(QMediaMetaData::VideoFrameRate,
|
m_metadata.insert(QMediaMetaData::VideoFrameRate,
|
||||||
convertValue(var).toReal() / 1000);
|
convertValue(var).toReal() / 1000);
|
||||||
} else if (key == PKEY_Video_EncodingBitrate) {
|
} else if (IsEqualPropertyKey(key, PKEY_Video_EncodingBitrate)) {
|
||||||
m_metadata.insert(QMediaMetaData::VideoBitRate, convertValue(var));
|
m_metadata.insert(QMediaMetaData::VideoBitRate, convertValue(var));
|
||||||
} else if (key == PKEY_Video_Director) {
|
} else if (IsEqualPropertyKey(key, PKEY_Video_Director)) {
|
||||||
m_metadata.insert(QMediaMetaData::Director, convertValue(var));
|
m_metadata.insert(QMediaMetaData::Director, convertValue(var));
|
||||||
} else if (key == PKEY_Media_Writer) {
|
} else if (IsEqualPropertyKey(key, PKEY_Media_Writer)) {
|
||||||
m_metadata.insert(QMediaMetaData::Writer, convertValue(var));
|
m_metadata.insert(QMediaMetaData::Writer, convertValue(var));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,15 +9,15 @@ TEMPLATE = subdirs
|
|||||||
SUBDIRS += m3u
|
SUBDIRS += m3u
|
||||||
|
|
||||||
android {
|
android {
|
||||||
SUBDIRS += android
|
SUBDIRS += android opensles
|
||||||
}
|
|
||||||
|
|
||||||
blackberry {
|
|
||||||
SUBDIRS += blackberry
|
|
||||||
}
|
}
|
||||||
|
|
||||||
qnx {
|
qnx {
|
||||||
SUBDIRS += audiocapture qnx
|
SUBDIRS += qnx audiocapture
|
||||||
|
}
|
||||||
|
|
||||||
|
qnx:!blackberry {
|
||||||
|
SUBDIRS += qnx-audio
|
||||||
}
|
}
|
||||||
|
|
||||||
win32 {
|
win32 {
|
||||||
@@ -52,10 +52,6 @@ mac:!simulator {
|
|||||||
!ios: SUBDIRS += qt7
|
!ios: SUBDIRS += qt7
|
||||||
}
|
}
|
||||||
|
|
||||||
config_opensles {
|
|
||||||
SUBDIRS += opensles
|
|
||||||
}
|
|
||||||
|
|
||||||
config_resourcepolicy {
|
config_resourcepolicy {
|
||||||
SUBDIRS += resourcepolicy
|
SUBDIRS += resourcepolicy
|
||||||
}
|
}
|
||||||
|
|||||||
3
src/plugins/qnx-audio/qnx-audio.pro
Normal file
3
src/plugins/qnx-audio/qnx-audio.pro
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
TEMPLATE = subdirs
|
||||||
|
|
||||||
|
SUBDIRS = audio
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
|
|
||||||
#include "bbcameraservice.h"
|
#include "bbcameraservice.h"
|
||||||
#include "bbvideodeviceselectorcontrol.h"
|
#include "bbvideodeviceselectorcontrol.h"
|
||||||
#include "bbmediaplayerservice.h"
|
#include "mmrenderermediaplayerservice.h"
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
@@ -58,7 +58,7 @@ QMediaService *BbServicePlugin::create(const QString &key)
|
|||||||
return new BbCameraService();
|
return new BbCameraService();
|
||||||
|
|
||||||
if (key == QLatin1String(Q_MEDIASERVICE_MEDIAPLAYER))
|
if (key == QLatin1String(Q_MEDIASERVICE_MEDIAPLAYER))
|
||||||
return new BbMediaPlayerService();
|
return new MmRendererMediaPlayerService();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
258
src/plugins/qnx/camera/bbcameralockscontrol.cpp
Normal file
258
src/plugins/qnx/camera/bbcameralockscontrol.cpp
Normal file
@@ -0,0 +1,258 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2013 Research In Motion
|
||||||
|
** Contact: http://www.qt-project.org/legal
|
||||||
|
**
|
||||||
|
** This file is part of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and Digia. For licensing terms and
|
||||||
|
** conditions see http://qt.digia.com/licensing. For further information
|
||||||
|
** use the contact form at http://qt.digia.com/contact-us.
|
||||||
|
**
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
|
** General Public License version 2.1 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||||
|
** packaging of this file. Please review the following information to
|
||||||
|
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||||
|
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** In addition, as a special exception, Digia gives you certain additional
|
||||||
|
** rights. These rights are described in the Digia Qt LGPL Exception
|
||||||
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||||
|
**
|
||||||
|
** GNU General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
|
** General Public License version 3.0 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL included in the
|
||||||
|
** packaging of this file. Please review the following information to
|
||||||
|
** ensure the GNU General Public License version 3.0 requirements will be
|
||||||
|
** met: http://www.gnu.org/copyleft/gpl.html.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
#include "bbcameralockscontrol.h"
|
||||||
|
|
||||||
|
#include "bbcamerasession.h"
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
BbCameraLocksControl::BbCameraLocksControl(BbCameraSession *session, QObject *parent)
|
||||||
|
: QCameraLocksControl(parent)
|
||||||
|
, m_session(session)
|
||||||
|
, m_locksApplyMode(IndependentMode)
|
||||||
|
, m_focusLockStatus(QCamera::Unlocked)
|
||||||
|
, m_exposureLockStatus(QCamera::Unlocked)
|
||||||
|
, m_whiteBalanceLockStatus(QCamera::Unlocked)
|
||||||
|
, m_currentLockTypes(QCamera::NoLock)
|
||||||
|
, m_supportedLockTypes(QCamera::NoLock)
|
||||||
|
{
|
||||||
|
connect(m_session, SIGNAL(cameraOpened()), SLOT(cameraOpened()));
|
||||||
|
connect(m_session, SIGNAL(focusStatusChanged(int)), SLOT(focusStatusChanged(int)));
|
||||||
|
}
|
||||||
|
|
||||||
|
QCamera::LockTypes BbCameraLocksControl::supportedLocks() const
|
||||||
|
{
|
||||||
|
return (QCamera::LockFocus | QCamera::LockExposure | QCamera::LockWhiteBalance);
|
||||||
|
}
|
||||||
|
|
||||||
|
QCamera::LockStatus BbCameraLocksControl::lockStatus(QCamera::LockType lock) const
|
||||||
|
{
|
||||||
|
if (!m_supportedLockTypes.testFlag(lock) || (m_session->handle() == CAMERA_HANDLE_INVALID))
|
||||||
|
return QCamera::Locked;
|
||||||
|
|
||||||
|
switch (lock) {
|
||||||
|
case QCamera::LockExposure:
|
||||||
|
return m_exposureLockStatus;
|
||||||
|
case QCamera::LockWhiteBalance:
|
||||||
|
return m_whiteBalanceLockStatus;
|
||||||
|
case QCamera::LockFocus:
|
||||||
|
return m_focusLockStatus;
|
||||||
|
default:
|
||||||
|
return QCamera::Locked;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BbCameraLocksControl::searchAndLock(QCamera::LockTypes locks)
|
||||||
|
{
|
||||||
|
if (m_session->handle() == CAMERA_HANDLE_INVALID)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// filter out unsupported locks
|
||||||
|
locks &= m_supportedLockTypes;
|
||||||
|
|
||||||
|
m_currentLockTypes |= locks;
|
||||||
|
|
||||||
|
uint32_t lockModes = CAMERA_3A_NONE;
|
||||||
|
|
||||||
|
switch (m_locksApplyMode) {
|
||||||
|
case IndependentMode:
|
||||||
|
if (m_currentLockTypes & QCamera::LockExposure)
|
||||||
|
lockModes |= CAMERA_3A_AUTOEXPOSURE;
|
||||||
|
if (m_currentLockTypes & QCamera::LockWhiteBalance)
|
||||||
|
lockModes |= CAMERA_3A_AUTOWHITEBALANCE;
|
||||||
|
if (m_currentLockTypes & QCamera::LockFocus)
|
||||||
|
lockModes |= CAMERA_3A_AUTOFOCUS;
|
||||||
|
break;
|
||||||
|
case FocusExposureBoundMode:
|
||||||
|
if ((m_currentLockTypes & QCamera::LockExposure) || (m_currentLockTypes & QCamera::LockFocus))
|
||||||
|
lockModes = (CAMERA_3A_AUTOEXPOSURE | CAMERA_3A_AUTOFOCUS);
|
||||||
|
break;
|
||||||
|
case AllBoundMode:
|
||||||
|
lockModes = (CAMERA_3A_AUTOEXPOSURE | CAMERA_3A_AUTOFOCUS | CAMERA_3A_AUTOWHITEBALANCE);
|
||||||
|
break;
|
||||||
|
case FocusOnlyMode:
|
||||||
|
lockModes = CAMERA_3A_AUTOFOCUS;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
const camera_error_t result = camera_set_3a_lock(m_session->handle(), lockModes);
|
||||||
|
|
||||||
|
if (result != CAMERA_EOK) {
|
||||||
|
qWarning() << "Unable to set lock modes:" << result;
|
||||||
|
} else {
|
||||||
|
if (lockModes & CAMERA_3A_AUTOFOCUS) {
|
||||||
|
// handled by focusStatusChanged()
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lockModes & CAMERA_3A_AUTOEXPOSURE) {
|
||||||
|
m_exposureLockStatus = QCamera::Locked;
|
||||||
|
emit lockStatusChanged(QCamera::LockExposure, QCamera::Locked, QCamera::LockAcquired);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lockModes & CAMERA_3A_AUTOWHITEBALANCE) {
|
||||||
|
m_whiteBalanceLockStatus = QCamera::Locked;
|
||||||
|
emit lockStatusChanged(QCamera::LockWhiteBalance, QCamera::Locked, QCamera::LockAcquired);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BbCameraLocksControl::unlock(QCamera::LockTypes locks)
|
||||||
|
{
|
||||||
|
// filter out unsupported locks
|
||||||
|
locks &= m_supportedLockTypes;
|
||||||
|
|
||||||
|
m_currentLockTypes &= ~locks;
|
||||||
|
|
||||||
|
uint32_t lockModes = CAMERA_3A_NONE;
|
||||||
|
|
||||||
|
switch (m_locksApplyMode) {
|
||||||
|
case IndependentMode:
|
||||||
|
if (m_currentLockTypes & QCamera::LockExposure)
|
||||||
|
lockModes |= CAMERA_3A_AUTOEXPOSURE;
|
||||||
|
if (m_currentLockTypes & QCamera::LockWhiteBalance)
|
||||||
|
lockModes |= CAMERA_3A_AUTOWHITEBALANCE;
|
||||||
|
if (m_currentLockTypes & QCamera::LockFocus)
|
||||||
|
lockModes |= CAMERA_3A_AUTOFOCUS;
|
||||||
|
break;
|
||||||
|
case FocusExposureBoundMode:
|
||||||
|
if ((m_currentLockTypes & QCamera::LockExposure) || (m_currentLockTypes & QCamera::LockFocus))
|
||||||
|
lockModes = (CAMERA_3A_AUTOEXPOSURE | CAMERA_3A_AUTOFOCUS);
|
||||||
|
break;
|
||||||
|
case AllBoundMode:
|
||||||
|
lockModes = (CAMERA_3A_AUTOEXPOSURE | CAMERA_3A_AUTOFOCUS | CAMERA_3A_AUTOWHITEBALANCE);
|
||||||
|
break;
|
||||||
|
case FocusOnlyMode:
|
||||||
|
lockModes = CAMERA_3A_AUTOFOCUS;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
const camera_error_t result = camera_set_3a_lock(m_session->handle(), lockModes);
|
||||||
|
|
||||||
|
if (result != CAMERA_EOK) {
|
||||||
|
qWarning() << "Unable to set lock modes:" << result;
|
||||||
|
} else {
|
||||||
|
if (locks.testFlag(QCamera::LockFocus)) {
|
||||||
|
// handled by focusStatusChanged()
|
||||||
|
}
|
||||||
|
|
||||||
|
if (locks.testFlag(QCamera::LockExposure)) {
|
||||||
|
m_exposureLockStatus = QCamera::Unlocked;
|
||||||
|
emit lockStatusChanged(QCamera::LockExposure, QCamera::Unlocked, QCamera::UserRequest);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (locks.testFlag(QCamera::LockWhiteBalance)) {
|
||||||
|
m_whiteBalanceLockStatus = QCamera::Unlocked;
|
||||||
|
emit lockStatusChanged(QCamera::LockWhiteBalance, QCamera::Unlocked, QCamera::UserRequest);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BbCameraLocksControl::cameraOpened()
|
||||||
|
{
|
||||||
|
// retrieve information about lock apply modes
|
||||||
|
int supported = 0;
|
||||||
|
uint32_t modes[20];
|
||||||
|
|
||||||
|
const camera_error_t result = camera_get_3a_lock_modes(m_session->handle(), 20, &supported, modes);
|
||||||
|
|
||||||
|
if (result == CAMERA_EOK) {
|
||||||
|
// see API documentation of camera_get_3a_lock_modes for explanation of case discrimination below
|
||||||
|
if (supported == 4) {
|
||||||
|
m_locksApplyMode = IndependentMode;
|
||||||
|
} else if (supported == 3) {
|
||||||
|
m_locksApplyMode = FocusExposureBoundMode;
|
||||||
|
} else if (supported == 2) {
|
||||||
|
if (modes[0] == (CAMERA_3A_AUTOFOCUS | CAMERA_3A_AUTOEXPOSURE | CAMERA_3A_AUTOWHITEBALANCE))
|
||||||
|
m_locksApplyMode = AllBoundMode;
|
||||||
|
else
|
||||||
|
m_locksApplyMode = FocusOnlyMode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// retrieve information about supported lock types
|
||||||
|
m_supportedLockTypes = QCamera::NoLock;
|
||||||
|
|
||||||
|
if (camera_has_feature(m_session->handle(), CAMERA_FEATURE_AUTOFOCUS))
|
||||||
|
m_supportedLockTypes |= QCamera::LockFocus;
|
||||||
|
|
||||||
|
if (camera_has_feature(m_session->handle(), CAMERA_FEATURE_AUTOEXPOSURE))
|
||||||
|
m_supportedLockTypes |= QCamera::LockExposure;
|
||||||
|
|
||||||
|
if (camera_has_feature(m_session->handle(), CAMERA_FEATURE_AUTOWHITEBALANCE))
|
||||||
|
m_supportedLockTypes |= QCamera::LockWhiteBalance;
|
||||||
|
|
||||||
|
m_focusLockStatus = QCamera::Unlocked;
|
||||||
|
m_exposureLockStatus = QCamera::Unlocked;
|
||||||
|
m_whiteBalanceLockStatus = QCamera::Unlocked;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BbCameraLocksControl::focusStatusChanged(int value)
|
||||||
|
{
|
||||||
|
const camera_focusstate_t focusState = static_cast<camera_focusstate_t>(value);
|
||||||
|
|
||||||
|
switch (focusState) {
|
||||||
|
case CAMERA_FOCUSSTATE_NONE:
|
||||||
|
m_focusLockStatus = QCamera::Unlocked;
|
||||||
|
emit lockStatusChanged(QCamera::LockFocus, QCamera::Unlocked, QCamera::UserRequest);
|
||||||
|
break;
|
||||||
|
case CAMERA_FOCUSSTATE_WAITING:
|
||||||
|
case CAMERA_FOCUSSTATE_SEARCHING:
|
||||||
|
m_focusLockStatus = QCamera::Searching;
|
||||||
|
emit lockStatusChanged(QCamera::LockFocus, QCamera::Searching, QCamera::UserRequest);
|
||||||
|
break;
|
||||||
|
case CAMERA_FOCUSSTATE_FAILED:
|
||||||
|
m_focusLockStatus = QCamera::Unlocked;
|
||||||
|
emit lockStatusChanged(QCamera::LockFocus, QCamera::Unlocked, QCamera::LockFailed);
|
||||||
|
break;
|
||||||
|
case CAMERA_FOCUSSTATE_LOCKED:
|
||||||
|
m_focusLockStatus = QCamera::Locked;
|
||||||
|
emit lockStatusChanged(QCamera::LockFocus, QCamera::Locked, QCamera::LockAcquired);
|
||||||
|
break;
|
||||||
|
case CAMERA_FOCUSSTATE_SCENECHANGE:
|
||||||
|
m_focusLockStatus = QCamera::Unlocked;
|
||||||
|
emit lockStatusChanged(QCamera::LockFocus, QCamera::Unlocked, QCamera::LockTemporaryLost);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QT_END_NAMESPACE
|
||||||
@@ -51,6 +51,14 @@ class BbCameraLocksControl : public QCameraLocksControl
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
|
enum LocksApplyMode
|
||||||
|
{
|
||||||
|
IndependentMode,
|
||||||
|
FocusExposureBoundMode,
|
||||||
|
AllBoundMode,
|
||||||
|
FocusOnlyMode
|
||||||
|
};
|
||||||
|
|
||||||
explicit BbCameraLocksControl(BbCameraSession *session, QObject *parent = 0);
|
explicit BbCameraLocksControl(BbCameraSession *session, QObject *parent = 0);
|
||||||
|
|
||||||
QCamera::LockTypes supportedLocks() const Q_DECL_OVERRIDE;
|
QCamera::LockTypes supportedLocks() const Q_DECL_OVERRIDE;
|
||||||
@@ -58,8 +66,19 @@ public:
|
|||||||
void searchAndLock(QCamera::LockTypes locks) Q_DECL_OVERRIDE;
|
void searchAndLock(QCamera::LockTypes locks) Q_DECL_OVERRIDE;
|
||||||
void unlock(QCamera::LockTypes locks) Q_DECL_OVERRIDE;
|
void unlock(QCamera::LockTypes locks) Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
|
private Q_SLOTS:
|
||||||
|
void cameraOpened();
|
||||||
|
void focusStatusChanged(int value);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
BbCameraSession *m_session;
|
BbCameraSession *m_session;
|
||||||
|
|
||||||
|
LocksApplyMode m_locksApplyMode;
|
||||||
|
QCamera::LockStatus m_focusLockStatus;
|
||||||
|
QCamera::LockStatus m_exposureLockStatus;
|
||||||
|
QCamera::LockStatus m_whiteBalanceLockStatus;
|
||||||
|
QCamera::LockTypes m_currentLockTypes;
|
||||||
|
QCamera::LockTypes m_supportedLockTypes;
|
||||||
};
|
};
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
@@ -131,8 +131,6 @@ BbCameraSession::BbCameraSession(QObject *parent)
|
|||||||
, m_captureImageDriveMode(QCameraImageCapture::SingleImageCapture)
|
, m_captureImageDriveMode(QCameraImageCapture::SingleImageCapture)
|
||||||
, m_lastImageCaptureId(0)
|
, m_lastImageCaptureId(0)
|
||||||
, m_captureDestination(QCameraImageCapture::CaptureToFile)
|
, m_captureDestination(QCameraImageCapture::CaptureToFile)
|
||||||
, m_locksApplyMode(IndependentMode)
|
|
||||||
, m_focusLockStatus(QCamera::Unlocked)
|
|
||||||
, m_videoState(QMediaRecorder::StoppedState)
|
, m_videoState(QMediaRecorder::StoppedState)
|
||||||
, m_videoStatus(QMediaRecorder::LoadedStatus)
|
, m_videoStatus(QMediaRecorder::LoadedStatus)
|
||||||
, m_handle(CAMERA_HANDLE_INVALID)
|
, m_handle(CAMERA_HANDLE_INVALID)
|
||||||
@@ -175,22 +173,18 @@ void BbCameraSession::setState(QCamera::State state)
|
|||||||
}
|
}
|
||||||
} else if (state == QCamera::ActiveState) {
|
} else if (state == QCamera::ActiveState) {
|
||||||
if (openCamera()) {
|
if (openCamera()) {
|
||||||
applyConfiguration();
|
QMetaObject::invokeMethod(this, "applyConfiguration", Qt::QueuedConnection);
|
||||||
if (startViewFinder()) {
|
|
||||||
m_state = state;
|
m_state = state;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
} else if (previousState == QCamera::LoadedState) {
|
} else if (previousState == QCamera::LoadedState) {
|
||||||
if (state == QCamera::UnloadedState) {
|
if (state == QCamera::UnloadedState) {
|
||||||
closeCamera();
|
closeCamera();
|
||||||
m_state = state;
|
m_state = state;
|
||||||
} else if (state == QCamera::ActiveState) {
|
} else if (state == QCamera::ActiveState) {
|
||||||
applyConfiguration();
|
QMetaObject::invokeMethod(this, "applyConfiguration", Qt::QueuedConnection);
|
||||||
if (startViewFinder()) {
|
|
||||||
m_state = state;
|
m_state = state;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
} else if (previousState == QCamera::ActiveState) {
|
} else if (previousState == QCamera::ActiveState) {
|
||||||
if (state == QCamera::LoadedState) {
|
if (state == QCamera::LoadedState) {
|
||||||
stopViewFinder();
|
stopViewFinder();
|
||||||
@@ -458,95 +452,6 @@ void BbCameraSession::setImageSettings(const QImageEncoderSettings &settings)
|
|||||||
m_imageEncoderSettings.setCodec(QLatin1String("jpeg"));
|
m_imageEncoderSettings.setCodec(QLatin1String("jpeg"));
|
||||||
}
|
}
|
||||||
|
|
||||||
QCamera::LockTypes BbCameraSession::supportedLocks() const
|
|
||||||
{
|
|
||||||
if (m_locksApplyMode == FocusOnlyMode)
|
|
||||||
return QCamera::LockFocus;
|
|
||||||
else
|
|
||||||
return (QCamera::LockExposure | QCamera::LockWhiteBalance | QCamera::LockFocus);
|
|
||||||
}
|
|
||||||
|
|
||||||
QCamera::LockStatus BbCameraSession::lockStatus(QCamera::LockType lock) const
|
|
||||||
{
|
|
||||||
switch (lock) {
|
|
||||||
case QCamera::LockExposure:
|
|
||||||
return QCamera::Unlocked;
|
|
||||||
case QCamera::LockWhiteBalance:
|
|
||||||
return QCamera::Unlocked;
|
|
||||||
case QCamera::LockFocus:
|
|
||||||
return m_focusLockStatus;
|
|
||||||
default:
|
|
||||||
return QCamera::Unlocked;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void BbCameraSession::searchAndLock(QCamera::LockTypes locks)
|
|
||||||
{
|
|
||||||
m_currentLockTypes |= locks;
|
|
||||||
|
|
||||||
uint32_t lockModes = CAMERA_3A_NONE;
|
|
||||||
|
|
||||||
switch (m_locksApplyMode) {
|
|
||||||
case IndependentMode:
|
|
||||||
if (m_currentLockTypes & QCamera::LockExposure)
|
|
||||||
lockModes |= CAMERA_3A_AUTOEXPOSURE;
|
|
||||||
if (m_currentLockTypes & QCamera::LockWhiteBalance)
|
|
||||||
lockModes |= CAMERA_3A_AUTOWHITEBALANCE;
|
|
||||||
if (m_currentLockTypes & QCamera::LockFocus)
|
|
||||||
lockModes |= CAMERA_3A_AUTOFOCUS;
|
|
||||||
break;
|
|
||||||
case FocusExposureBoundMode:
|
|
||||||
if ((m_currentLockTypes & QCamera::LockExposure) || (m_currentLockTypes & QCamera::LockFocus))
|
|
||||||
lockModes = (CAMERA_3A_AUTOEXPOSURE | CAMERA_3A_AUTOFOCUS);
|
|
||||||
break;
|
|
||||||
case AllBoundMode:
|
|
||||||
lockModes = (CAMERA_3A_AUTOEXPOSURE | CAMERA_3A_AUTOFOCUS | CAMERA_3A_AUTOWHITEBALANCE);
|
|
||||||
break;
|
|
||||||
case FocusOnlyMode:
|
|
||||||
lockModes = CAMERA_3A_AUTOFOCUS;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
const camera_error_t result = camera_set_3a_lock(m_handle, lockModes);
|
|
||||||
|
|
||||||
if (result != CAMERA_EOK) {
|
|
||||||
qWarning() << "Unable to set lock modes:" << result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void BbCameraSession::unlock(QCamera::LockTypes locks)
|
|
||||||
{
|
|
||||||
m_currentLockTypes &= ~locks;
|
|
||||||
|
|
||||||
uint32_t lockModes = CAMERA_3A_NONE;
|
|
||||||
|
|
||||||
switch (m_locksApplyMode) {
|
|
||||||
case IndependentMode:
|
|
||||||
if (m_currentLockTypes & QCamera::LockExposure)
|
|
||||||
lockModes |= CAMERA_3A_AUTOEXPOSURE;
|
|
||||||
if (m_currentLockTypes & QCamera::LockWhiteBalance)
|
|
||||||
lockModes |= CAMERA_3A_AUTOWHITEBALANCE;
|
|
||||||
if (m_currentLockTypes & QCamera::LockFocus)
|
|
||||||
lockModes |= CAMERA_3A_AUTOFOCUS;
|
|
||||||
break;
|
|
||||||
case FocusExposureBoundMode:
|
|
||||||
if ((m_currentLockTypes & QCamera::LockExposure) || (m_currentLockTypes & QCamera::LockFocus))
|
|
||||||
lockModes = (CAMERA_3A_AUTOEXPOSURE | CAMERA_3A_AUTOFOCUS);
|
|
||||||
break;
|
|
||||||
case AllBoundMode:
|
|
||||||
lockModes = (CAMERA_3A_AUTOEXPOSURE | CAMERA_3A_AUTOFOCUS | CAMERA_3A_AUTOWHITEBALANCE);
|
|
||||||
break;
|
|
||||||
case FocusOnlyMode:
|
|
||||||
lockModes = CAMERA_3A_AUTOFOCUS;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
const camera_error_t result = camera_set_3a_lock(m_handle, lockModes);
|
|
||||||
|
|
||||||
if (result != CAMERA_EOK)
|
|
||||||
qWarning() << "Unable to set lock modes:" << result;
|
|
||||||
}
|
|
||||||
|
|
||||||
QUrl BbCameraSession::outputLocation() const
|
QUrl BbCameraSession::outputLocation() const
|
||||||
{
|
{
|
||||||
return QUrl::fromLocalFile(m_videoOutputLocation);
|
return QUrl::fromLocalFile(m_videoOutputLocation);
|
||||||
@@ -647,13 +552,15 @@ void BbCameraSession::applyVideoSettings()
|
|||||||
|
|
||||||
const QByteArray windowGroupId = m_windowGrabber->windowGroupId();
|
const QByteArray windowGroupId = m_windowGrabber->windowGroupId();
|
||||||
|
|
||||||
|
const int rotationAngle = (360 - m_nativeCameraOrientation);
|
||||||
|
|
||||||
camera_error_t result = CAMERA_EOK;
|
camera_error_t result = CAMERA_EOK;
|
||||||
result = camera_set_videovf_property(m_handle,
|
result = camera_set_videovf_property(m_handle,
|
||||||
CAMERA_IMGPROP_WIN_GROUPID, windowGroupId.data(),
|
CAMERA_IMGPROP_WIN_GROUPID, windowGroupId.data(),
|
||||||
CAMERA_IMGPROP_WIN_ID, windowId.data(),
|
CAMERA_IMGPROP_WIN_ID, windowId.data(),
|
||||||
CAMERA_IMGPROP_WIDTH, viewfinderResolution.width(),
|
CAMERA_IMGPROP_WIDTH, viewfinderResolution.width(),
|
||||||
CAMERA_IMGPROP_HEIGHT, viewfinderResolution.height(),
|
CAMERA_IMGPROP_HEIGHT, viewfinderResolution.height(),
|
||||||
CAMERA_IMGPROP_ROTATION, 360 - m_nativeCameraOrientation);
|
CAMERA_IMGPROP_ROTATION, rotationAngle);
|
||||||
|
|
||||||
if (result != CAMERA_EOK) {
|
if (result != CAMERA_EOK) {
|
||||||
qWarning() << "Unable to apply video viewfinder settings:" << result;
|
qWarning() << "Unable to apply video viewfinder settings:" << result;
|
||||||
@@ -693,9 +600,11 @@ void BbCameraSession::applyVideoSettings()
|
|||||||
cameraAudioCodec = CAMERA_AUDIOCODEC_AAC;
|
cameraAudioCodec = CAMERA_AUDIOCODEC_AAC;
|
||||||
else if (audioCodec == QLatin1String("raw"))
|
else if (audioCodec == QLatin1String("raw"))
|
||||||
cameraAudioCodec = CAMERA_AUDIOCODEC_RAW;
|
cameraAudioCodec = CAMERA_AUDIOCODEC_RAW;
|
||||||
|
|
||||||
result = camera_set_video_property(m_handle,
|
result = camera_set_video_property(m_handle,
|
||||||
CAMERA_IMGPROP_WIDTH, resolution.width(),
|
CAMERA_IMGPROP_WIDTH, resolution.width(),
|
||||||
CAMERA_IMGPROP_HEIGHT, resolution.height(),
|
CAMERA_IMGPROP_HEIGHT, resolution.height(),
|
||||||
|
CAMERA_IMGPROP_ROTATION, rotationAngle,
|
||||||
CAMERA_IMGPROP_VIDEOCODEC, cameraVideoCodec,
|
CAMERA_IMGPROP_VIDEOCODEC, cameraVideoCodec,
|
||||||
CAMERA_IMGPROP_AUDIOCODEC, cameraAudioCodec);
|
CAMERA_IMGPROP_AUDIOCODEC, cameraAudioCodec);
|
||||||
#else
|
#else
|
||||||
@@ -832,37 +741,6 @@ void BbCameraSession::imageCaptured(int requestId, const QImage &rawImage, const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbCameraSession::handleFocusStatusChanged(int value)
|
|
||||||
{
|
|
||||||
const camera_focusstate_t focusState = static_cast<camera_focusstate_t>(value);
|
|
||||||
|
|
||||||
switch (focusState) {
|
|
||||||
case CAMERA_FOCUSSTATE_NONE:
|
|
||||||
case CAMERA_FOCUSSTATE_WAITING:
|
|
||||||
m_focusLockStatus = QCamera::Unlocked;
|
|
||||||
emit lockStatusChanged(QCamera::LockFocus, QCamera::Unlocked, QCamera::UserRequest);
|
|
||||||
break;
|
|
||||||
case CAMERA_FOCUSSTATE_SEARCHING:
|
|
||||||
m_focusLockStatus = QCamera::Searching;
|
|
||||||
emit lockStatusChanged(QCamera::LockFocus, QCamera::Searching, QCamera::UserRequest);
|
|
||||||
break;
|
|
||||||
case CAMERA_FOCUSSTATE_FAILED:
|
|
||||||
m_focusLockStatus = QCamera::Unlocked;
|
|
||||||
emit lockStatusChanged(QCamera::LockFocus, QCamera::Unlocked, QCamera::LockFailed);
|
|
||||||
break;
|
|
||||||
case CAMERA_FOCUSSTATE_LOCKED:
|
|
||||||
m_focusLockStatus = QCamera::Locked;
|
|
||||||
emit lockStatusChanged(QCamera::LockFocus, QCamera::Locked, QCamera::LockAcquired);
|
|
||||||
break;
|
|
||||||
case CAMERA_FOCUSSTATE_SCENECHANGE:
|
|
||||||
m_focusLockStatus = QCamera::Unlocked;
|
|
||||||
emit lockStatusChanged(QCamera::LockFocus, QCamera::Unlocked, QCamera::LockTemporaryLost);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void BbCameraSession::handleVideoRecordingPaused()
|
void BbCameraSession::handleVideoRecordingPaused()
|
||||||
{
|
{
|
||||||
//TODO: implement once BB10 API supports pausing a video
|
//TODO: implement once BB10 API supports pausing a video
|
||||||
@@ -952,6 +830,8 @@ bool BbCameraSession::openCamera()
|
|||||||
m_status = QCamera::LoadedStatus;
|
m_status = QCamera::LoadedStatus;
|
||||||
emit statusChanged(m_status);
|
emit statusChanged(m_status);
|
||||||
|
|
||||||
|
emit cameraOpened();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -985,7 +865,7 @@ static void viewFinderStatusCallback(camera_handle_t handle, camera_devstatus_t
|
|||||||
|
|
||||||
if (status == CAMERA_STATUS_FOCUS_CHANGE) {
|
if (status == CAMERA_STATUS_FOCUS_CHANGE) {
|
||||||
BbCameraSession *session = static_cast<BbCameraSession*>(context);
|
BbCameraSession *session = static_cast<BbCameraSession*>(context);
|
||||||
QMetaObject::invokeMethod(session, "handleFocusStatusChanged", Qt::QueuedConnection, Q_ARG(int, value));
|
QMetaObject::invokeMethod(session, "focusStatusChanged", Qt::QueuedConnection, Q_ARG(int, value));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#ifndef Q_OS_BLACKBERRY_TABLET
|
#ifndef Q_OS_BLACKBERRY_TABLET
|
||||||
@@ -1016,28 +896,6 @@ bool BbCameraSession::startViewFinder()
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// retrieve information about lock apply modes
|
|
||||||
{
|
|
||||||
int supported = 0;
|
|
||||||
uint32_t modes[20];
|
|
||||||
|
|
||||||
const camera_error_t result = camera_get_3a_lock_modes(m_handle, 20, &supported, modes);
|
|
||||||
|
|
||||||
if (result == CAMERA_EOK) {
|
|
||||||
// see API documentation of camera_get_3a_lock_modes for explanation of case discrimination below
|
|
||||||
if (supported == 4) {
|
|
||||||
m_locksApplyMode = IndependentMode;
|
|
||||||
} else if (supported == 3) {
|
|
||||||
m_locksApplyMode = FocusExposureBoundMode;
|
|
||||||
} else if (supported == 2) {
|
|
||||||
if (modes[0] == (CAMERA_3A_AUTOFOCUS | CAMERA_3A_AUTOEXPOSURE | CAMERA_3A_AUTOWHITEBALANCE))
|
|
||||||
m_locksApplyMode = AllBoundMode;
|
|
||||||
else
|
|
||||||
m_locksApplyMode = FocusOnlyMode;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const int angle = m_orientationHandler->orientation();
|
const int angle = m_orientationHandler->orientation();
|
||||||
|
|
||||||
const QSize rotatedSize = ((angle == 0 || angle == 180) ? viewfinderResolution
|
const QSize rotatedSize = ((angle == 0 || angle == 180) ? viewfinderResolution
|
||||||
@@ -1163,6 +1021,8 @@ void BbCameraSession::applyConfiguration()
|
|||||||
} else if (m_captureMode & QCamera::CaptureVideo) {
|
} else if (m_captureMode & QCamera::CaptureVideo) {
|
||||||
applyVideoSettings();
|
applyVideoSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
startViewFinder();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void videoRecordingStatusCallback(camera_handle_t handle, camera_devstatus_t status, uint16_t value, void *context)
|
static void videoRecordingStatusCallback(camera_handle_t handle, camera_devstatus_t status, uint16_t value, void *context)
|
||||||
@@ -105,20 +105,6 @@ public:
|
|||||||
QImageEncoderSettings imageSettings() const;
|
QImageEncoderSettings imageSettings() const;
|
||||||
void setImageSettings(const QImageEncoderSettings &settings);
|
void setImageSettings(const QImageEncoderSettings &settings);
|
||||||
|
|
||||||
// locks control
|
|
||||||
enum LocksApplyMode
|
|
||||||
{
|
|
||||||
IndependentMode,
|
|
||||||
FocusExposureBoundMode,
|
|
||||||
AllBoundMode,
|
|
||||||
FocusOnlyMode
|
|
||||||
};
|
|
||||||
|
|
||||||
QCamera::LockTypes supportedLocks() const;
|
|
||||||
QCamera::LockStatus lockStatus(QCamera::LockType lock) const;
|
|
||||||
void searchAndLock(QCamera::LockTypes locks);
|
|
||||||
void unlock(QCamera::LockTypes locks);
|
|
||||||
|
|
||||||
// media recorder control
|
// media recorder control
|
||||||
QUrl outputLocation() const;
|
QUrl outputLocation() const;
|
||||||
bool setOutputLocation(const QUrl &location);
|
bool setOutputLocation(const QUrl &location);
|
||||||
@@ -157,9 +143,6 @@ Q_SIGNALS:
|
|||||||
// capture destination control
|
// capture destination control
|
||||||
void captureDestinationChanged(QCameraImageCapture::CaptureDestinations destination);
|
void captureDestinationChanged(QCameraImageCapture::CaptureDestinations destination);
|
||||||
|
|
||||||
// locks control
|
|
||||||
void lockStatusChanged(QCamera::LockType type, QCamera::LockStatus status, QCamera::LockChangeReason reason);
|
|
||||||
|
|
||||||
// media recorder control
|
// media recorder control
|
||||||
void videoStateChanged(QMediaRecorder::State state);
|
void videoStateChanged(QMediaRecorder::State state);
|
||||||
void videoStatusChanged(QMediaRecorder::Status status);
|
void videoStatusChanged(QMediaRecorder::Status status);
|
||||||
@@ -167,22 +150,24 @@ Q_SIGNALS:
|
|||||||
void actualLocationChanged(const QUrl &location);
|
void actualLocationChanged(const QUrl &location);
|
||||||
void videoError(int error, const QString &errorString);
|
void videoError(int error, const QString &errorString);
|
||||||
|
|
||||||
|
void cameraOpened();
|
||||||
|
void focusStatusChanged(int status);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void updateReadyForCapture();
|
void updateReadyForCapture();
|
||||||
void imageCaptured(int, const QImage&, const QString&);
|
void imageCaptured(int, const QImage&, const QString&);
|
||||||
void handleFocusStatusChanged(int);
|
|
||||||
void handleVideoRecordingPaused();
|
void handleVideoRecordingPaused();
|
||||||
void handleVideoRecordingResumed();
|
void handleVideoRecordingResumed();
|
||||||
void deviceOrientationChanged(int);
|
void deviceOrientationChanged(int);
|
||||||
void handleCameraPowerUp();
|
void handleCameraPowerUp();
|
||||||
void viewfinderFrameGrabbed(const QImage &image);
|
void viewfinderFrameGrabbed(const QImage &image);
|
||||||
|
void applyConfiguration();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool openCamera();
|
bool openCamera();
|
||||||
void closeCamera();
|
void closeCamera();
|
||||||
bool startViewFinder();
|
bool startViewFinder();
|
||||||
void stopViewFinder();
|
void stopViewFinder();
|
||||||
void applyConfiguration();
|
|
||||||
bool startVideoRecording();
|
bool startVideoRecording();
|
||||||
void stopVideoRecording();
|
void stopVideoRecording();
|
||||||
|
|
||||||
@@ -210,10 +195,6 @@ private:
|
|||||||
|
|
||||||
QImageEncoderSettings m_imageEncoderSettings;
|
QImageEncoderSettings m_imageEncoderSettings;
|
||||||
|
|
||||||
LocksApplyMode m_locksApplyMode;
|
|
||||||
QCamera::LockStatus m_focusLockStatus;
|
|
||||||
QCamera::LockTypes m_currentLockTypes;
|
|
||||||
|
|
||||||
QString m_videoOutputLocation;
|
QString m_videoOutputLocation;
|
||||||
QMediaRecorder::State m_videoState;
|
QMediaRecorder::State m_videoState;
|
||||||
QMediaRecorder::Status m_videoStatus;
|
QMediaRecorder::Status m_videoStatus;
|
||||||
@@ -47,7 +47,10 @@
|
|||||||
#include <QImage>
|
#include <QImage>
|
||||||
#include <qpa/qplatformnativeinterface.h>
|
#include <qpa/qplatformnativeinterface.h>
|
||||||
|
|
||||||
|
#ifdef Q_OS_BLACKBERRY
|
||||||
|
#include <bps/event.h>
|
||||||
#include <bps/screen.h>
|
#include <bps/screen.h>
|
||||||
|
#endif
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
@@ -232,12 +235,8 @@ void WindowGrabber::resume()
|
|||||||
m_timer.start();
|
m_timer.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool WindowGrabber::nativeEventFilter(const QByteArray&, void *message, long*)
|
bool WindowGrabber::handleScreenEvent(screen_event_t screen_event)
|
||||||
{
|
{
|
||||||
bps_event_t * const event = static_cast<bps_event_t *>(message);
|
|
||||||
|
|
||||||
if (event && bps_event_get_domain(event) == screen_get_domain()) {
|
|
||||||
const screen_event_t screen_event = screen_event_get_event(event);
|
|
||||||
|
|
||||||
int eventType;
|
int eventType;
|
||||||
if (screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_TYPE, &eventType) != 0) {
|
if (screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_TYPE, &eventType) != 0) {
|
||||||
@@ -265,7 +264,26 @@ bool WindowGrabber::nativeEventFilter(const QByteArray&, void *message, long*)
|
|||||||
m_window = window;
|
m_window = window;
|
||||||
start();
|
start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool WindowGrabber::nativeEventFilter(const QByteArray &eventType, void *message, long*)
|
||||||
|
{
|
||||||
|
#ifdef Q_OS_BLACKBERRY
|
||||||
|
Q_UNUSED(eventType)
|
||||||
|
bps_event_t * const event = static_cast<bps_event_t *>(message);
|
||||||
|
|
||||||
|
if (event && bps_event_get_domain(event) == screen_get_domain()) {
|
||||||
|
const screen_event_t screen_event = screen_event_get_event(event);
|
||||||
|
return handleScreenEvent(screen_event);
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
if (eventType == "screen_event_t") {
|
||||||
|
const screen_event_t event = static_cast<screen_event_t>(message);
|
||||||
|
return handleScreenEvent(event);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -69,6 +69,8 @@ public:
|
|||||||
|
|
||||||
bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) Q_DECL_OVERRIDE;
|
bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
|
bool handleScreenEvent(screen_event_t event);
|
||||||
|
|
||||||
QByteArray windowGroupId() const;
|
QByteArray windowGroupId() const;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
117
src/plugins/qnx/mediaplayer/bpsmediaplayercontrol.cpp
Normal file
117
src/plugins/qnx/mediaplayer/bpsmediaplayercontrol.cpp
Normal file
@@ -0,0 +1,117 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2013 Research In Motion
|
||||||
|
** Contact: http://www.qt-project.org/legal
|
||||||
|
**
|
||||||
|
** This file is part of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and Digia. For licensing terms and
|
||||||
|
** conditions see http://qt.digia.com/licensing. For further information
|
||||||
|
** use the contact form at http://qt.digia.com/contact-us.
|
||||||
|
**
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
|
** General Public License version 2.1 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||||
|
** packaging of this file. Please review the following information to
|
||||||
|
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||||
|
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** In addition, as a special exception, Digia gives you certain additional
|
||||||
|
** rights. These rights are described in the Digia Qt LGPL Exception
|
||||||
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||||
|
**
|
||||||
|
** GNU General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
|
** General Public License version 3.0 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL included in the
|
||||||
|
** packaging of this file. Please review the following information to
|
||||||
|
** ensure the GNU General Public License version 3.0 requirements will be
|
||||||
|
** met: http://www.gnu.org/copyleft/gpl.html.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "bpsmediaplayercontrol.h"
|
||||||
|
#include "mmrenderervideowindowcontrol.h"
|
||||||
|
|
||||||
|
#include <bps/mmrenderer.h>
|
||||||
|
#include <bps/screen.h>
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
BpsMediaPlayerControl::BpsMediaPlayerControl(QObject *parent)
|
||||||
|
: MmRendererMediaPlayerControl(parent),
|
||||||
|
m_eventMonitor(0)
|
||||||
|
{
|
||||||
|
openConnection();
|
||||||
|
}
|
||||||
|
|
||||||
|
BpsMediaPlayerControl::~BpsMediaPlayerControl()
|
||||||
|
{
|
||||||
|
destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BpsMediaPlayerControl::startMonitoring(int contextId, const QString &contextName)
|
||||||
|
{
|
||||||
|
m_eventMonitor = mmrenderer_request_events(contextName.toLatin1().constData(), 0, contextId);
|
||||||
|
if (!m_eventMonitor) {
|
||||||
|
qDebug() << "Unable to request multimedia events";
|
||||||
|
emit error(0, "Unable to request multimedia events");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BpsMediaPlayerControl::stopMonitoring()
|
||||||
|
{
|
||||||
|
if (m_eventMonitor) {
|
||||||
|
mmrenderer_stop_events(m_eventMonitor);
|
||||||
|
m_eventMonitor = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool BpsMediaPlayerControl::nativeEventFilter(const QByteArray &eventType, void *message, long *result)
|
||||||
|
{
|
||||||
|
Q_UNUSED(result)
|
||||||
|
Q_UNUSED(eventType)
|
||||||
|
|
||||||
|
bps_event_t * const event = static_cast<bps_event_t *>(message);
|
||||||
|
if (!event ||
|
||||||
|
(bps_event_get_domain(event) != mmrenderer_get_domain() &&
|
||||||
|
bps_event_get_domain(event) != screen_get_domain()))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (event && bps_event_get_domain(event) == screen_get_domain()) {
|
||||||
|
const screen_event_t screen_event = screen_event_get_event(event);
|
||||||
|
if (MmRendererVideoWindowControl *control = videoWindowControl())
|
||||||
|
control->screenEventHandler(screen_event);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bps_event_get_domain(event) == mmrenderer_get_domain()) {
|
||||||
|
if (bps_event_get_code(event) == MMRENDERER_STATE_CHANGE) {
|
||||||
|
const mmrenderer_state_t newState = mmrenderer_event_get_state(event);
|
||||||
|
if (newState == MMR_STOPPED) {
|
||||||
|
handleMmStopped();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bps_event_get_code(event) == MMRENDERER_STATUS_UPDATE) {
|
||||||
|
const qint64 newPosition = QString::fromLatin1(mmrenderer_event_get_position(event)).toLongLong();
|
||||||
|
handleMmStatusUpdate(newPosition);
|
||||||
|
|
||||||
|
const QString bufferStatus = QString::fromLatin1(mmrenderer_event_get_bufferlevel(event));
|
||||||
|
setMmBufferStatus(bufferStatus);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
QT_END_NAMESPACE
|
||||||
66
src/plugins/qnx/mediaplayer/bpsmediaplayercontrol.h
Normal file
66
src/plugins/qnx/mediaplayer/bpsmediaplayercontrol.h
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2013 Research In Motion
|
||||||
|
** Contact: http://www.qt-project.org/legal
|
||||||
|
**
|
||||||
|
** This file is part of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and Digia. For licensing terms and
|
||||||
|
** conditions see http://qt.digia.com/licensing. For further information
|
||||||
|
** use the contact form at http://qt.digia.com/contact-us.
|
||||||
|
**
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
|
** General Public License version 2.1 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||||
|
** packaging of this file. Please review the following information to
|
||||||
|
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||||
|
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** In addition, as a special exception, Digia gives you certain additional
|
||||||
|
** rights. These rights are described in the Digia Qt LGPL Exception
|
||||||
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||||
|
**
|
||||||
|
** GNU General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
|
** General Public License version 3.0 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL included in the
|
||||||
|
** packaging of this file. Please review the following information to
|
||||||
|
** ensure the GNU General Public License version 3.0 requirements will be
|
||||||
|
** met: http://www.gnu.org/copyleft/gpl.html.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
#ifndef BPSMEDIAPLAYERCONTROL_H
|
||||||
|
#define BPSMEDIAPLAYERCONTROL_H
|
||||||
|
|
||||||
|
#include "mmrenderermediaplayercontrol.h"
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
class BpsMediaPlayerControl Q_DECL_FINAL : public MmRendererMediaPlayerControl
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit BpsMediaPlayerControl(QObject *parent = 0);
|
||||||
|
~BpsMediaPlayerControl();
|
||||||
|
|
||||||
|
void startMonitoring(int contextId, const QString &contextName) Q_DECL_OVERRIDE;
|
||||||
|
void stopMonitoring() Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
|
bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
|
private:
|
||||||
|
mmrenderer_monitor_t *m_eventMonitor;
|
||||||
|
};
|
||||||
|
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
#endif
|
||||||
31
src/plugins/qnx/mediaplayer/mediaplayer.pri
Normal file
31
src/plugins/qnx/mediaplayer/mediaplayer.pri
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
INCLUDEPATH += $$PWD
|
||||||
|
|
||||||
|
HEADERS += \
|
||||||
|
$$PWD/mmrenderermediaplayercontrol.h \
|
||||||
|
$$PWD/mmrenderermediaplayerservice.h \
|
||||||
|
$$PWD/mmrenderermetadata.h \
|
||||||
|
$$PWD/mmrenderermetadatareadercontrol.h \
|
||||||
|
$$PWD/mmrendererplayervideorenderercontrol.h \
|
||||||
|
$$PWD/mmrendererutil.h \
|
||||||
|
$$PWD/mmrenderervideowindowcontrol.h
|
||||||
|
|
||||||
|
SOURCES += \
|
||||||
|
$$PWD/mmrenderermediaplayercontrol.cpp \
|
||||||
|
$$PWD/mmrenderermediaplayerservice.cpp \
|
||||||
|
$$PWD/mmrenderermetadata.cpp \
|
||||||
|
$$PWD/mmrenderermetadatareadercontrol.cpp \
|
||||||
|
$$PWD/mmrendererplayervideorenderercontrol.cpp \
|
||||||
|
$$PWD/mmrendererutil.cpp \
|
||||||
|
$$PWD/mmrenderervideowindowcontrol.cpp
|
||||||
|
|
||||||
|
LIBS += -lmmrndclient -lstrm
|
||||||
|
|
||||||
|
blackberry {
|
||||||
|
HEADERS += $$PWD/bpsmediaplayercontrol.h
|
||||||
|
SOURCES += $$PWD/bpsmediaplayercontrol.cpp
|
||||||
|
} else {
|
||||||
|
HEADERS += $$PWD/ppsmediaplayercontrol.h
|
||||||
|
SOURCES += $$PWD/ppsmediaplayercontrol.cpp
|
||||||
|
QT += core-private
|
||||||
|
LIBS += -lpps
|
||||||
|
}
|
||||||
@@ -38,19 +38,18 @@
|
|||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#include "bbmediaplayercontrol.h"
|
#include "mmrenderermediaplayercontrol.h"
|
||||||
#include "bbmetadatareadercontrol.h"
|
#include "mmrenderermetadatareadercontrol.h"
|
||||||
#include "bbplayervideorenderercontrol.h"
|
#include "mmrendererplayervideorenderercontrol.h"
|
||||||
#include "bbutil.h"
|
#include "mmrendererutil.h"
|
||||||
#include "bbvideowindowcontrol.h"
|
#include "mmrenderervideowindowcontrol.h"
|
||||||
#include <QtCore/qabstracteventdispatcher.h>
|
#include <QtCore/qabstracteventdispatcher.h>
|
||||||
#include <QtCore/qcoreapplication.h>
|
#include <QtCore/qcoreapplication.h>
|
||||||
#include <QtCore/qdir.h>
|
#include <QtCore/qdir.h>
|
||||||
#include <QtCore/qfileinfo.h>
|
#include <QtCore/qfileinfo.h>
|
||||||
#include <QtCore/quuid.h>
|
#include <QtCore/quuid.h>
|
||||||
#include <mm/renderer.h>
|
#include <mm/renderer.h>
|
||||||
#include <bps/mmrenderer.h>
|
|
||||||
#include <bps/screen.h>
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <sys/strm.h>
|
#include <sys/strm.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
@@ -59,7 +58,7 @@ QT_BEGIN_NAMESPACE
|
|||||||
|
|
||||||
static int idCounter = 0;
|
static int idCounter = 0;
|
||||||
|
|
||||||
BbMediaPlayerControl::BbMediaPlayerControl(QObject *parent)
|
MmRendererMediaPlayerControl::MmRendererMediaPlayerControl(QObject *parent)
|
||||||
: QMediaPlayerControl(parent),
|
: QMediaPlayerControl(parent),
|
||||||
m_connection(0),
|
m_connection(0),
|
||||||
m_context(0),
|
m_context(0),
|
||||||
@@ -69,7 +68,6 @@ BbMediaPlayerControl::BbMediaPlayerControl(QObject *parent)
|
|||||||
m_muted(false),
|
m_muted(false),
|
||||||
m_rate(1),
|
m_rate(1),
|
||||||
m_id(-1),
|
m_id(-1),
|
||||||
m_eventMonitor(0),
|
|
||||||
m_position(0),
|
m_position(0),
|
||||||
m_mediaStatus(QMediaPlayer::NoMedia),
|
m_mediaStatus(QMediaPlayer::NoMedia),
|
||||||
m_playAfterMediaLoaded(false),
|
m_playAfterMediaLoaded(false),
|
||||||
@@ -81,10 +79,9 @@ BbMediaPlayerControl::BbMediaPlayerControl(QObject *parent)
|
|||||||
m_loadingTimer.setInterval(0);
|
m_loadingTimer.setInterval(0);
|
||||||
connect(&m_loadingTimer, SIGNAL(timeout()), this, SLOT(continueLoadMedia()));
|
connect(&m_loadingTimer, SIGNAL(timeout()), this, SLOT(continueLoadMedia()));
|
||||||
QCoreApplication::eventDispatcher()->installNativeEventFilter(this);
|
QCoreApplication::eventDispatcher()->installNativeEventFilter(this);
|
||||||
openConnection();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BbMediaPlayerControl::~BbMediaPlayerControl()
|
void MmRendererMediaPlayerControl::destroy()
|
||||||
{
|
{
|
||||||
stop();
|
stop();
|
||||||
detach();
|
detach();
|
||||||
@@ -92,7 +89,7 @@ BbMediaPlayerControl::~BbMediaPlayerControl()
|
|||||||
QCoreApplication::eventDispatcher()->removeNativeEventFilter(this);
|
QCoreApplication::eventDispatcher()->removeNativeEventFilter(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbMediaPlayerControl::openConnection()
|
void MmRendererMediaPlayerControl::openConnection()
|
||||||
{
|
{
|
||||||
m_connection = mmr_connect(NULL);
|
m_connection = mmr_connect(NULL);
|
||||||
if (!m_connection) {
|
if (!m_connection) {
|
||||||
@@ -101,7 +98,7 @@ void BbMediaPlayerControl::openConnection()
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_id = idCounter++;
|
m_id = idCounter++;
|
||||||
m_contextName = QString("BbMediaPlayerControl_%1_%2").arg(m_id)
|
m_contextName = QString("MmRendererMediaPlayerControl_%1_%2").arg(m_id)
|
||||||
.arg(QCoreApplication::applicationPid());
|
.arg(QCoreApplication::applicationPid());
|
||||||
m_context = mmr_context_create(m_connection, m_contextName.toLatin1(),
|
m_context = mmr_context_create(m_connection, m_contextName.toLatin1(),
|
||||||
0, S_IRWXU|S_IRWXG|S_IRWXO);
|
0, S_IRWXU|S_IRWXG|S_IRWXO);
|
||||||
@@ -111,19 +108,41 @@ void BbMediaPlayerControl::openConnection()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_eventMonitor = mmrenderer_request_events(m_contextName.toLatin1(), 0, m_id);
|
startMonitoring(m_id, m_contextName);
|
||||||
if (!m_eventMonitor) {
|
}
|
||||||
qDebug() << "Unable to request multimedia events";
|
|
||||||
emit error(0, "Unable to request multimedia events");
|
void MmRendererMediaPlayerControl::handleMmStatusUpdate(qint64 newPosition)
|
||||||
|
{
|
||||||
|
// Prevent spurious position change events from overriding our own position, for example
|
||||||
|
// when setting the position to 0 in stop().
|
||||||
|
// Also, don't change the position while we're loading the media, as then play() would
|
||||||
|
// set a wrong initial position.
|
||||||
|
if (m_state != QMediaPlayer::PlayingState ||
|
||||||
|
m_mediaStatus == QMediaPlayer::LoadingMedia ||
|
||||||
|
m_mediaStatus == QMediaPlayer::NoMedia ||
|
||||||
|
m_mediaStatus == QMediaPlayer::InvalidMedia)
|
||||||
|
return;
|
||||||
|
|
||||||
|
setMmPosition(newPosition);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MmRendererMediaPlayerControl::handleMmStopped()
|
||||||
|
{
|
||||||
|
// Only react to stop events that happen when the end of the stream is reached and
|
||||||
|
// playback is stopped because of this.
|
||||||
|
// Ignore other stop event sources, souch as calling mmr_stop() ourselves and
|
||||||
|
// mmr_input_attach().
|
||||||
|
if (m_stopEventsToIgnore > 0) {
|
||||||
|
--m_stopEventsToIgnore;
|
||||||
|
} else {
|
||||||
|
setMediaStatus(QMediaPlayer::EndOfMedia);
|
||||||
|
stopInternal(IgnoreMmRenderer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbMediaPlayerControl::closeConnection()
|
void MmRendererMediaPlayerControl::closeConnection()
|
||||||
{
|
{
|
||||||
if (m_eventMonitor) {
|
stopMonitoring();
|
||||||
mmrenderer_stop_events(m_eventMonitor);
|
|
||||||
m_eventMonitor = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_context) {
|
if (m_context) {
|
||||||
mmr_context_destroy(m_context);
|
mmr_context_destroy(m_context);
|
||||||
@@ -137,7 +156,7 @@ void BbMediaPlayerControl::closeConnection()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray BbMediaPlayerControl::resourcePathForUrl(const QUrl &url)
|
QByteArray MmRendererMediaPlayerControl::resourcePathForUrl(const QUrl &url)
|
||||||
{
|
{
|
||||||
// If this is a local file, mmrenderer expects the file:// prefix and an absolute path.
|
// If this is a local file, mmrenderer expects the file:// prefix and an absolute path.
|
||||||
// We treat URLs without scheme as local files, most likely someone just forgot to set the
|
// We treat URLs without scheme as local files, most likely someone just forgot to set the
|
||||||
@@ -173,7 +192,7 @@ QByteArray BbMediaPlayerControl::resourcePathForUrl(const QUrl &url)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbMediaPlayerControl::attach()
|
void MmRendererMediaPlayerControl::attach()
|
||||||
{
|
{
|
||||||
// Should only be called in detached state
|
// Should only be called in detached state
|
||||||
Q_ASSERT(m_audioId == -1 && !m_inputAttached && m_tempMediaFileName.isEmpty());
|
Q_ASSERT(m_audioId == -1 && !m_inputAttached && m_tempMediaFileName.isEmpty());
|
||||||
@@ -219,7 +238,7 @@ void BbMediaPlayerControl::attach()
|
|||||||
emit bufferStatusChanged(m_bufferStatus);
|
emit bufferStatusChanged(m_bufferStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbMediaPlayerControl::detach()
|
void MmRendererMediaPlayerControl::detach()
|
||||||
{
|
{
|
||||||
if (m_context) {
|
if (m_context) {
|
||||||
if (m_inputAttached) {
|
if (m_inputAttached) {
|
||||||
@@ -243,27 +262,27 @@ void BbMediaPlayerControl::detach()
|
|||||||
m_loadingTimer.stop();
|
m_loadingTimer.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
QMediaPlayer::State BbMediaPlayerControl::state() const
|
QMediaPlayer::State MmRendererMediaPlayerControl::state() const
|
||||||
{
|
{
|
||||||
return m_state;
|
return m_state;
|
||||||
}
|
}
|
||||||
|
|
||||||
QMediaPlayer::MediaStatus BbMediaPlayerControl::mediaStatus() const
|
QMediaPlayer::MediaStatus MmRendererMediaPlayerControl::mediaStatus() const
|
||||||
{
|
{
|
||||||
return m_mediaStatus;
|
return m_mediaStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 BbMediaPlayerControl::duration() const
|
qint64 MmRendererMediaPlayerControl::duration() const
|
||||||
{
|
{
|
||||||
return m_metaData.duration();
|
return m_metaData.duration();
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 BbMediaPlayerControl::position() const
|
qint64 MmRendererMediaPlayerControl::position() const
|
||||||
{
|
{
|
||||||
return m_position;
|
return m_position;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbMediaPlayerControl::setPosition(qint64 position)
|
void MmRendererMediaPlayerControl::setPosition(qint64 position)
|
||||||
{
|
{
|
||||||
if (m_position != position) {
|
if (m_position != position) {
|
||||||
m_position = position;
|
m_position = position;
|
||||||
@@ -277,12 +296,12 @@ void BbMediaPlayerControl::setPosition(qint64 position)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int BbMediaPlayerControl::volume() const
|
int MmRendererMediaPlayerControl::volume() const
|
||||||
{
|
{
|
||||||
return m_volume;
|
return m_volume;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbMediaPlayerControl::setVolumeInternal(int newVolume)
|
void MmRendererMediaPlayerControl::setVolumeInternal(int newVolume)
|
||||||
{
|
{
|
||||||
if (!m_context)
|
if (!m_context)
|
||||||
return;
|
return;
|
||||||
@@ -296,7 +315,7 @@ void BbMediaPlayerControl::setVolumeInternal(int newVolume)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbMediaPlayerControl::setPlaybackRateInternal(qreal rate)
|
void MmRendererMediaPlayerControl::setPlaybackRateInternal(qreal rate)
|
||||||
{
|
{
|
||||||
if (!m_context)
|
if (!m_context)
|
||||||
return;
|
return;
|
||||||
@@ -306,7 +325,7 @@ void BbMediaPlayerControl::setPlaybackRateInternal(qreal rate)
|
|||||||
emitMmError("mmr_speed_set failed");
|
emitMmError("mmr_speed_set failed");
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbMediaPlayerControl::setPositionInternal(qint64 position)
|
void MmRendererMediaPlayerControl::setPositionInternal(qint64 position)
|
||||||
{
|
{
|
||||||
if (!m_context)
|
if (!m_context)
|
||||||
return;
|
return;
|
||||||
@@ -317,7 +336,7 @@ void BbMediaPlayerControl::setPositionInternal(qint64 position)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbMediaPlayerControl::setMediaStatus(QMediaPlayer::MediaStatus status)
|
void MmRendererMediaPlayerControl::setMediaStatus(QMediaPlayer::MediaStatus status)
|
||||||
{
|
{
|
||||||
if (m_mediaStatus != status) {
|
if (m_mediaStatus != status) {
|
||||||
m_mediaStatus = status;
|
m_mediaStatus = status;
|
||||||
@@ -325,7 +344,7 @@ void BbMediaPlayerControl::setMediaStatus(QMediaPlayer::MediaStatus status)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbMediaPlayerControl::setState(QMediaPlayer::State state)
|
void MmRendererMediaPlayerControl::setState(QMediaPlayer::State state)
|
||||||
{
|
{
|
||||||
if (m_state != state) {
|
if (m_state != state) {
|
||||||
if (m_videoRendererControl) {
|
if (m_videoRendererControl) {
|
||||||
@@ -342,7 +361,7 @@ void BbMediaPlayerControl::setState(QMediaPlayer::State state)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbMediaPlayerControl::stopInternal(StopCommand stopCommand)
|
void MmRendererMediaPlayerControl::stopInternal(StopCommand stopCommand)
|
||||||
{
|
{
|
||||||
if (m_state != QMediaPlayer::StoppedState) {
|
if (m_state != QMediaPlayer::StoppedState) {
|
||||||
|
|
||||||
@@ -360,7 +379,7 @@ void BbMediaPlayerControl::stopInternal(StopCommand stopCommand)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbMediaPlayerControl::setVolume(int volume)
|
void MmRendererMediaPlayerControl::setVolume(int volume)
|
||||||
{
|
{
|
||||||
const int newVolume = qBound(0, volume, 100);
|
const int newVolume = qBound(0, volume, 100);
|
||||||
if (m_volume != newVolume) {
|
if (m_volume != newVolume) {
|
||||||
@@ -371,12 +390,12 @@ void BbMediaPlayerControl::setVolume(int volume)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BbMediaPlayerControl::isMuted() const
|
bool MmRendererMediaPlayerControl::isMuted() const
|
||||||
{
|
{
|
||||||
return m_muted;
|
return m_muted;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbMediaPlayerControl::setMuted(bool muted)
|
void MmRendererMediaPlayerControl::setMuted(bool muted)
|
||||||
{
|
{
|
||||||
if (m_muted != muted) {
|
if (m_muted != muted) {
|
||||||
m_muted = muted;
|
m_muted = muted;
|
||||||
@@ -385,38 +404,38 @@ void BbMediaPlayerControl::setMuted(bool muted)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int BbMediaPlayerControl::bufferStatus() const
|
int MmRendererMediaPlayerControl::bufferStatus() const
|
||||||
{
|
{
|
||||||
return m_bufferStatus;
|
return m_bufferStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BbMediaPlayerControl::isAudioAvailable() const
|
bool MmRendererMediaPlayerControl::isAudioAvailable() const
|
||||||
{
|
{
|
||||||
return m_metaData.hasAudio();
|
return m_metaData.hasAudio();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BbMediaPlayerControl::isVideoAvailable() const
|
bool MmRendererMediaPlayerControl::isVideoAvailable() const
|
||||||
{
|
{
|
||||||
return m_metaData.hasVideo();
|
return m_metaData.hasVideo();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BbMediaPlayerControl::isSeekable() const
|
bool MmRendererMediaPlayerControl::isSeekable() const
|
||||||
{
|
{
|
||||||
return m_metaData.isSeekable();
|
return m_metaData.isSeekable();
|
||||||
}
|
}
|
||||||
|
|
||||||
QMediaTimeRange BbMediaPlayerControl::availablePlaybackRanges() const
|
QMediaTimeRange MmRendererMediaPlayerControl::availablePlaybackRanges() const
|
||||||
{
|
{
|
||||||
// We can't get this information from the mmrenderer API yet, so pretend we can seek everywhere
|
// We can't get this information from the mmrenderer API yet, so pretend we can seek everywhere
|
||||||
return QMediaTimeRange(0, m_metaData.duration());
|
return QMediaTimeRange(0, m_metaData.duration());
|
||||||
}
|
}
|
||||||
|
|
||||||
qreal BbMediaPlayerControl::playbackRate() const
|
qreal MmRendererMediaPlayerControl::playbackRate() const
|
||||||
{
|
{
|
||||||
return m_rate;
|
return m_rate;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbMediaPlayerControl::setPlaybackRate(qreal rate)
|
void MmRendererMediaPlayerControl::setPlaybackRate(qreal rate)
|
||||||
{
|
{
|
||||||
if (m_rate != rate) {
|
if (m_rate != rate) {
|
||||||
m_rate = rate;
|
m_rate = rate;
|
||||||
@@ -425,18 +444,18 @@ void BbMediaPlayerControl::setPlaybackRate(qreal rate)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QMediaContent BbMediaPlayerControl::media() const
|
QMediaContent MmRendererMediaPlayerControl::media() const
|
||||||
{
|
{
|
||||||
return m_media;
|
return m_media;
|
||||||
}
|
}
|
||||||
|
|
||||||
const QIODevice *BbMediaPlayerControl::mediaStream() const
|
const QIODevice *MmRendererMediaPlayerControl::mediaStream() const
|
||||||
{
|
{
|
||||||
// Always 0, we don't support QIODevice streams
|
// Always 0, we don't support QIODevice streams
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbMediaPlayerControl::setMedia(const QMediaContent &media, QIODevice *stream)
|
void MmRendererMediaPlayerControl::setMedia(const QMediaContent &media, QIODevice *stream)
|
||||||
{
|
{
|
||||||
Q_UNUSED(stream); // not supported
|
Q_UNUSED(stream); // not supported
|
||||||
|
|
||||||
@@ -460,7 +479,7 @@ void BbMediaPlayerControl::setMedia(const QMediaContent &media, QIODevice *strea
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbMediaPlayerControl::continueLoadMedia()
|
void MmRendererMediaPlayerControl::continueLoadMedia()
|
||||||
{
|
{
|
||||||
attach();
|
attach();
|
||||||
updateMetaData();
|
updateMetaData();
|
||||||
@@ -468,7 +487,17 @@ void BbMediaPlayerControl::continueLoadMedia()
|
|||||||
play();
|
play();
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbMediaPlayerControl::play()
|
QString MmRendererMediaPlayerControl::contextName() const
|
||||||
|
{
|
||||||
|
return m_contextName;
|
||||||
|
}
|
||||||
|
|
||||||
|
MmRendererVideoWindowControl *MmRendererMediaPlayerControl::videoWindowControl() const
|
||||||
|
{
|
||||||
|
return m_videoWindowControl;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MmRendererMediaPlayerControl::play()
|
||||||
{
|
{
|
||||||
if (m_playAfterMediaLoaded)
|
if (m_playAfterMediaLoaded)
|
||||||
m_playAfterMediaLoaded = false;
|
m_playAfterMediaLoaded = false;
|
||||||
@@ -513,7 +542,7 @@ void BbMediaPlayerControl::play()
|
|||||||
setState( QMediaPlayer::PlayingState);
|
setState( QMediaPlayer::PlayingState);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbMediaPlayerControl::pause()
|
void MmRendererMediaPlayerControl::pause()
|
||||||
{
|
{
|
||||||
if (m_state == QMediaPlayer::PlayingState) {
|
if (m_state == QMediaPlayer::PlayingState) {
|
||||||
setPlaybackRateInternal(0);
|
setPlaybackRateInternal(0);
|
||||||
@@ -521,78 +550,41 @@ void BbMediaPlayerControl::pause()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbMediaPlayerControl::stop()
|
void MmRendererMediaPlayerControl::stop()
|
||||||
{
|
{
|
||||||
stopInternal(StopMmRenderer);
|
stopInternal(StopMmRenderer);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbMediaPlayerControl::setVideoRendererControl(BbPlayerVideoRendererControl *videoControl)
|
MmRendererPlayerVideoRendererControl *MmRendererMediaPlayerControl::videoRendererControl() const
|
||||||
|
{
|
||||||
|
return m_videoRendererControl;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MmRendererMediaPlayerControl::setVideoRendererControl(MmRendererPlayerVideoRendererControl *videoControl)
|
||||||
{
|
{
|
||||||
m_videoRendererControl = videoControl;
|
m_videoRendererControl = videoControl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbMediaPlayerControl::setVideoWindowControl(BbVideoWindowControl *videoControl)
|
void MmRendererMediaPlayerControl::setVideoWindowControl(MmRendererVideoWindowControl *videoControl)
|
||||||
{
|
{
|
||||||
m_videoWindowControl = videoControl;
|
m_videoWindowControl = videoControl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbMediaPlayerControl::setMetaDataReaderControl(BbMetaDataReaderControl *metaDataReaderControl)
|
void MmRendererMediaPlayerControl::setMetaDataReaderControl(MmRendererMetaDataReaderControl *metaDataReaderControl)
|
||||||
{
|
{
|
||||||
m_metaDataReaderControl = metaDataReaderControl;
|
m_metaDataReaderControl = metaDataReaderControl;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BbMediaPlayerControl::nativeEventFilter(const QByteArray &eventType, void *message, long *result)
|
void MmRendererMediaPlayerControl::setMmPosition(qint64 newPosition)
|
||||||
{
|
{
|
||||||
Q_UNUSED(eventType);
|
|
||||||
Q_UNUSED(result);
|
|
||||||
|
|
||||||
bps_event_t * const event = static_cast<bps_event_t *>(message);
|
|
||||||
if (!event ||
|
|
||||||
(bps_event_get_domain(event) != mmrenderer_get_domain() &&
|
|
||||||
bps_event_get_domain(event) != screen_get_domain()))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (m_videoWindowControl)
|
|
||||||
m_videoWindowControl->bpsEventHandler(event);
|
|
||||||
|
|
||||||
if (bps_event_get_domain(event) == mmrenderer_get_domain()) {
|
|
||||||
if (bps_event_get_code(event) == MMRENDERER_STATE_CHANGE) {
|
|
||||||
const mmrenderer_state_t newState = mmrenderer_event_get_state(event);
|
|
||||||
if (newState == MMR_STOPPED) {
|
|
||||||
|
|
||||||
// Only react to stop events that happen when the end of the stream is reached and
|
|
||||||
// playback is stopped because of this.
|
|
||||||
// Ignore other stop event sources, souch as calling mmr_stop() ourselves and
|
|
||||||
// mmr_input_attach().
|
|
||||||
if (m_stopEventsToIgnore > 0) {
|
|
||||||
--m_stopEventsToIgnore;
|
|
||||||
} else {
|
|
||||||
setMediaStatus(QMediaPlayer::EndOfMedia);
|
|
||||||
stopInternal(IgnoreMmRenderer);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bps_event_get_code(event) == MMRENDERER_STATUS_UPDATE) {
|
|
||||||
|
|
||||||
// Prevent spurious position change events from overriding our own position, for example
|
|
||||||
// when setting the position to 0 in stop().
|
|
||||||
// Also, don't change the position while we're loading the media, as then play() would
|
|
||||||
// set a wrong initial position.
|
|
||||||
if (m_state != QMediaPlayer::PlayingState ||
|
|
||||||
m_mediaStatus == QMediaPlayer::LoadingMedia ||
|
|
||||||
m_mediaStatus == QMediaPlayer::NoMedia ||
|
|
||||||
m_mediaStatus == QMediaPlayer::InvalidMedia)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
const qint64 newPosition = QString::fromLatin1(mmrenderer_event_get_position(event)).toLongLong();
|
|
||||||
if (newPosition != 0 && newPosition != m_position) {
|
if (newPosition != 0 && newPosition != m_position) {
|
||||||
m_position = newPosition;
|
m_position = newPosition;
|
||||||
emit positionChanged(m_position);
|
emit positionChanged(m_position);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const QString bufferStatus = QString::fromLatin1(mmrenderer_event_get_bufferlevel(event));
|
void MmRendererMediaPlayerControl::setMmBufferStatus(const QString &bufferStatus)
|
||||||
|
{
|
||||||
const int slashPos = bufferStatus.indexOf('/');
|
const int slashPos = bufferStatus.indexOf('/');
|
||||||
if (slashPos != -1) {
|
if (slashPos != -1) {
|
||||||
const int fill = bufferStatus.left(slashPos).toInt();
|
const int fill = bufferStatus.left(slashPos).toInt();
|
||||||
@@ -602,13 +594,9 @@ bool BbMediaPlayerControl::nativeEventFilter(const QByteArray &eventType, void *
|
|||||||
emit bufferStatusChanged(m_bufferStatus);
|
emit bufferStatusChanged(m_bufferStatus);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbMediaPlayerControl::updateMetaData()
|
void MmRendererMediaPlayerControl::updateMetaData()
|
||||||
{
|
{
|
||||||
if (m_mediaStatus == QMediaPlayer::LoadedMedia)
|
if (m_mediaStatus == QMediaPlayer::LoadedMedia)
|
||||||
m_metaData.parse(m_contextName);
|
m_metaData.parse(m_contextName);
|
||||||
@@ -628,7 +616,7 @@ void BbMediaPlayerControl::updateMetaData()
|
|||||||
emit seekableChanged(m_metaData.isSeekable());
|
emit seekableChanged(m_metaData.isSeekable());
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbMediaPlayerControl::emitMmError(const QString &msg)
|
void MmRendererMediaPlayerControl::emitMmError(const QString &msg)
|
||||||
{
|
{
|
||||||
int errorCode = MMR_ERROR_NONE;
|
int errorCode = MMR_ERROR_NONE;
|
||||||
const QString errorMessage = mmErrorMessage(msg, m_context, &errorCode);
|
const QString errorMessage = mmErrorMessage(msg, m_context, &errorCode);
|
||||||
@@ -636,7 +624,7 @@ void BbMediaPlayerControl::emitMmError(const QString &msg)
|
|||||||
emit error(errorCode, errorMessage);
|
emit error(errorCode, errorMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbMediaPlayerControl::emitPError(const QString &msg)
|
void MmRendererMediaPlayerControl::emitPError(const QString &msg)
|
||||||
{
|
{
|
||||||
const QString errorMessage = QString("%1: %2").arg(msg).arg(strerror(errno));
|
const QString errorMessage = QString("%1: %2").arg(msg).arg(strerror(errno));
|
||||||
qDebug() << errorMessage;
|
qDebug() << errorMessage;
|
||||||
@@ -38,32 +38,30 @@
|
|||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#ifndef BBMEDIAPLAYERCONTROL_H
|
#ifndef MMRENDERERMEDIAPLAYERCONTROL_H
|
||||||
#define BBMEDIAPLAYERCONTROL_H
|
#define MMRENDERERMEDIAPLAYERCONTROL_H
|
||||||
|
|
||||||
#include "bbmetadata.h"
|
#include "mmrenderermetadata.h"
|
||||||
#include <qmediaplayercontrol.h>
|
#include <qmediaplayercontrol.h>
|
||||||
#include <QtCore/qabstractnativeeventfilter.h>
|
#include <QtCore/qabstractnativeeventfilter.h>
|
||||||
#include <QtCore/qpointer.h>
|
#include <QtCore/qpointer.h>
|
||||||
#include <QtCore/qtimer.h>
|
#include <QtCore/qtimer.h>
|
||||||
|
|
||||||
struct bps_event_t;
|
|
||||||
typedef struct mmr_connection mmr_connection_t;
|
typedef struct mmr_connection mmr_connection_t;
|
||||||
typedef struct mmr_context mmr_context_t;
|
typedef struct mmr_context mmr_context_t;
|
||||||
typedef struct mmrenderer_monitor mmrenderer_monitor_t;
|
typedef struct mmrenderer_monitor mmrenderer_monitor_t;
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
class BbMetaDataReaderControl;
|
class MmRendererMetaDataReaderControl;
|
||||||
class BbPlayerVideoRendererControl;
|
class MmRendererPlayerVideoRendererControl;
|
||||||
class BbVideoWindowControl;
|
class MmRendererVideoWindowControl;
|
||||||
|
|
||||||
class BbMediaPlayerControl : public QMediaPlayerControl, public QAbstractNativeEventFilter
|
class MmRendererMediaPlayerControl : public QMediaPlayerControl, public QAbstractNativeEventFilter
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit BbMediaPlayerControl(QObject *parent = 0);
|
explicit MmRendererMediaPlayerControl(QObject *parent = 0);
|
||||||
~BbMediaPlayerControl();
|
|
||||||
|
|
||||||
QMediaPlayer::State state() const Q_DECL_OVERRIDE;
|
QMediaPlayer::State state() const Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
@@ -100,25 +98,39 @@ public:
|
|||||||
void pause() Q_DECL_OVERRIDE;
|
void pause() Q_DECL_OVERRIDE;
|
||||||
void stop() Q_DECL_OVERRIDE;
|
void stop() Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
void setVideoRendererControl(BbPlayerVideoRendererControl *videoControl);
|
MmRendererPlayerVideoRendererControl *videoRendererControl() const;
|
||||||
void setVideoWindowControl(BbVideoWindowControl *videoControl);
|
void setVideoRendererControl(MmRendererPlayerVideoRendererControl *videoControl);
|
||||||
void setMetaDataReaderControl(BbMetaDataReaderControl *metaDataReaderControl);
|
|
||||||
bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) Q_DECL_OVERRIDE;
|
MmRendererVideoWindowControl *videoWindowControl() const;
|
||||||
|
void setVideoWindowControl(MmRendererVideoWindowControl *videoControl);
|
||||||
|
void setMetaDataReaderControl(MmRendererMetaDataReaderControl *metaDataReaderControl);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void startMonitoring(int contextId, const QString &contextName) = 0;
|
||||||
|
virtual void stopMonitoring() = 0;
|
||||||
|
|
||||||
|
QString contextName() const;
|
||||||
|
void openConnection();
|
||||||
|
void emitMmError(const QString &msg);
|
||||||
|
void emitPError(const QString &msg);
|
||||||
|
void setMmPosition(qint64 newPosition);
|
||||||
|
void setMmBufferStatus(const QString &bufferStatus);
|
||||||
|
void handleMmStopped();
|
||||||
|
void handleMmStatusUpdate(qint64 position);
|
||||||
|
|
||||||
|
// must be called from subclass dtors (calls virtual function stopMonitoring())
|
||||||
|
void destroy();
|
||||||
|
|
||||||
private Q_SLOTS:
|
private Q_SLOTS:
|
||||||
void continueLoadMedia();
|
void continueLoadMedia();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QByteArray resourcePathForUrl(const QUrl &url);
|
QByteArray resourcePathForUrl(const QUrl &url);
|
||||||
void openConnection();
|
|
||||||
void closeConnection();
|
void closeConnection();
|
||||||
void attach();
|
void attach();
|
||||||
void detach();
|
void detach();
|
||||||
void updateMetaData();
|
void updateMetaData();
|
||||||
|
|
||||||
void emitMmError(const QString &msg);
|
|
||||||
void emitPError(const QString &msg);
|
|
||||||
|
|
||||||
// All these set the specified value to the backend, but neither emit changed signals
|
// All these set the specified value to the backend, but neither emit changed signals
|
||||||
// nor change the member value.
|
// nor change the member value.
|
||||||
void setVolumeInternal(int newVolume);
|
void setVolumeInternal(int newVolume);
|
||||||
@@ -140,12 +152,11 @@ private:
|
|||||||
int m_volume;
|
int m_volume;
|
||||||
bool m_muted;
|
bool m_muted;
|
||||||
qreal m_rate;
|
qreal m_rate;
|
||||||
QPointer<BbPlayerVideoRendererControl> m_videoRendererControl;
|
QPointer<MmRendererPlayerVideoRendererControl> m_videoRendererControl;
|
||||||
QPointer<BbVideoWindowControl> m_videoWindowControl;
|
QPointer<MmRendererVideoWindowControl> m_videoWindowControl;
|
||||||
QPointer<BbMetaDataReaderControl> m_metaDataReaderControl;
|
QPointer<MmRendererMetaDataReaderControl> m_metaDataReaderControl;
|
||||||
BbMetaData m_metaData;
|
MmRendererMetaData m_metaData;
|
||||||
int m_id;
|
int m_id;
|
||||||
mmrenderer_monitor_t *m_eventMonitor;
|
|
||||||
qint64 m_position;
|
qint64 m_position;
|
||||||
QMediaPlayer::MediaStatus m_mediaStatus;
|
QMediaPlayer::MediaStatus m_mediaStatus;
|
||||||
bool m_playAfterMediaLoaded;
|
bool m_playAfterMediaLoaded;
|
||||||
@@ -38,17 +38,25 @@
|
|||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#include "bbmediaplayerservice.h"
|
#include "mmrenderermediaplayerservice.h"
|
||||||
|
|
||||||
#include "bbmediaplayercontrol.h"
|
#include "mmrenderermediaplayercontrol.h"
|
||||||
#include "bbmetadatareadercontrol.h"
|
#include "mmrenderermetadatareadercontrol.h"
|
||||||
#include "bbplayervideorenderercontrol.h"
|
#include "mmrendererplayervideorenderercontrol.h"
|
||||||
#include "bbutil.h"
|
#include "mmrendererutil.h"
|
||||||
#include "bbvideowindowcontrol.h"
|
#include "mmrenderervideowindowcontrol.h"
|
||||||
|
|
||||||
|
#ifdef Q_OS_BLACKBERRY
|
||||||
|
#include "bpsmediaplayercontrol.h"
|
||||||
|
typedef BpsMediaPlayerControl PlatformSpecificMediaPlayerControl;
|
||||||
|
#else
|
||||||
|
#include "ppsmediaplayercontrol.h"
|
||||||
|
typedef PpsMediaPlayerControl PlatformSpecificMediaPlayerControl;
|
||||||
|
#endif
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
BbMediaPlayerService::BbMediaPlayerService(QObject *parent)
|
MmRendererMediaPlayerService::MmRendererMediaPlayerService(QObject *parent)
|
||||||
: QMediaService(parent),
|
: QMediaService(parent),
|
||||||
m_videoRendererControl(0),
|
m_videoRendererControl(0),
|
||||||
m_videoWindowControl(0),
|
m_videoWindowControl(0),
|
||||||
@@ -59,7 +67,7 @@ BbMediaPlayerService::BbMediaPlayerService(QObject *parent)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
BbMediaPlayerService::~BbMediaPlayerService()
|
MmRendererMediaPlayerService::~MmRendererMediaPlayerService()
|
||||||
{
|
{
|
||||||
// Someone should have called releaseControl(), but better be safe
|
// Someone should have called releaseControl(), but better be safe
|
||||||
delete m_videoRendererControl;
|
delete m_videoRendererControl;
|
||||||
@@ -68,18 +76,18 @@ BbMediaPlayerService::~BbMediaPlayerService()
|
|||||||
delete m_metaDataReaderControl;
|
delete m_metaDataReaderControl;
|
||||||
}
|
}
|
||||||
|
|
||||||
QMediaControl *BbMediaPlayerService::requestControl(const char *name)
|
QMediaControl *MmRendererMediaPlayerService::requestControl(const char *name)
|
||||||
{
|
{
|
||||||
if (qstrcmp(name, QMediaPlayerControl_iid) == 0) {
|
if (qstrcmp(name, QMediaPlayerControl_iid) == 0) {
|
||||||
if (!m_mediaPlayerControl) {
|
if (!m_mediaPlayerControl) {
|
||||||
m_mediaPlayerControl = new BbMediaPlayerControl();
|
m_mediaPlayerControl = new PlatformSpecificMediaPlayerControl;
|
||||||
updateControls();
|
updateControls();
|
||||||
}
|
}
|
||||||
return m_mediaPlayerControl;
|
return m_mediaPlayerControl;
|
||||||
}
|
}
|
||||||
else if (qstrcmp(name, QMetaDataReaderControl_iid) == 0) {
|
else if (qstrcmp(name, QMetaDataReaderControl_iid) == 0) {
|
||||||
if (!m_metaDataReaderControl) {
|
if (!m_metaDataReaderControl) {
|
||||||
m_metaDataReaderControl = new BbMetaDataReaderControl();
|
m_metaDataReaderControl = new MmRendererMetaDataReaderControl();
|
||||||
updateControls();
|
updateControls();
|
||||||
}
|
}
|
||||||
return m_metaDataReaderControl;
|
return m_metaDataReaderControl;
|
||||||
@@ -98,14 +106,14 @@ QMediaControl *BbMediaPlayerService::requestControl(const char *name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!m_videoRendererControl) {
|
if (!m_videoRendererControl) {
|
||||||
m_videoRendererControl = new BbPlayerVideoRendererControl();
|
m_videoRendererControl = new MmRendererPlayerVideoRendererControl();
|
||||||
updateControls();
|
updateControls();
|
||||||
}
|
}
|
||||||
return m_videoRendererControl;
|
return m_videoRendererControl;
|
||||||
}
|
}
|
||||||
else if (qstrcmp(name, QVideoWindowControl_iid) == 0) {
|
else if (qstrcmp(name, QVideoWindowControl_iid) == 0) {
|
||||||
if (!m_videoWindowControl) {
|
if (!m_videoWindowControl) {
|
||||||
m_videoWindowControl = new BbVideoWindowControl();
|
m_videoWindowControl = new MmRendererVideoWindowControl();
|
||||||
updateControls();
|
updateControls();
|
||||||
}
|
}
|
||||||
return m_videoWindowControl;
|
return m_videoWindowControl;
|
||||||
@@ -113,7 +121,7 @@ QMediaControl *BbMediaPlayerService::requestControl(const char *name)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbMediaPlayerService::releaseControl(QMediaControl *control)
|
void MmRendererMediaPlayerService::releaseControl(QMediaControl *control)
|
||||||
{
|
{
|
||||||
if (control == m_videoRendererControl)
|
if (control == m_videoRendererControl)
|
||||||
m_videoRendererControl = 0;
|
m_videoRendererControl = 0;
|
||||||
@@ -126,7 +134,7 @@ void BbMediaPlayerService::releaseControl(QMediaControl *control)
|
|||||||
delete control;
|
delete control;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbMediaPlayerService::updateControls()
|
void MmRendererMediaPlayerService::updateControls()
|
||||||
{
|
{
|
||||||
if (m_videoRendererControl && m_mediaPlayerControl)
|
if (m_videoRendererControl && m_mediaPlayerControl)
|
||||||
m_mediaPlayerControl->setVideoRendererControl(m_videoRendererControl);
|
m_mediaPlayerControl->setVideoRendererControl(m_videoRendererControl);
|
||||||
@@ -38,25 +38,25 @@
|
|||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#ifndef BBMEDIAPLAYERSERVICE_H
|
#ifndef MMRENDERERMEDIAPLAYERSERVICE_H
|
||||||
#define BBMEDIAPLAYERSERVICE_H
|
#define MMRENDERERMEDIAPLAYERSERVICE_H
|
||||||
|
|
||||||
#include <qmediaservice.h>
|
#include <qmediaservice.h>
|
||||||
#include <QtCore/qpointer.h>
|
#include <QtCore/qpointer.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
class BbMediaPlayerControl;
|
class MmRendererMediaPlayerControl;
|
||||||
class BbMetaDataReaderControl;
|
class MmRendererMetaDataReaderControl;
|
||||||
class BbPlayerVideoRendererControl;
|
class MmRendererPlayerVideoRendererControl;
|
||||||
class BbVideoWindowControl;
|
class MmRendererVideoWindowControl;
|
||||||
|
|
||||||
class BbMediaPlayerService : public QMediaService
|
class MmRendererMediaPlayerService : public QMediaService
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit BbMediaPlayerService(QObject *parent = 0);
|
explicit MmRendererMediaPlayerService(QObject *parent = 0);
|
||||||
~BbMediaPlayerService();
|
~MmRendererMediaPlayerService();
|
||||||
|
|
||||||
QMediaControl *requestControl(const char *name) Q_DECL_OVERRIDE;
|
QMediaControl *requestControl(const char *name) Q_DECL_OVERRIDE;
|
||||||
void releaseControl(QMediaControl *control) Q_DECL_OVERRIDE;
|
void releaseControl(QMediaControl *control) Q_DECL_OVERRIDE;
|
||||||
@@ -64,10 +64,10 @@ public:
|
|||||||
private:
|
private:
|
||||||
void updateControls();
|
void updateControls();
|
||||||
|
|
||||||
QPointer<BbPlayerVideoRendererControl> m_videoRendererControl;
|
QPointer<MmRendererPlayerVideoRendererControl> m_videoRendererControl;
|
||||||
QPointer<BbVideoWindowControl> m_videoWindowControl;
|
QPointer<MmRendererVideoWindowControl> m_videoWindowControl;
|
||||||
QPointer<BbMediaPlayerControl> m_mediaPlayerControl;
|
QPointer<MmRendererMediaPlayerControl> m_mediaPlayerControl;
|
||||||
QPointer<BbMetaDataReaderControl> m_metaDataReaderControl;
|
QPointer<MmRendererMetaDataReaderControl> m_metaDataReaderControl;
|
||||||
|
|
||||||
bool m_appHasDrmPermission : 1;
|
bool m_appHasDrmPermission : 1;
|
||||||
bool m_appHasDrmPermissionChecked : 1;
|
bool m_appHasDrmPermissionChecked : 1;
|
||||||
@@ -38,7 +38,7 @@
|
|||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#include "bbmetadata.h"
|
#include "mmrenderermetadata.h"
|
||||||
|
|
||||||
#include <QtCore/qdebug.h>
|
#include <QtCore/qdebug.h>
|
||||||
#include <QtCore/qfile.h>
|
#include <QtCore/qfile.h>
|
||||||
@@ -46,7 +46,7 @@
|
|||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
BbMetaData::BbMetaData()
|
MmRendererMetaData::MmRendererMetaData()
|
||||||
{
|
{
|
||||||
clear();
|
clear();
|
||||||
}
|
}
|
||||||
@@ -64,14 +64,14 @@ static const char * trackKey = "md_title_track";
|
|||||||
static const char * widthKey = "md_video_width";
|
static const char * widthKey = "md_video_width";
|
||||||
static const char * heightKey = "md_video_height";
|
static const char * heightKey = "md_video_height";
|
||||||
static const char * mediaTypeKey = "md_title_mediatype";
|
static const char * mediaTypeKey = "md_title_mediatype";
|
||||||
static const char * pixelWidthKey = "md_video_pixel_height";
|
static const char * pixelWidthKey = "md_video_pixel_width";
|
||||||
static const char * pixelHeightKey = "md_video_pixel_width";
|
static const char * pixelHeightKey = "md_video_pixel_height";
|
||||||
static const char * seekableKey = "md_title_seekable";
|
static const char * seekableKey = "md_title_seekable";
|
||||||
|
|
||||||
static const int mediaTypeAudioFlag = 4;
|
static const int mediaTypeAudioFlag = 4;
|
||||||
static const int mediaTypeVideoFlag = 2;
|
static const int mediaTypeVideoFlag = 2;
|
||||||
|
|
||||||
bool BbMetaData::parse(const QString &contextName)
|
bool MmRendererMetaData::parse(const QString &contextName)
|
||||||
{
|
{
|
||||||
clear();
|
clear();
|
||||||
QString fileName =
|
QString fileName =
|
||||||
@@ -138,7 +138,7 @@ bool BbMetaData::parse(const QString &contextName)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbMetaData::clear()
|
void MmRendererMetaData::clear()
|
||||||
{
|
{
|
||||||
m_duration = 0;
|
m_duration = 0;
|
||||||
m_height = 0;
|
m_height = 0;
|
||||||
@@ -158,7 +158,7 @@ void BbMetaData::clear()
|
|||||||
m_track = 0;
|
m_track = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
qlonglong BbMetaData::duration() const
|
qlonglong MmRendererMetaData::duration() const
|
||||||
{
|
{
|
||||||
return m_duration;
|
return m_duration;
|
||||||
}
|
}
|
||||||
@@ -173,17 +173,17 @@ qlonglong BbMetaData::duration() const
|
|||||||
// is 600x200, which will cause the video to be displayed in an aspect ratio of 3:1 instead of 3:2,
|
// is 600x200, which will cause the video to be displayed in an aspect ratio of 3:1 instead of 3:2,
|
||||||
// and therefore look correct.
|
// and therefore look correct.
|
||||||
|
|
||||||
int BbMetaData::height() const
|
int MmRendererMetaData::height() const
|
||||||
{
|
{
|
||||||
return m_height * m_pixelHeight;
|
return m_height * m_pixelHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
int BbMetaData::width() const
|
int MmRendererMetaData::width() const
|
||||||
{
|
{
|
||||||
return m_width * m_pixelWidth;
|
return m_width * m_pixelWidth;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BbMetaData::hasVideo() const
|
bool MmRendererMetaData::hasVideo() const
|
||||||
{
|
{
|
||||||
// By default, assume no video if we can't extract the information
|
// By default, assume no video if we can't extract the information
|
||||||
if (m_mediaType == -1)
|
if (m_mediaType == -1)
|
||||||
@@ -192,7 +192,7 @@ bool BbMetaData::hasVideo() const
|
|||||||
return (m_mediaType & mediaTypeVideoFlag);
|
return (m_mediaType & mediaTypeVideoFlag);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BbMetaData::hasAudio() const
|
bool MmRendererMetaData::hasAudio() const
|
||||||
{
|
{
|
||||||
// By default, assume audio only if we can't extract the information
|
// By default, assume audio only if we can't extract the information
|
||||||
if (m_mediaType == -1)
|
if (m_mediaType == -1)
|
||||||
@@ -201,37 +201,37 @@ bool BbMetaData::hasAudio() const
|
|||||||
return (m_mediaType & mediaTypeAudioFlag);
|
return (m_mediaType & mediaTypeAudioFlag);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString BbMetaData::title() const
|
QString MmRendererMetaData::title() const
|
||||||
{
|
{
|
||||||
return m_title;
|
return m_title;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BbMetaData::isSeekable() const
|
bool MmRendererMetaData::isSeekable() const
|
||||||
{
|
{
|
||||||
return m_seekable;
|
return m_seekable;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString BbMetaData::artist() const
|
QString MmRendererMetaData::artist() const
|
||||||
{
|
{
|
||||||
return m_artist;
|
return m_artist;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString BbMetaData::comment() const
|
QString MmRendererMetaData::comment() const
|
||||||
{
|
{
|
||||||
return m_comment;
|
return m_comment;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString BbMetaData::genre() const
|
QString MmRendererMetaData::genre() const
|
||||||
{
|
{
|
||||||
return m_genre;
|
return m_genre;
|
||||||
}
|
}
|
||||||
|
|
||||||
int BbMetaData::year() const
|
int MmRendererMetaData::year() const
|
||||||
{
|
{
|
||||||
return m_year;
|
return m_year;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString BbMetaData::mediaType() const
|
QString MmRendererMetaData::mediaType() const
|
||||||
{
|
{
|
||||||
if (hasVideo())
|
if (hasVideo())
|
||||||
return QLatin1String("video");
|
return QLatin1String("video");
|
||||||
@@ -241,27 +241,27 @@ QString BbMetaData::mediaType() const
|
|||||||
return QString();
|
return QString();
|
||||||
}
|
}
|
||||||
|
|
||||||
int BbMetaData::audioBitRate() const
|
int MmRendererMetaData::audioBitRate() const
|
||||||
{
|
{
|
||||||
return m_audioBitRate;
|
return m_audioBitRate;
|
||||||
}
|
}
|
||||||
|
|
||||||
int BbMetaData::sampleRate() const
|
int MmRendererMetaData::sampleRate() const
|
||||||
{
|
{
|
||||||
return m_sampleRate;
|
return m_sampleRate;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString BbMetaData::album() const
|
QString MmRendererMetaData::album() const
|
||||||
{
|
{
|
||||||
return m_album;
|
return m_album;
|
||||||
}
|
}
|
||||||
|
|
||||||
int BbMetaData::track() const
|
int MmRendererMetaData::track() const
|
||||||
{
|
{
|
||||||
return m_track;
|
return m_track;
|
||||||
}
|
}
|
||||||
|
|
||||||
QSize BbMetaData::resolution() const
|
QSize MmRendererMetaData::resolution() const
|
||||||
{
|
{
|
||||||
return QSize(width(), height());
|
return QSize(width(), height());
|
||||||
}
|
}
|
||||||
@@ -38,8 +38,8 @@
|
|||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#ifndef BBMETADATA_H
|
#ifndef MMRENDERERMETADATA_H
|
||||||
#define BBMETADATA_H
|
#define MMRENDERERMETADATA_H
|
||||||
|
|
||||||
#include <QtCore/qglobal.h>
|
#include <QtCore/qglobal.h>
|
||||||
#include <QtCore/QSize>
|
#include <QtCore/QSize>
|
||||||
@@ -47,10 +47,10 @@
|
|||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
class BbMetaData
|
class MmRendererMetaData
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
BbMetaData();
|
MmRendererMetaData();
|
||||||
bool parse(const QString &contextName);
|
bool parse(const QString &contextName);
|
||||||
void clear();
|
void clear();
|
||||||
|
|
||||||
@@ -38,22 +38,22 @@
|
|||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#include "bbmetadatareadercontrol.h"
|
#include "mmrenderermetadatareadercontrol.h"
|
||||||
#include <QtMultimedia/qmediametadata.h>
|
#include <QtMultimedia/qmediametadata.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
BbMetaDataReaderControl::BbMetaDataReaderControl(QObject *parent)
|
MmRendererMetaDataReaderControl::MmRendererMetaDataReaderControl(QObject *parent)
|
||||||
: QMetaDataReaderControl(parent)
|
: QMetaDataReaderControl(parent)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BbMetaDataReaderControl::isMetaDataAvailable() const
|
bool MmRendererMetaDataReaderControl::isMetaDataAvailable() const
|
||||||
{
|
{
|
||||||
return !availableMetaData().isEmpty();
|
return !availableMetaData().isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant BbMetaDataReaderControl::metaData(const QString &key) const
|
QVariant MmRendererMetaDataReaderControl::metaData(const QString &key) const
|
||||||
{
|
{
|
||||||
if (key == QMediaMetaData::Title)
|
if (key == QMediaMetaData::Title)
|
||||||
return m_metaData.title();
|
return m_metaData.title();
|
||||||
@@ -83,7 +83,7 @@ QVariant BbMetaDataReaderControl::metaData(const QString &key) const
|
|||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList BbMetaDataReaderControl::availableMetaData() const
|
QStringList MmRendererMetaDataReaderControl::availableMetaData() const
|
||||||
{
|
{
|
||||||
QStringList metaData;
|
QStringList metaData;
|
||||||
|
|
||||||
@@ -115,9 +115,9 @@ QStringList BbMetaDataReaderControl::availableMetaData() const
|
|||||||
return metaData;
|
return metaData;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbMetaDataReaderControl::setMetaData(const BbMetaData &data)
|
void MmRendererMetaDataReaderControl::setMetaData(const MmRendererMetaData &data)
|
||||||
{
|
{
|
||||||
const BbMetaData oldMetaData = m_metaData;
|
const MmRendererMetaData oldMetaData = m_metaData;
|
||||||
const bool oldMetaDataAvailable = isMetaDataAvailable();
|
const bool oldMetaDataAvailable = isMetaDataAvailable();
|
||||||
|
|
||||||
m_metaData = data;
|
m_metaData = data;
|
||||||
@@ -38,29 +38,29 @@
|
|||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#ifndef BBMETADATAREADERCONTROL_H
|
#ifndef MMRENDERERMETADATAREADERCONTROL_H
|
||||||
#define BBMETADATAREADERCONTROL_H
|
#define MMRENDERERMETADATAREADERCONTROL_H
|
||||||
|
|
||||||
#include "bbmetadata.h"
|
#include "mmrenderermetadata.h"
|
||||||
#include <qmetadatareadercontrol.h>
|
#include <qmetadatareadercontrol.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
class BbMetaDataReaderControl : public QMetaDataReaderControl
|
class MmRendererMetaDataReaderControl : public QMetaDataReaderControl
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit BbMetaDataReaderControl(QObject *parent = 0);
|
explicit MmRendererMetaDataReaderControl(QObject *parent = 0);
|
||||||
|
|
||||||
bool isMetaDataAvailable() const Q_DECL_OVERRIDE;
|
bool isMetaDataAvailable() const Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
QVariant metaData(const QString &key) const Q_DECL_OVERRIDE;
|
QVariant metaData(const QString &key) const Q_DECL_OVERRIDE;
|
||||||
QStringList availableMetaData() const Q_DECL_OVERRIDE;
|
QStringList availableMetaData() const Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
void setMetaData(const BbMetaData &data);
|
void setMetaData(const MmRendererMetaData &data);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
BbMetaData m_metaData;
|
MmRendererMetaData m_metaData;
|
||||||
};
|
};
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
@@ -39,7 +39,7 @@
|
|||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "bbplayervideorenderercontrol.h"
|
#include "mmrendererplayervideorenderercontrol.h"
|
||||||
|
|
||||||
#include "windowgrabber.h"
|
#include "windowgrabber.h"
|
||||||
|
|
||||||
@@ -53,7 +53,7 @@ QT_BEGIN_NAMESPACE
|
|||||||
|
|
||||||
static int winIdCounter = 0;
|
static int winIdCounter = 0;
|
||||||
|
|
||||||
BbPlayerVideoRendererControl::BbPlayerVideoRendererControl(QObject *parent)
|
MmRendererPlayerVideoRendererControl::MmRendererPlayerVideoRendererControl(QObject *parent)
|
||||||
: QVideoRendererControl(parent)
|
: QVideoRendererControl(parent)
|
||||||
, m_windowGrabber(new WindowGrabber(this))
|
, m_windowGrabber(new WindowGrabber(this))
|
||||||
, m_context(0)
|
, m_context(0)
|
||||||
@@ -62,40 +62,40 @@ BbPlayerVideoRendererControl::BbPlayerVideoRendererControl(QObject *parent)
|
|||||||
connect(m_windowGrabber, SIGNAL(frameGrabbed(QImage)), SLOT(frameGrabbed(QImage)));
|
connect(m_windowGrabber, SIGNAL(frameGrabbed(QImage)), SLOT(frameGrabbed(QImage)));
|
||||||
}
|
}
|
||||||
|
|
||||||
BbPlayerVideoRendererControl::~BbPlayerVideoRendererControl()
|
MmRendererPlayerVideoRendererControl::~MmRendererPlayerVideoRendererControl()
|
||||||
{
|
{
|
||||||
detachDisplay();
|
detachDisplay();
|
||||||
}
|
}
|
||||||
|
|
||||||
QAbstractVideoSurface *BbPlayerVideoRendererControl::surface() const
|
QAbstractVideoSurface *MmRendererPlayerVideoRendererControl::surface() const
|
||||||
{
|
{
|
||||||
return m_surface;
|
return m_surface;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbPlayerVideoRendererControl::setSurface(QAbstractVideoSurface *surface)
|
void MmRendererPlayerVideoRendererControl::setSurface(QAbstractVideoSurface *surface)
|
||||||
{
|
{
|
||||||
m_surface = QPointer<QAbstractVideoSurface>(surface);
|
m_surface = QPointer<QAbstractVideoSurface>(surface);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbPlayerVideoRendererControl::attachDisplay(mmr_context_t *context)
|
void MmRendererPlayerVideoRendererControl::attachDisplay(mmr_context_t *context)
|
||||||
{
|
{
|
||||||
if (m_videoId != -1) {
|
if (m_videoId != -1) {
|
||||||
qWarning() << "BbPlayerVideoRendererControl: Video output already attached!";
|
qWarning() << "MmRendererPlayerVideoRendererControl: Video output already attached!";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!context) {
|
if (!context) {
|
||||||
qWarning() << "BbPlayerVideoRendererControl: No media player context!";
|
qWarning() << "MmRendererPlayerVideoRendererControl: No media player context!";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const QByteArray windowGroupId = m_windowGrabber->windowGroupId();
|
const QByteArray windowGroupId = m_windowGrabber->windowGroupId();
|
||||||
if (windowGroupId.isEmpty()) {
|
if (windowGroupId.isEmpty()) {
|
||||||
qWarning() << "BbPlayerVideoRendererControl: Unable to find window group";
|
qWarning() << "MmRendererPlayerVideoRendererControl: Unable to find window group";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString windowName = QStringLiteral("BbPlayerVideoRendererControl_%1_%2")
|
const QString windowName = QStringLiteral("MmRendererPlayerVideoRendererControl_%1_%2")
|
||||||
.arg(winIdCounter++)
|
.arg(winIdCounter++)
|
||||||
.arg(QCoreApplication::applicationPid());
|
.arg(QCoreApplication::applicationPid());
|
||||||
|
|
||||||
@@ -115,7 +115,7 @@ void BbPlayerVideoRendererControl::attachDisplay(mmr_context_t *context)
|
|||||||
m_context = context;
|
m_context = context;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbPlayerVideoRendererControl::detachDisplay()
|
void MmRendererPlayerVideoRendererControl::detachDisplay()
|
||||||
{
|
{
|
||||||
m_windowGrabber->stop();
|
m_windowGrabber->stop();
|
||||||
|
|
||||||
@@ -129,17 +129,17 @@ void BbPlayerVideoRendererControl::detachDisplay()
|
|||||||
m_videoId = -1;
|
m_videoId = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbPlayerVideoRendererControl::pause()
|
void MmRendererPlayerVideoRendererControl::pause()
|
||||||
{
|
{
|
||||||
m_windowGrabber->pause();
|
m_windowGrabber->pause();
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbPlayerVideoRendererControl::resume()
|
void MmRendererPlayerVideoRendererControl::resume()
|
||||||
{
|
{
|
||||||
m_windowGrabber->resume();
|
m_windowGrabber->resume();
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbPlayerVideoRendererControl::frameGrabbed(const QImage &frame)
|
void MmRendererPlayerVideoRendererControl::frameGrabbed(const QImage &frame)
|
||||||
{
|
{
|
||||||
if (m_surface) {
|
if (m_surface) {
|
||||||
if (!m_surface->isActive()) {
|
if (!m_surface->isActive()) {
|
||||||
@@ -38,26 +38,25 @@
|
|||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#ifndef BBPLAYERVIDEORENDERERCONTROL_H
|
#ifndef MMRENDERERPLAYERVIDEORENDERERCONTROL_H
|
||||||
#define BBPLAYERVIDEORENDERERCONTROL_H
|
#define MMRENDERERPLAYERVIDEORENDERERCONTROL_H
|
||||||
|
|
||||||
#include <QPointer>
|
#include <QPointer>
|
||||||
#include <qabstractvideosurface.h>
|
#include <qabstractvideosurface.h>
|
||||||
#include <qvideorenderercontrol.h>
|
#include <qvideorenderercontrol.h>
|
||||||
|
|
||||||
typedef struct mmr_context mmr_context_t;
|
typedef struct mmr_context mmr_context_t;
|
||||||
struct bps_event_t;
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
class WindowGrabber;
|
class WindowGrabber;
|
||||||
|
|
||||||
class BbPlayerVideoRendererControl : public QVideoRendererControl
|
class MmRendererPlayerVideoRendererControl : public QVideoRendererControl
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit BbPlayerVideoRendererControl(QObject *parent = 0);
|
explicit MmRendererPlayerVideoRendererControl(QObject *parent = 0);
|
||||||
~BbPlayerVideoRendererControl();
|
~MmRendererPlayerVideoRendererControl();
|
||||||
|
|
||||||
QAbstractVideoSurface *surface() const Q_DECL_OVERRIDE;
|
QAbstractVideoSurface *surface() const Q_DECL_OVERRIDE;
|
||||||
void setSurface(QAbstractVideoSurface *surface) Q_DECL_OVERRIDE;
|
void setSurface(QAbstractVideoSurface *surface) Q_DECL_OVERRIDE;
|
||||||
@@ -38,7 +38,7 @@
|
|||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#include "bbutil.h"
|
#include "mmrendererutil.h"
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
@@ -38,8 +38,8 @@
|
|||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#ifndef BBUTIL_H
|
#ifndef MMRENDERERUTIL_H
|
||||||
#define BBUTIL_H
|
#define MMRENDERERUTIL_H
|
||||||
|
|
||||||
#include <QtCore/qglobal.h>
|
#include <QtCore/qglobal.h>
|
||||||
|
|
||||||
@@ -38,21 +38,20 @@
|
|||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#include "bbvideowindowcontrol.h"
|
#include "mmrenderervideowindowcontrol.h"
|
||||||
#include "bbutil.h"
|
#include "mmrendererutil.h"
|
||||||
#include <QtCore/qdebug.h>
|
#include <QtCore/qdebug.h>
|
||||||
#include <QtGui/qguiapplication.h>
|
#include <QtGui/qguiapplication.h>
|
||||||
#include <QtGui/qpa/qplatformnativeinterface.h>
|
#include <QtGui/qpa/qplatformnativeinterface.h>
|
||||||
#include <QtGui/qscreen.h>
|
#include <QtGui/qscreen.h>
|
||||||
#include <QtGui/qwindow.h>
|
#include <QtGui/qwindow.h>
|
||||||
#include <mm/renderer.h>
|
#include <mm/renderer.h>
|
||||||
#include <bps/screen.h>
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
static int winIdCounter = 0;
|
static int winIdCounter = 0;
|
||||||
|
|
||||||
BbVideoWindowControl::BbVideoWindowControl(QObject *parent)
|
MmRendererVideoWindowControl::MmRendererVideoWindowControl(QObject *parent)
|
||||||
: QVideoWindowControl(parent),
|
: QVideoWindowControl(parent),
|
||||||
m_videoId(-1),
|
m_videoId(-1),
|
||||||
m_winId(0),
|
m_winId(0),
|
||||||
@@ -67,26 +66,26 @@ BbVideoWindowControl::BbVideoWindowControl(QObject *parent)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
BbVideoWindowControl::~BbVideoWindowControl()
|
MmRendererVideoWindowControl::~MmRendererVideoWindowControl()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
WId BbVideoWindowControl::winId() const
|
WId MmRendererVideoWindowControl::winId() const
|
||||||
{
|
{
|
||||||
return m_winId;
|
return m_winId;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbVideoWindowControl::setWinId(WId id)
|
void MmRendererVideoWindowControl::setWinId(WId id)
|
||||||
{
|
{
|
||||||
m_winId = id;
|
m_winId = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
QRect BbVideoWindowControl::displayRect() const
|
QRect MmRendererVideoWindowControl::displayRect() const
|
||||||
{
|
{
|
||||||
return m_displayRect ;
|
return m_displayRect ;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbVideoWindowControl::setDisplayRect(const QRect &rect)
|
void MmRendererVideoWindowControl::setDisplayRect(const QRect &rect)
|
||||||
{
|
{
|
||||||
if (m_displayRect != rect) {
|
if (m_displayRect != rect) {
|
||||||
m_displayRect = rect;
|
m_displayRect = rect;
|
||||||
@@ -94,12 +93,12 @@ void BbVideoWindowControl::setDisplayRect(const QRect &rect)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BbVideoWindowControl::isFullScreen() const
|
bool MmRendererVideoWindowControl::isFullScreen() const
|
||||||
{
|
{
|
||||||
return m_fullscreen;
|
return m_fullscreen;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbVideoWindowControl::setFullScreen(bool fullScreen)
|
void MmRendererVideoWindowControl::setFullScreen(bool fullScreen)
|
||||||
{
|
{
|
||||||
if (m_fullscreen != fullScreen) {
|
if (m_fullscreen != fullScreen) {
|
||||||
m_fullscreen = fullScreen;
|
m_fullscreen = fullScreen;
|
||||||
@@ -108,32 +107,32 @@ void BbVideoWindowControl::setFullScreen(bool fullScreen)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbVideoWindowControl::repaint()
|
void MmRendererVideoWindowControl::repaint()
|
||||||
{
|
{
|
||||||
// Nothing we can or should do here
|
// Nothing we can or should do here
|
||||||
}
|
}
|
||||||
|
|
||||||
QSize BbVideoWindowControl::nativeSize() const
|
QSize MmRendererVideoWindowControl::nativeSize() const
|
||||||
{
|
{
|
||||||
return QSize(m_metaData.width(), m_metaData.height());
|
return QSize(m_metaData.width(), m_metaData.height());
|
||||||
}
|
}
|
||||||
|
|
||||||
Qt::AspectRatioMode BbVideoWindowControl::aspectRatioMode() const
|
Qt::AspectRatioMode MmRendererVideoWindowControl::aspectRatioMode() const
|
||||||
{
|
{
|
||||||
return m_aspectRatioMode;
|
return m_aspectRatioMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbVideoWindowControl::setAspectRatioMode(Qt::AspectRatioMode mode)
|
void MmRendererVideoWindowControl::setAspectRatioMode(Qt::AspectRatioMode mode)
|
||||||
{
|
{
|
||||||
m_aspectRatioMode = mode;
|
m_aspectRatioMode = mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
int BbVideoWindowControl::brightness() const
|
int MmRendererVideoWindowControl::brightness() const
|
||||||
{
|
{
|
||||||
return m_brightness;
|
return m_brightness;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbVideoWindowControl::setBrightness(int brightness)
|
void MmRendererVideoWindowControl::setBrightness(int brightness)
|
||||||
{
|
{
|
||||||
if (m_brightness != brightness) {
|
if (m_brightness != brightness) {
|
||||||
m_brightness = brightness;
|
m_brightness = brightness;
|
||||||
@@ -142,12 +141,12 @@ void BbVideoWindowControl::setBrightness(int brightness)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int BbVideoWindowControl::contrast() const
|
int MmRendererVideoWindowControl::contrast() const
|
||||||
{
|
{
|
||||||
return m_contrast;
|
return m_contrast;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbVideoWindowControl::setContrast(int contrast)
|
void MmRendererVideoWindowControl::setContrast(int contrast)
|
||||||
{
|
{
|
||||||
if (m_contrast != contrast) {
|
if (m_contrast != contrast) {
|
||||||
m_contrast = contrast;
|
m_contrast = contrast;
|
||||||
@@ -156,12 +155,12 @@ void BbVideoWindowControl::setContrast(int contrast)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int BbVideoWindowControl::hue() const
|
int MmRendererVideoWindowControl::hue() const
|
||||||
{
|
{
|
||||||
return m_hue;
|
return m_hue;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbVideoWindowControl::setHue(int hue)
|
void MmRendererVideoWindowControl::setHue(int hue)
|
||||||
{
|
{
|
||||||
if (m_hue != hue) {
|
if (m_hue != hue) {
|
||||||
m_hue = hue;
|
m_hue = hue;
|
||||||
@@ -170,12 +169,12 @@ void BbVideoWindowControl::setHue(int hue)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int BbVideoWindowControl::saturation() const
|
int MmRendererVideoWindowControl::saturation() const
|
||||||
{
|
{
|
||||||
return m_saturation;
|
return m_saturation;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbVideoWindowControl::setSaturation(int saturation)
|
void MmRendererVideoWindowControl::setSaturation(int saturation)
|
||||||
{
|
{
|
||||||
if (m_saturation != saturation) {
|
if (m_saturation != saturation) {
|
||||||
m_saturation = saturation;
|
m_saturation = saturation;
|
||||||
@@ -184,40 +183,44 @@ void BbVideoWindowControl::setSaturation(int saturation)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbVideoWindowControl::attachDisplay(mmr_context_t *context)
|
void MmRendererVideoWindowControl::attachDisplay(mmr_context_t *context)
|
||||||
{
|
{
|
||||||
if (m_videoId != -1) {
|
if (m_videoId != -1) {
|
||||||
qDebug() << "BbVideoWindowControl: Video output already attached!";
|
qDebug() << "MmRendererVideoWindowControl: Video output already attached!";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!context) {
|
if (!context) {
|
||||||
qDebug() << "BbVideoWindowControl: No media player context!";
|
qDebug() << "MmRendererVideoWindowControl: No media player context!";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QWindow * const window = findWindow(m_winId);
|
QWindow *window = findWindow(m_winId);
|
||||||
if (!window) {
|
if (!window) {
|
||||||
qDebug() << "BbVideoWindowControl: No video window!";
|
qDebug() << "MmRendererVideoWindowControl: No video window!";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QPlatformNativeInterface * const nativeInterface = QGuiApplication::platformNativeInterface();
|
QPlatformNativeInterface * const nativeInterface = QGuiApplication::platformNativeInterface();
|
||||||
if (!nativeInterface) {
|
if (!nativeInterface) {
|
||||||
qDebug() << "BbVideoWindowControl: Unable to get platform native interface";
|
qDebug() << "MmRendererVideoWindowControl: Unable to get platform native interface";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char * const groupNameData = static_cast<const char *>(
|
const char * const groupNameData = static_cast<const char *>(
|
||||||
nativeInterface->nativeResourceForWindow("windowGroup", window));
|
nativeInterface->nativeResourceForWindow("windowGroup", window));
|
||||||
if (!groupNameData) {
|
if (!groupNameData) {
|
||||||
qDebug() << "BbVideoWindowControl: Unable to find window group for window" << window;
|
qDebug() << "MmRendererVideoWindowControl: Unable to find window group for window" << window;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString groupName = QString::fromLatin1(groupNameData);
|
const QString groupName = QString::fromLatin1(groupNameData);
|
||||||
m_windowName = QString("BbVideoWindowControl_%1_%2").arg(winIdCounter++)
|
m_windowName = QString("MmRendererVideoWindowControl_%1_%2").arg(winIdCounter++)
|
||||||
.arg(QCoreApplication::applicationPid());
|
.arg(QCoreApplication::applicationPid());
|
||||||
|
|
||||||
|
nativeInterface->setWindowProperty(window->handle(),
|
||||||
|
QStringLiteral("mmRendererWindowName"), m_windowName);
|
||||||
|
|
||||||
// Start with an invisible window. If it would be visible right away, it would be at the wrong
|
// Start with an invisible window. If it would be visible right away, it would be at the wrong
|
||||||
// position, and we can only change the position once we get the window handle.
|
// position, and we can only change the position once we get the window handle.
|
||||||
const QString videoDeviceUrl =
|
const QString videoDeviceUrl =
|
||||||
@@ -237,7 +240,7 @@ void BbVideoWindowControl::attachDisplay(mmr_context_t *context)
|
|||||||
updateSaturation();
|
updateSaturation();
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbVideoWindowControl::updateVideoPosition()
|
void MmRendererVideoWindowControl::updateVideoPosition()
|
||||||
{
|
{
|
||||||
QWindow * const window = findWindow(m_winId);
|
QWindow * const window = findWindow(m_winId);
|
||||||
if (m_context && m_videoId != -1 && window) {
|
if (m_context && m_videoId != -1 && window) {
|
||||||
@@ -303,7 +306,7 @@ void BbVideoWindowControl::updateVideoPosition()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbVideoWindowControl::updateBrightness()
|
void MmRendererVideoWindowControl::updateBrightness()
|
||||||
{
|
{
|
||||||
if (m_window != 0) {
|
if (m_window != 0) {
|
||||||
const int backendValue = m_brightness * 2.55f;
|
const int backendValue = m_brightness * 2.55f;
|
||||||
@@ -312,7 +315,7 @@ void BbVideoWindowControl::updateBrightness()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbVideoWindowControl::updateContrast()
|
void MmRendererVideoWindowControl::updateContrast()
|
||||||
{
|
{
|
||||||
if (m_window != 0) {
|
if (m_window != 0) {
|
||||||
const int backendValue = m_contrast * 1.27f;
|
const int backendValue = m_contrast * 1.27f;
|
||||||
@@ -321,7 +324,7 @@ void BbVideoWindowControl::updateContrast()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbVideoWindowControl::updateHue()
|
void MmRendererVideoWindowControl::updateHue()
|
||||||
{
|
{
|
||||||
if (m_window != 0) {
|
if (m_window != 0) {
|
||||||
const int backendValue = m_hue * 1.27f;
|
const int backendValue = m_hue * 1.27f;
|
||||||
@@ -330,7 +333,7 @@ void BbVideoWindowControl::updateHue()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbVideoWindowControl::updateSaturation()
|
void MmRendererVideoWindowControl::updateSaturation()
|
||||||
{
|
{
|
||||||
if (m_window != 0) {
|
if (m_window != 0) {
|
||||||
const int backendValue = m_saturation * 1.27f;
|
const int backendValue = m_saturation * 1.27f;
|
||||||
@@ -339,7 +342,7 @@ void BbVideoWindowControl::updateSaturation()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbVideoWindowControl::detachDisplay()
|
void MmRendererVideoWindowControl::detachDisplay()
|
||||||
{
|
{
|
||||||
if (m_context && m_videoId != -1)
|
if (m_context && m_videoId != -1)
|
||||||
mmr_output_detach(m_context, m_videoId);
|
mmr_output_detach(m_context, m_videoId);
|
||||||
@@ -355,7 +358,7 @@ void BbVideoWindowControl::detachDisplay()
|
|||||||
m_saturation = 0;
|
m_saturation = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbVideoWindowControl::setMetaData(const BbMetaData &metaData)
|
void MmRendererVideoWindowControl::setMetaData(const MmRendererMetaData &metaData)
|
||||||
{
|
{
|
||||||
m_metaData = metaData;
|
m_metaData = metaData;
|
||||||
emit nativeSizeChanged();
|
emit nativeSizeChanged();
|
||||||
@@ -364,14 +367,11 @@ void BbVideoWindowControl::setMetaData(const BbMetaData &metaData)
|
|||||||
updateVideoPosition();
|
updateVideoPosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbVideoWindowControl::bpsEventHandler(bps_event_t *event)
|
void MmRendererVideoWindowControl::screenEventHandler(const screen_event_t &screen_event)
|
||||||
{
|
{
|
||||||
if (event && bps_event_get_domain(event) == screen_get_domain()) {
|
|
||||||
const screen_event_t screen_event = screen_event_get_event(event);
|
|
||||||
|
|
||||||
int eventType;
|
int eventType;
|
||||||
if (screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_TYPE, &eventType) != 0) {
|
if (screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_TYPE, &eventType) != 0) {
|
||||||
perror("BbVideoWindowControl: Failed to query screen event type");
|
perror("MmRendererVideoWindowControl: Failed to query screen event type");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -380,14 +380,14 @@ void BbVideoWindowControl::bpsEventHandler(bps_event_t *event)
|
|||||||
|
|
||||||
screen_window_t window = 0;
|
screen_window_t window = 0;
|
||||||
if (screen_get_event_property_pv(screen_event, SCREEN_PROPERTY_WINDOW, (void**)&window) != 0) {
|
if (screen_get_event_property_pv(screen_event, SCREEN_PROPERTY_WINDOW, (void**)&window) != 0) {
|
||||||
perror("BbVideoWindowControl: Failed to query window property");
|
perror("MmRendererVideoWindowControl: Failed to query window property");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const int maxIdStrLength = 128;
|
const int maxIdStrLength = 128;
|
||||||
char idString[maxIdStrLength];
|
char idString[maxIdStrLength];
|
||||||
if (screen_get_window_property_cv(window, SCREEN_PROPERTY_ID_STRING, maxIdStrLength, idString) != 0) {
|
if (screen_get_window_property_cv(window, SCREEN_PROPERTY_ID_STRING, maxIdStrLength, idString) != 0) {
|
||||||
perror("BbVideoWindowControl: Failed to query window ID string");
|
perror("MmRendererVideoWindowControl: Failed to query window ID string");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -397,14 +397,13 @@ void BbVideoWindowControl::bpsEventHandler(bps_event_t *event)
|
|||||||
|
|
||||||
const int visibleFlag = 1;
|
const int visibleFlag = 1;
|
||||||
if (screen_set_window_property_iv(m_window, SCREEN_PROPERTY_VISIBLE, &visibleFlag) != 0) {
|
if (screen_set_window_property_iv(m_window, SCREEN_PROPERTY_VISIBLE, &visibleFlag) != 0) {
|
||||||
perror("BbVideoWindowControl: Failed to make window visible");
|
perror("MmRendererVideoWindowControl: Failed to make window visible");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QWindow *BbVideoWindowControl::findWindow(WId id) const
|
QWindow *MmRendererVideoWindowControl::findWindow(WId id) const
|
||||||
{
|
{
|
||||||
Q_FOREACH (QWindow *window, QGuiApplication::allWindows())
|
Q_FOREACH (QWindow *window, QGuiApplication::allWindows())
|
||||||
if (window->winId() == id)
|
if (window->winId() == id)
|
||||||
@@ -38,24 +38,23 @@
|
|||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#ifndef BBVIDEOWINDOWCONTROL_H
|
#ifndef MMRENDERERVIDEOWINDOWCONTROL_H
|
||||||
#define BBVIDEOWINDOWCONTROL_H
|
#define MMRENDERERVIDEOWINDOWCONTROL_H
|
||||||
|
|
||||||
#include "bbmetadata.h"
|
#include "mmrenderermetadata.h"
|
||||||
#include <qvideowindowcontrol.h>
|
#include <qvideowindowcontrol.h>
|
||||||
#include <screen/screen.h>
|
#include <screen/screen.h>
|
||||||
|
|
||||||
typedef struct mmr_context mmr_context_t;
|
typedef struct mmr_context mmr_context_t;
|
||||||
struct bps_event_t;
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
class BbVideoWindowControl : public QVideoWindowControl
|
class MmRendererVideoWindowControl : public QVideoWindowControl
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit BbVideoWindowControl(QObject *parent = 0);
|
explicit MmRendererVideoWindowControl(QObject *parent = 0);
|
||||||
~BbVideoWindowControl();
|
~MmRendererVideoWindowControl();
|
||||||
|
|
||||||
WId winId() const Q_DECL_OVERRIDE;
|
WId winId() const Q_DECL_OVERRIDE;
|
||||||
void setWinId(WId id) Q_DECL_OVERRIDE;
|
void setWinId(WId id) Q_DECL_OVERRIDE;
|
||||||
@@ -90,8 +89,8 @@ public:
|
|||||||
//
|
//
|
||||||
void detachDisplay();
|
void detachDisplay();
|
||||||
void attachDisplay(mmr_context_t *context);
|
void attachDisplay(mmr_context_t *context);
|
||||||
void setMetaData(const BbMetaData &metaData);
|
void setMetaData(const MmRendererMetaData &metaData);
|
||||||
void bpsEventHandler(bps_event_t *event);
|
void screenEventHandler(const screen_event_t &event);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QWindow *findWindow(WId id) const;
|
QWindow *findWindow(WId id) const;
|
||||||
@@ -106,7 +105,7 @@ private:
|
|||||||
QRect m_displayRect;
|
QRect m_displayRect;
|
||||||
mmr_context_t *m_context;
|
mmr_context_t *m_context;
|
||||||
bool m_fullscreen;
|
bool m_fullscreen;
|
||||||
BbMetaData m_metaData;
|
MmRendererMetaData m_metaData;
|
||||||
Qt::AspectRatioMode m_aspectRatioMode;
|
Qt::AspectRatioMode m_aspectRatioMode;
|
||||||
QString m_windowName;
|
QString m_windowName;
|
||||||
screen_window_t m_window;
|
screen_window_t m_window;
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user