summaryrefslogtreecommitdiffstats
path: root/plugins
diff options
context:
space:
mode:
authorQt Continuous Integration System <qt-info@nokia.com>2011-12-06 19:16:32 +1000
committerQt Continuous Integration System <qt-info@nokia.com>2011-12-06 19:16:32 +1000
commit21ebb6a5283d7c40e48e51b620f803c64e60bdf8 (patch)
tree6b13b232335d48e38480d43e23626cf23b5dcdc3 /plugins
parent5a25875cc648f5de03faa138e0d1b587815f8155 (diff)
parent7af47c8b6ca04ae50461d6537933e4d5c407ad7e (diff)
Merge branch 'master' of scm.dev.nokia.troll.no:qtmobility/qtm-multimedia into master-integration
* 'master' of scm.dev.nokia.troll.no:qtmobility/qtm-multimedia: Fix license header and spelling error in f7c1dda0 Fix build break caused by f7c1dda0 Fix another build break caused by a9d8bf0d Added Function to handle HW/Media Key Events to Test Player Application Fix build break caused by a9d8bf0d Code clean up in Symbian MMF backend Trap leaves in non-leaving functions Use QSymbianGraphicsSystemHelper Add EGL video rendering path on Symbian Enabled deployment of infixed binaries on Symbian
Diffstat (limited to 'plugins')
-rw-r--r--plugins/contacts/serviceactionmanager/serviceactionmanager.pro6
-rw-r--r--plugins/contacts/symbian/plugin/deploy.pri3
-rw-r--r--plugins/contacts/symbian/plugin/plugin.pro10
-rw-r--r--plugins/contacts/symbiansim/symbiansim.pro6
-rw-r--r--plugins/declarative/connectivity/connectivity.pro6
-rw-r--r--plugins/declarative/contacts/contacts.pro6
-rw-r--r--plugins/declarative/feedback/feedback.pro6
-rw-r--r--plugins/declarative/gallery/gallery.pro6
-rw-r--r--plugins/declarative/location/location.pro6
-rw-r--r--plugins/declarative/messaging/messaging.pro8
-rw-r--r--plugins/declarative/multimedia/multimedia.pro6
-rw-r--r--plugins/declarative/organizer/organizer.pro6
-rw-r--r--plugins/declarative/publishsubscribe/publishsubscribe.pro6
-rw-r--r--plugins/declarative/sensors/sensors.pro6
-rw-r--r--plugins/declarative/serviceframework/serviceframework.pro6
-rw-r--r--plugins/declarative/systeminfo/systeminfo.pro6
-rw-r--r--plugins/feedback/immersion/immersion.pro5
-rw-r--r--plugins/feedback/mmk/mmk.pro7
-rw-r--r--plugins/feedback/symbian/symbian.pro7
-rw-r--r--plugins/geoservices/nokia/nokia.pro6
-rw-r--r--plugins/landmarks/symbian_landmarks/symbian_landmarks.pro8
-rw-r--r--plugins/multimedia/m3u/m3u.pro6
-rw-r--r--plugins/multimedia/symbian/ecam/camera_s60.pri4
-rw-r--r--plugins/multimedia/symbian/ecam/ecam.pro6
-rw-r--r--plugins/multimedia/symbian/ecam/s60bitmapviewfinderrenderercontrol.cpp (renamed from plugins/multimedia/symbian/ecam/s60videorenderercontrol.cpp)27
-rw-r--r--plugins/multimedia/symbian/ecam/s60bitmapviewfinderrenderercontrol.h (renamed from plugins/multimedia/symbian/ecam/s60videorenderercontrol.h)32
-rw-r--r--plugins/multimedia/symbian/ecam/s60cameraservice.cpp91
-rw-r--r--plugins/multimedia/symbian/ecam/s60cameraservice.h42
-rw-r--r--plugins/multimedia/symbian/ecam/s60cameraviewfinderengine.cpp155
-rw-r--r--plugins/multimedia/symbian/ecam/s60cameraviewfinderengine.h5
-rw-r--r--plugins/multimedia/symbian/mmf/audiosource/s60audiocaptureservice.cpp18
-rw-r--r--plugins/multimedia/symbian/mmf/audiosource/s60audiocaptureservice.h3
-rw-r--r--plugins/multimedia/symbian/mmf/audiosource/s60audiocapturesession.cpp250
-rw-r--r--plugins/multimedia/symbian/mmf/audiosource/s60audiocapturesession.h27
-rw-r--r--plugins/multimedia/symbian/mmf/audiosource/s60audiocontainercontrol.cpp3
-rw-r--r--plugins/multimedia/symbian/mmf/audiosource/s60audiocontainercontrol.h3
-rw-r--r--plugins/multimedia/symbian/mmf/audiosource/s60audioencodercontrol.cpp32
-rw-r--r--plugins/multimedia/symbian/mmf/audiosource/s60audioencodercontrol.h2
-rw-r--r--plugins/multimedia/symbian/mmf/audiosource/s60audioendpointselector.cpp10
-rw-r--r--plugins/multimedia/symbian/mmf/audiosource/s60audioendpointselector.h11
-rw-r--r--plugins/multimedia/symbian/mmf/audiosource/s60audiomediarecordercontrol.cpp23
-rw-r--r--plugins/multimedia/symbian/mmf/audiosource/s60audiomediarecordercontrol.h12
-rw-r--r--plugins/multimedia/symbian/mmf/mediaplayer/mediaplayer_s60.pri4
-rw-r--r--plugins/multimedia/symbian/mmf/mediaplayer/s60audioplayersession.cpp220
-rw-r--r--plugins/multimedia/symbian/mmf/mediaplayer/s60audioplayersession.h53
-rw-r--r--plugins/multimedia/symbian/mmf/mediaplayer/s60mediametadataprovider.cpp34
-rw-r--r--plugins/multimedia/symbian/mmf/mediaplayer/s60mediametadataprovider.h1
-rw-r--r--plugins/multimedia/symbian/mmf/mediaplayer/s60medianetworkaccesscontrol.cpp64
-rw-r--r--plugins/multimedia/symbian/mmf/mediaplayer/s60medianetworkaccesscontrol.h29
-rw-r--r--plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayeraudioendpointselector.cpp79
-rw-r--r--plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayeraudioendpointselector.h12
-rw-r--r--plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayercontrol.cpp227
-rw-r--r--plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayercontrol.h100
-rw-r--r--plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayerservice.cpp104
-rw-r--r--plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayerservice.h10
-rw-r--r--plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayersession.cpp409
-rw-r--r--plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayersession.h35
-rw-r--r--plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayerutils.cpp (renamed from plugins/multimedia/symbian/mmf/mediaplayer/s60videooutputinterface.h)34
-rw-r--r--plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayerutils.h54
-rw-r--r--plugins/multimedia/symbian/mmf/mediaplayer/s60mediarecognizer.cpp71
-rw-r--r--plugins/multimedia/symbian/mmf/mediaplayer/s60mediarecognizer.h15
-rw-r--r--plugins/multimedia/symbian/mmf/mediaplayer/s60mediasettings.cpp125
-rw-r--r--plugins/multimedia/symbian/mmf/mediaplayer/s60mediasettings.h87
-rw-r--r--plugins/multimedia/symbian/mmf/mediaplayer/s60mediastreamcontrol.cpp55
-rw-r--r--plugins/multimedia/symbian/mmf/mediaplayer/s60mediastreamcontrol.h13
-rw-r--r--plugins/multimedia/symbian/mmf/mediaplayer/s60videoplayersession.cpp330
-rw-r--r--plugins/multimedia/symbian/mmf/mediaplayer/s60videoplayersession.h57
-rw-r--r--plugins/multimedia/symbian/mmf/mmf.pro11
-rw-r--r--plugins/multimedia/symbian/mmf/radio/s60radiotunercontrol_31.cpp60
-rw-r--r--plugins/multimedia/symbian/mmf/radio/s60radiotunercontrol_31.h22
-rw-r--r--plugins/multimedia/symbian/mmf/radio/s60radiotunercontrol_since32.cpp135
-rw-r--r--plugins/multimedia/symbian/mmf/radio/s60radiotunercontrol_since32.h16
-rw-r--r--plugins/multimedia/symbian/mmf/radio/s60radiotunerservice.cpp4
-rw-r--r--plugins/multimedia/symbian/mmf/radio/s60radiotunerservice.h2
-rw-r--r--plugins/multimedia/symbian/mmf/s60formatsupported.cpp34
-rw-r--r--plugins/multimedia/symbian/mmf/s60formatsupported.h8
-rw-r--r--plugins/multimedia/symbian/mmf/s60mediaserviceplugin.cpp7
-rw-r--r--plugins/multimedia/symbian/mmf/s60mediaserviceplugin.h3
-rw-r--r--plugins/multimedia/symbian/openmaxal/openmaxal.pro6
-rw-r--r--plugins/multimedia/symbian/videooutput/s60eglendpoint.cpp250
-rw-r--r--plugins/multimedia/symbian/videooutput/s60eglendpoint.h93
-rw-r--r--plugins/multimedia/symbian/videooutput/s60eglextensions.cpp188
-rw-r--r--plugins/multimedia/symbian/videooutput/s60eglextensions.h118
-rw-r--r--plugins/multimedia/symbian/videooutput/s60nativewindow.cpp115
-rw-r--r--plugins/multimedia/symbian/videooutput/s60nativewindow.h73
-rw-r--r--plugins/multimedia/symbian/videooutput/s60videobuffer.cpp253
-rw-r--r--plugins/multimedia/symbian/videooutput/s60videobuffer.h134
-rw-r--r--plugins/multimedia/symbian/videooutput/s60videodisplay.cpp14
-rw-r--r--plugins/multimedia/symbian/videooutput/s60videoeglrenderercontrol.cpp223
-rw-r--r--plugins/multimedia/symbian/videooutput/s60videoeglrenderercontrol.h121
-rw-r--r--plugins/multimedia/symbian/videooutput/s60videoframerate.cpp101
-rw-r--r--plugins/multimedia/symbian/videooutput/s60videoframerate.h89
-rw-r--r--plugins/multimedia/symbian/videooutput/s60videooutputfactory.cpp116
-rw-r--r--plugins/multimedia/symbian/videooutput/s60videooutputfactory.h73
-rw-r--r--plugins/multimedia/symbian/videooutput/s60videooutpututils.cpp82
-rw-r--r--plugins/multimedia/symbian/videooutput/s60videooutpututils.h3
-rw-r--r--plugins/multimedia/symbian/videooutput/s60videowidget.cpp10
-rw-r--r--plugins/multimedia/symbian/videooutput/s60videowidgetcontrol.cpp4
-rw-r--r--plugins/multimedia/symbian/videooutput/s60videowidgetdisplay.cpp4
-rw-r--r--plugins/multimedia/symbian/videooutput/s60videowindowcontrol.cpp4
-rw-r--r--plugins/multimedia/symbian/videooutput/s60videowindowdisplay.cpp6
-rw-r--r--plugins/multimedia/symbian/videooutput/videooutput.pri85
-rw-r--r--plugins/organizer/symbian/symbian.pro6
-rw-r--r--plugins/sensors/generic/generic.pro6
-rw-r--r--plugins/sensors/s60_sensor_api/s60_sensor_api.pro2
-rw-r--r--plugins/sensors/symbian/symbian.pro6
-rw-r--r--plugins/versit/backuphandler/backuphandler.pro6
-rw-r--r--plugins/versit/symbian/versitplugins/cntversitfavoriteplugin/cntversitfavoriteplugin.pro6
-rw-r--r--plugins/versit/symbian/versitplugins/cntversitlandlineplugin/cntversitlandlineplugin.pro6
-rw-r--r--plugins/versit/symbian/versitplugins/cntversitmycardplugin/cntversitmycardplugin.pro6
-rw-r--r--plugins/versit/symbian/versitplugins/cntversitprefplugin/cntversitprefplugin.pro6
-rw-r--r--plugins/versit/vcardpreserver/vcardpreserver.pro6
112 files changed, 3411 insertions, 2228 deletions
diff --git a/plugins/contacts/serviceactionmanager/serviceactionmanager.pro b/plugins/contacts/serviceactionmanager/serviceactionmanager.pro
index 4310513498..9d210da8ed 100644
--- a/plugins/contacts/serviceactionmanager/serviceactionmanager.pro
+++ b/plugins/contacts/serviceactionmanager/serviceactionmanager.pro
@@ -1,6 +1,8 @@
+include(../../../features/utils.pri)
+
TEMPLATE = lib
CONFIG += plugin
-TARGET = $$qtLibraryTarget(qtcontacts_serviceactionmanager)
+TARGET = $$mobilityPluginTarget(qtcontacts_serviceactionmanager)
PLUGIN_TYPE=contacts
include(../../../common.pri)
@@ -19,7 +21,7 @@ MOBILITY = contacts serviceframework
symbian: {
TARGET.CAPABILITY = ALL -TCB
TARGET.EPOCALLOWDLLDATA = 1
- TARGET.UID3=0x200315FD
+ TARGET.UID3 = $$mobilityUID(0x200315FD)
target.path = /sys/bin
INSTALLS += target
diff --git a/plugins/contacts/symbian/plugin/deploy.pri b/plugins/contacts/symbian/plugin/deploy.pri
deleted file mode 100644
index 365979cd3a..0000000000
--- a/plugins/contacts/symbian/plugin/deploy.pri
+++ /dev/null
@@ -1,3 +0,0 @@
-PUBLIC_HEADERS += inc/cntbackendsdefs.h
-CONFIG += middleware
-include(../../../../features/deploy.pri) \ No newline at end of file
diff --git a/plugins/contacts/symbian/plugin/plugin.pro b/plugins/contacts/symbian/plugin/plugin.pro
index f7d8877e07..d7996927e9 100644
--- a/plugins/contacts/symbian/plugin/plugin.pro
+++ b/plugins/contacts/symbian/plugin/plugin.pro
@@ -1,16 +1,20 @@
+include(../../../../features/utils.pri)
+
TEMPLATE = lib
CONFIG += plugin
-TARGET = $$qtLibraryTarget(qtcontacts_symbian)
+TARGET = qtcontacts_symbian
PLUGIN_TYPE=contacts
include(symbian_defines.pri)
-include(deploy.pri)
+PUBLIC_HEADERS += inc/cntbackendsdefs.h
+CONFIG += middleware
+include(../../../../features/deploy.pri)
symbian: {
load(data_caging_paths)
TARGET.CAPABILITY = ALL -TCB
TARGET.EPOCALLOWDLLDATA = 1
- TARGET.UID3 = 0x2002AC7B
+ TARGET.UID3 = $$mobilityUID(0x2002AC7B)
INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
diff --git a/plugins/contacts/symbiansim/symbiansim.pro b/plugins/contacts/symbiansim/symbiansim.pro
index 456600f206..062e3584f1 100644
--- a/plugins/contacts/symbiansim/symbiansim.pro
+++ b/plugins/contacts/symbiansim/symbiansim.pro
@@ -4,9 +4,11 @@
#
######################################################################
+include(../../../features/utils.pri)
+
TEMPLATE = lib
CONFIG += plugin
-TARGET = $$qtLibraryTarget(qtcontacts_symbiansim)
+TARGET = $$mobilityPluginTarget(qtcontacts_symbiansim)
PLUGIN_TYPE=contacts
include(../../../common.pri)
@@ -17,7 +19,7 @@ symbian: {
TARGET.CAPABILITY = ALL -TCB
TARGET.EPOCALLOWDLLDATA = 1
- TARGET.UID3 = 0x2002AC85
+ TARGET.UID3 = $$mobilityUID(0x2002AC85)
INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
diff --git a/plugins/declarative/connectivity/connectivity.pro b/plugins/declarative/connectivity/connectivity.pro
index f5bba29f1b..be49e009e7 100644
--- a/plugins/declarative/connectivity/connectivity.pro
+++ b/plugins/declarative/connectivity/connectivity.pro
@@ -1,3 +1,5 @@
+include(../../../features/utils.pri)
+
INCLUDEPATH += . \
../../../src/global \
../../../include \
@@ -7,7 +9,7 @@ INCLUDEPATH += . \
DEPENDPATH += ../../../src/connectivity
-TARGET = $$qtLibraryTarget(declarative_connectivity)
+TARGET = $$mobilityPluginTarget(declarative_connectivity)
TARGETPATH = QtMobility/connectivity
TEMPLATE = lib
@@ -64,7 +66,7 @@ symbian {
# Allow writable DLL data
TARGET.EPOCALLOWDLLDATA = 1
# Target UID, makes every Symbian app unique
-# TARGET.UID3 = 0x20021325
+# TARGET.UID3 = $$mobilityUID(0x20021325)
# Specifies what files shall be deployed: the plugin itself and the qmldir file.
importFiles.sources = $$DESTDIR/declarative_connectivity$${QT_LIBINFIX}.dll qmldir
importFiles.path = $$QT_IMPORTS_BASE_DIR/$$TARGETPATH
diff --git a/plugins/declarative/contacts/contacts.pro b/plugins/declarative/contacts/contacts.pro
index 721d79e79e..12f2a7606a 100644
--- a/plugins/declarative/contacts/contacts.pro
+++ b/plugins/declarative/contacts/contacts.pro
@@ -1,3 +1,5 @@
+include(../../../features/utils.pri)
+
INCLUDEPATH += . \
../../../src/global \
../../../include \
@@ -10,7 +12,7 @@ DEPENDPATH += ../../../src/contacts
TEMPLATE = lib
CONFIG += plugin
-TARGET = $$qtLibraryTarget(declarative_contacts)
+TARGET = $$mobilityPluginTarget(declarative_contacts)
TARGETPATH = QtMobility/contacts
DEFINES += QT_MAKEDLL
PLUGIN_TYPE = declarative
@@ -67,7 +69,7 @@ symbian {
# Allow writable DLL data
TARGET.EPOCALLOWDLLDATA = 1
# Target UID, makes every Symbian app unique
- TARGET.UID3 = 0x20021325
+ TARGET.UID3 = $$mobilityUID(0x20021325)
# Specifies what files shall be deployed: the plugin itself and the qmldir file.
importFiles.sources = $$DESTDIR/declarative_contacts$${QT_LIBINFIX}.dll qmldir
importFiles.path = $$QT_IMPORTS_BASE_DIR/$$TARGETPATH
diff --git a/plugins/declarative/feedback/feedback.pro b/plugins/declarative/feedback/feedback.pro
index e8cdddc76e..a843d7703c 100644
--- a/plugins/declarative/feedback/feedback.pro
+++ b/plugins/declarative/feedback/feedback.pro
@@ -1,9 +1,11 @@
+include(../../../features/utils.pri)
+
INCLUDEPATH += ../../../src/feedback
INCLUDEPATH += ../../../src/global
TEMPLATE = lib
CONFIG += plugin
-TARGET = $$qtLibraryTarget(declarative_feedback)
+TARGET = $$mobilityPluginTarget(declarative_feedback)
TARGETPATH = QtMobility/feedback
PLUGIN_TYPE = declarative
include(../../../common.pri)
@@ -38,7 +40,7 @@ symbian {
# Allow writable DLL data
TARGET.EPOCALLOWDLLDATA = 1
# Target UID, makes every Symbian app unique
- TARGET.UID3 = 0x200315FC
+ TARGET.UID3 = $$mobilityUID(0x200315FC)
# Specifies what files shall be deployed: the plugin itself and the qmldir file.
importFiles.sources = $$DESTDIR/declarative_feedback$${QT_LIBINFIX}.dll qmldir
importFiles.path = $$QT_IMPORTS_BASE_DIR/$$TARGETPATH
diff --git a/plugins/declarative/gallery/gallery.pro b/plugins/declarative/gallery/gallery.pro
index 4e015fd988..159c44201b 100644
--- a/plugins/declarative/gallery/gallery.pro
+++ b/plugins/declarative/gallery/gallery.pro
@@ -1,3 +1,5 @@
+include(../../../features/utils.pri)
+
DEPENDPATH += .
INCLUDEPATH += . \
../../../include \
@@ -5,7 +7,7 @@ INCLUDEPATH += . \
TEMPLATE = lib
CONFIG += plugin
-TARGET = $$qtLibraryTarget(declarative_gallery)
+TARGET = $$mobilityPluginTarget(declarative_gallery)
TARGETPATH = QtMobility/gallery
PLUGIN_TYPE = declarative
@@ -46,7 +48,7 @@ symbian {
# Allow writable DLL data
TARGET.EPOCALLOWDLLDATA = 1
# Target UID, makes every Symbian app unique
- TARGET.UID3 = 0x2002BFCC
+ TARGET.UID3 = $$mobilityUID(0x2002BFCC)
# Specifies what files shall be deployed: the plugin itself and the qmldir file.
importFiles.sources = $$DESTDIR/declarative_gallery$${QT_LIBINFIX}.dll qmldir
importFiles.path = $$QT_IMPORTS_BASE_DIR/$$TARGETPATH
diff --git a/plugins/declarative/location/location.pro b/plugins/declarative/location/location.pro
index 6378258926..445200b4a3 100644
--- a/plugins/declarative/location/location.pro
+++ b/plugins/declarative/location/location.pro
@@ -1,6 +1,8 @@
+include(../../../features/utils.pri)
+
TEMPLATE = lib
CONFIG += qt plugin mobility
-TARGET = $$qtLibraryTarget(declarative_location)
+TARGET = $$mobilityPluginTarget(declarative_location)
MOBILITY += location
PLUGIN_TYPE = declarative
QT += declarative network
@@ -104,7 +106,7 @@ symbian {
# Allow writable DLL data
TARGET.EPOCALLOWDLLDATA = 1
# Target UID, makes every Symbian app unique
- TARGET.UID3 = 0x20033007
+ TARGET.UID3 = $$mobilityUID(0x20033007)
# Specifies what files shall be deployed: the plugin itself and the qmldir file.
importFiles.sources = $$DESTDIR/declarative_location$${QT_LIBINFIX}.dll qmldir
importFiles.path = $$QT_IMPORTS_BASE_DIR/$$TARGETPATH
diff --git a/plugins/declarative/messaging/messaging.pro b/plugins/declarative/messaging/messaging.pro
index 5cc7c96dbc..faac908357 100644
--- a/plugins/declarative/messaging/messaging.pro
+++ b/plugins/declarative/messaging/messaging.pro
@@ -1,9 +1,11 @@
+include(../../../features/utils.pri)
+
INCLUDEPATH += ../../../src/messaging
INCLUDEPATH += ../../../src/global
TEMPLATE = lib
CONFIG += plugin
-TARGET = $$qtLibraryTarget(declarative_messaging)
+TARGET = $$mobilityPluginTarget(declarative_messaging)
TARGETPATH = QtMobility/messaging
PLUGIN_TYPE = declarative
@@ -41,7 +43,7 @@ simulator|contains(qmf_enabled, yes) {
CONFIG += link_pkgconfig
PKGCONFIG += qmfclient
} else {
- LIBS += -L$$(QMF_LIBDIR) -l$$qtLibraryTarget(qmfclient)
+ LIBS += -L$$(QMF_LIBDIR) -l$$mobilityPluginTarget(qmfclient)
}
}
}
@@ -52,7 +54,7 @@ symbian {
# Allow writable DLL data
TARGET.EPOCALLOWDLLDATA = 1
# Target UID, makes every Symbian app unique
- TARGET.UID3 = 0x20031601
+ TARGET.UID3 = $$mobilityUID(0x20031601)
# Specifies what files shall be deployed: the plugin itself and the qmldir file.
importFiles.sources = $$DESTDIR/declarative_messaging$${QT_LIBINFIX}.dll qmldir
importFiles.path = $$QT_IMPORTS_BASE_DIR/$$TARGETPATH
diff --git a/plugins/declarative/multimedia/multimedia.pro b/plugins/declarative/multimedia/multimedia.pro
index a5213d5d8a..2777560467 100644
--- a/plugins/declarative/multimedia/multimedia.pro
+++ b/plugins/declarative/multimedia/multimedia.pro
@@ -1,3 +1,5 @@
+include(../../../features/utils.pri)
+
INCLUDEPATH += ../../../src/multimedia \
../../../src/multimedia/effects \
../../../src/multimedia/video
@@ -5,7 +7,7 @@ INCLUDEPATH += ../../../src/global
TEMPLATE = lib
CONFIG += plugin
-TARGET = $$qtLibraryTarget(declarative_multimedia)
+TARGET = $$mobilityPluginTarget(declarative_multimedia)
TARGETPATH = QtMultimediaKit
PLUGIN_TYPE = declarative
include(../../../common.pri)
@@ -41,7 +43,7 @@ INSTALLS += qmldir
symbian {
# In Symbian, a library should enjoy _largest_ possible capability set.
TARGET.CAPABILITY = ALL -TCB
- TARGET.UID3 = 0x20021313
+ TARGET.UID3 = $$mobilityUID(0x20021313)
TARGET.EPOCALLOWDLLDATA=1
# Specifies what files shall be deployed: the plugin itself and the qmldir file.
importFiles.sources = $$DESTDIR/declarative_multimedia$${QT_LIBINFIX}.dll qmldir
diff --git a/plugins/declarative/organizer/organizer.pro b/plugins/declarative/organizer/organizer.pro
index 34aa3f0ffd..f1742ce6c8 100644
--- a/plugins/declarative/organizer/organizer.pro
+++ b/plugins/declarative/organizer/organizer.pro
@@ -1,3 +1,5 @@
+include(../../../features/utils.pri)
+
DEPENDPATH += .
INCLUDEPATH += . \
../../../include \
@@ -11,7 +13,7 @@ INCLUDEPATH += . \
TEMPLATE = lib
CONFIG += plugin
-TARGET = $$qtLibraryTarget(declarative_organizer)
+TARGET = $$mobilityPluginTarget(declarative_organizer)
TARGETPATH = QtMobility/organizer
DEFINES += QT_MAKEDLL
PLUGIN_TYPE = declarative
@@ -67,7 +69,7 @@ symbian {
# Allow writable DLL data
TARGET.EPOCALLOWDLLDATA = 1
# Target UID, makes every Symbian app unique
- TARGET.UID3 = 0x20021326
+ TARGET.UID3 = $$mobilityUID(0x20021326)
# Specifies what files shall be deployed: the plugin itself and the qmldir file.
importFiles.sources = $$DESTDIR/declarative_organizer$${QT_LIBINFIX}.dll qmldir
importFiles.path = $$QT_IMPORTS_BASE_DIR/$$TARGETPATH
diff --git a/plugins/declarative/publishsubscribe/publishsubscribe.pro b/plugins/declarative/publishsubscribe/publishsubscribe.pro
index 37224dbb8f..63a8d88d6e 100644
--- a/plugins/declarative/publishsubscribe/publishsubscribe.pro
+++ b/plugins/declarative/publishsubscribe/publishsubscribe.pro
@@ -1,10 +1,12 @@
+include(../../../features/utils.pri)
+
INCLUDEPATH += ../../../src/publishsubscribe
DEPENDPATH += ../../../src/publishsubscribe
INCLUDEPATH += ../../../src/global
TEMPLATE = lib
CONFIG += plugin
-TARGET = $$qtLibraryTarget(declarative_publishsubscribe)
+TARGET = $$mobilityPluginTarget(declarative_publishsubscribe)
TARGETPATH = QtMobility/publishsubscribe
PLUGIN_TYPE = declarative
DEFINES += QT_MAKEDLL
@@ -41,7 +43,7 @@ symbian {
# Allow writable DLL data
TARGET.EPOCALLOWDLLDATA = 1
# Target UID, makes every Symbian app unique
- TARGET.UID3 = 0x20021322
+ TARGET.UID3 = $$mobilityUID(0x20021322)
# Specifies what files shall be deployed: the plugin itself and the qmldir file.
importFiles.sources = $$DESTDIR/declarative_publishsubscribe$${QT_LIBINFIX}.dll qmldir
importFiles.path = $$QT_IMPORTS_BASE_DIR/$$TARGETPATH
diff --git a/plugins/declarative/sensors/sensors.pro b/plugins/declarative/sensors/sensors.pro
index 996b90c846..6503b53619 100644
--- a/plugins/declarative/sensors/sensors.pro
+++ b/plugins/declarative/sensors/sensors.pro
@@ -1,9 +1,11 @@
+include(../../../features/utils.pri)
+
INCLUDEPATH += ../../../src/sensors
INCLUDEPATH += ../../../src/global
TEMPLATE = lib
CONFIG += plugin
-TARGET = $$qtLibraryTarget(declarative_sensors)
+TARGET = $$mobilityPluginTarget(declarative_sensors)
TARGETPATH = QtMobility/sensors
PLUGIN_TYPE = declarative
include(../../../common.pri)
@@ -28,7 +30,7 @@ symbian {
# Allow writable DLL data
TARGET.EPOCALLOWDLLDATA = 1
# Target UID, makes every Symbian app unique
- TARGET.UID3 = 0x20021324
+ TARGET.UID3 = $$mobilityUID(0x20021324)
# Specifies what files shall be deployed: the plugin itself and the qmldir file.
importFiles.sources = $$DESTDIR/declarative_sensors$${QT_LIBINFIX}.dll qmldir
importFiles.path = $$QT_IMPORTS_BASE_DIR/$$TARGETPATH
diff --git a/plugins/declarative/serviceframework/serviceframework.pro b/plugins/declarative/serviceframework/serviceframework.pro
index da048d3e52..6bb4d75788 100644
--- a/plugins/declarative/serviceframework/serviceframework.pro
+++ b/plugins/declarative/serviceframework/serviceframework.pro
@@ -1,10 +1,12 @@
+include(../../../features/utils.pri)
+
INCLUDEPATH += ../../../src/serviceframework
INCLUDEPATH += ../../../src/global
INCLUDEPATH += .
TEMPLATE = lib
CONFIG += qt plugin
-TARGET = $$qtLibraryTarget(declarative_serviceframework)
+TARGET = $$mobilityPluginTarget(declarative_serviceframework)
TARGETPATH = QtMobility/serviceframework
PLUGIN_TYPE = declarative
include(../../../common.pri)
@@ -29,7 +31,7 @@ INSTALLS += qmldir
symbian {
TARGET.EPOCALLOWDLLDATA=1
TARGET.CAPABILITY = All -Tcb
- TARGET.UID3 = 0x20021323
+ TARGET.UID3 = $$mobilityUID(0x20021323)
load(armcc_warnings)
# Specifies what files shall be deployed: the plugin itself and the qmldir file.
importFiles.sources = $$DESTDIR/declarative_serviceframework$${QT_LIBINFIX}.dll qmldir
diff --git a/plugins/declarative/systeminfo/systeminfo.pro b/plugins/declarative/systeminfo/systeminfo.pro
index a567acad01..4d98fdfc7e 100644
--- a/plugins/declarative/systeminfo/systeminfo.pro
+++ b/plugins/declarative/systeminfo/systeminfo.pro
@@ -1,10 +1,12 @@
+include(../../../features/utils.pri)
+
INCLUDEPATH += ../../../src/systeminfo
DEPENDPATH += ../../../src/systeminfo
INCLUDEPATH += ../../../src/global
TEMPLATE = lib
CONFIG += plugin
-TARGET = $$qtLibraryTarget(declarative_systeminfo)
+TARGET = $$mobilityPluginTarget(declarative_systeminfo)
TARGETPATH = QtMobility/systeminfo
PLUGIN_TYPE = declarative
include(../../../common.pri)
@@ -45,7 +47,7 @@ symbian {
# Allow writable DLL data
TARGET.EPOCALLOWDLLDATA = 1
# Target UID, makes every Symbian app unique
- TARGET.UID3 = 0x200315F9
+ TARGET.UID3 = $$mobilityUID(0x200315F9)
# Specifies what files shall be deployed: the plugin itself and the qmldir file.
importFiles.sources = $$DESTDIR/declarative_systeminfo$${QT_LIBINFIX}.dll qmldir
importFiles.path = $$QT_IMPORTS_BASE_DIR/$$TARGETPATH
diff --git a/plugins/feedback/immersion/immersion.pro b/plugins/feedback/immersion/immersion.pro
index f16e78245d..c1adb1c075 100644
--- a/plugins/feedback/immersion/immersion.pro
+++ b/plugins/feedback/immersion/immersion.pro
@@ -1,7 +1,9 @@
+include(../../../features/utils.pri)
+
TEMPLATE = lib
CONFIG += plugin
QT = core
-TARGET = $$qtLibraryTarget(qtfeedback_immersion)
+TARGET = $$mobilityPluginTarget(qtfeedback_immersion)
PLUGIN_TYPE=feedback
include(../../../common.pri)
@@ -18,7 +20,6 @@ MOBILITY = feedback
symbian: {
TARGET.EPOCALLOWDLLDATA=1
TARGET.CAPABILITY = All -Tcb
- TARGET = $${TARGET}$${QT_LIBINFIX}
load(armcc_warnings)
target.path = /sys/bin
diff --git a/plugins/feedback/mmk/mmk.pro b/plugins/feedback/mmk/mmk.pro
index 56d68c68f8..7eb7cb3037 100644
--- a/plugins/feedback/mmk/mmk.pro
+++ b/plugins/feedback/mmk/mmk.pro
@@ -1,6 +1,8 @@
+include(../../../features/utils.pri)
+
TEMPLATE = lib
CONFIG += plugin
-TARGET = $$qtLibraryTarget(qtfeedback_mmk)
+TARGET = $$mobilityPluginTarget(qtfeedback_mmk)
PLUGIN_TYPE=feedback
include(../../../common.pri)
@@ -16,8 +18,7 @@ MOBILITY = feedback multimedia
symbian: {
TARGET.EPOCALLOWDLLDATA=1
TARGET.CAPABILITY = All -Tcb
- TARGET.UID3 = 0x200315FF
- TARGET = $${TARGET}$${QT_LIBINFIX}
+ TARGET.UID3 = $$mobilityUID(0x200315FF)
load(armcc_warnings)
target.path = /sys/bin
diff --git a/plugins/feedback/symbian/symbian.pro b/plugins/feedback/symbian/symbian.pro
index 1cd2c5c612..0de6bc5eda 100644
--- a/plugins/feedback/symbian/symbian.pro
+++ b/plugins/feedback/symbian/symbian.pro
@@ -1,6 +1,8 @@
+include(../../../features/utils.pri)
+
TEMPLATE = lib
CONFIG += plugin
-TARGET = $$qtLibraryTarget(qtfeedback_symbian)
+TARGET = $$mobilityPluginTarget(qtfeedback_symbian)
PLUGIN_TYPE=feedback
include(../../../common.pri)
@@ -48,8 +50,7 @@ symbian {
TARGET.EPOCALLOWDLLDATA=1
TARGET.CAPABILITY = All -Tcb
- TARGET.UID3=0x200315FE
- TARGET = $${TARGET}$${QT_LIBINFIX}
+ TARGET.UID3 = $$mobilityUID(0x200315FE)
load(armcc_warnings)
diff --git a/plugins/geoservices/nokia/nokia.pro b/plugins/geoservices/nokia/nokia.pro
index 1b2e050e0b..997a5ab7f2 100644
--- a/plugins/geoservices/nokia/nokia.pro
+++ b/plugins/geoservices/nokia/nokia.pro
@@ -1,6 +1,8 @@
+include(../../../features/utils.pri)
+
TEMPLATE = lib
CONFIG += plugin
-TARGET = $$qtLibraryTarget(qtgeoservices_nokia)
+TARGET = $$mobilityPluginTarget(qtgeoservices_nokia)
PLUGIN_TYPE=geoservices
include(../../../common.pri)
@@ -45,7 +47,7 @@ INCLUDEPATH += $$SOURCE_DIR/src/location \
symbian {
TARGET.EPOCALLOWDLLDATA = 1
TARGET.CAPABILITY = ALL -TCB
- TARGET.UID3 = 0x2002BFCA
+ TARGET.UID3 = $$mobilityUID(0x2002BFCA)
pluginDep.sources = $${TARGET}.dll
pluginDep.path = $${QT_PLUGINS_BASE_DIR}/$${PLUGIN_TYPE}
DEPLOYMENT += pluginDep
diff --git a/plugins/landmarks/symbian_landmarks/symbian_landmarks.pro b/plugins/landmarks/symbian_landmarks/symbian_landmarks.pro
index 8fe9284a11..2bb9b1c94b 100644
--- a/plugins/landmarks/symbian_landmarks/symbian_landmarks.pro
+++ b/plugins/landmarks/symbian_landmarks/symbian_landmarks.pro
@@ -39,15 +39,17 @@
#
##########################################################################
+include(../../../features/utils.pri)
+
TEMPLATE = lib
CONFIG += plugin
QT += core
-TARGET = $$qtLibraryTarget(qtlandmarks_symbian)
+TARGET = $$mobilityPluginTarget(qtlandmarks_symbian)
PLUGIN_TYPE=landmarks
CONFIG += mobility
MOBILITY = location
-
include(../../../common.pri)
+
include(symbian_landmarks_defines.pri)
symbian {
@@ -56,7 +58,7 @@ symbian {
INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE
TARGET.EPOCALLOWDLLDATA = 1
TARGET.CAPABILITY = ALL -TCB
- TARGET.UID3 = 0x20031E8F
+ TARGET.UID3 = $$mobilityUID(0x20031E8F)
LIBS += \
-lflogger \
diff --git a/plugins/multimedia/m3u/m3u.pro b/plugins/multimedia/m3u/m3u.pro
index e6e64b875c..227e34919a 100644
--- a/plugins/multimedia/m3u/m3u.pro
+++ b/plugins/multimedia/m3u/m3u.pro
@@ -1,6 +1,8 @@
+include (../../../features/utils.pri)
+
TEMPLATE = lib
CONFIG += plugin
-TARGET = $$qtLibraryTarget(qtmultimediakit_m3u)
+TARGET = $$mobilityPluginTarget(qtmultimediakit_m3u)
PLUGIN_TYPE=playlistformats
@@ -17,7 +19,7 @@ HEADERS += qm3uhandler.h
SOURCES += main.cpp \
qm3uhandler.cpp
symbian {
- TARGET.UID3 = 0x2002BFC7
+ TARGET.UID3 = $$mobilityUID(0x2002BFC7)
TARGET.CAPABILITY = ALL -TCB
TARGET.EPOCALLOWDLLDATA = 1
diff --git a/plugins/multimedia/symbian/ecam/camera_s60.pri b/plugins/multimedia/symbian/ecam/camera_s60.pri
index 6f7d023376..070685b9d9 100644
--- a/plugins/multimedia/symbian/ecam/camera_s60.pri
+++ b/plugins/multimedia/symbian/ecam/camera_s60.pri
@@ -131,7 +131,7 @@ HEADERS += \
$$PWD/s60cameraengine.h \
$$PWD/s60cameraviewfinderengine.h \
$$PWD/s60cameraengineobserver.h \
- $$PWD/s60videorenderercontrol.h \
+ $$PWD/s60bitmapviewfinderrenderercontrol.h \
$$PWD/s60cameracapturedestinationcontrol.h \
$$PWD/s60cameracapturebufferformatcontrol.h \
$$PWD/s60filenamegenerator.h
@@ -158,7 +158,7 @@ SOURCES += \
$$PWD/s60cameraadvsettings.cpp \
$$PWD/s60cameraengine.cpp \
$$PWD/s60cameraviewfinderengine.cpp \
- $$PWD/s60videorenderercontrol.cpp \
+ $$PWD/s60bitmapviewfinderrenderercontrol.cpp \
$$PWD/s60cameracapturedestinationcontrol.cpp \
$$PWD/s60cameracapturebufferformatcontrol.cpp \
$$PWD/s60filenamegenerator.cpp
diff --git a/plugins/multimedia/symbian/ecam/ecam.pro b/plugins/multimedia/symbian/ecam/ecam.pro
index 31f30b61cd..2706b86ed9 100644
--- a/plugins/multimedia/symbian/ecam/ecam.pro
+++ b/plugins/multimedia/symbian/ecam/ecam.pro
@@ -4,10 +4,12 @@
#
######################################################################
+include (../../../../features/utils.pri)
+
TEMPLATE = lib
CONFIG += plugin
-TARGET = $$qtLibraryTarget(qtmultimediakit_ecamengine)
+TARGET = $$mobilityPluginTarget(qtmultimediakit_ecamengine)
PLUGIN_TYPE = mediaservice
include (../../../../common.pri)
@@ -31,7 +33,7 @@ SOURCES += s60cameraserviceplugin.cpp
load(data_caging_paths)
TARGET.EPOCALLOWDLLDATA = 1
-TARGET.UID3 = 0x2002BFC2
+TARGET.UID3 = $$mobilityUID(0x2002BFC2)
TARGET.CAPABILITY = ALL -TCB
# Make a sis package from plugin + api + stub (plugin)
diff --git a/plugins/multimedia/symbian/ecam/s60videorenderercontrol.cpp b/plugins/multimedia/symbian/ecam/s60bitmapviewfinderrenderercontrol.cpp
index 3e488fe5d4..647158e199 100644
--- a/plugins/multimedia/symbian/ecam/s60videorenderercontrol.cpp
+++ b/plugins/multimedia/symbian/ecam/s60bitmapviewfinderrenderercontrol.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
@@ -41,36 +41,37 @@
#include <qabstractvideosurface.h>
-#include "s60videorenderercontrol.h"
+#include "s60bitmapviewfinderrenderercontrol.h"
-S60VideoRendererControl::S60VideoRendererControl(QObject *parent) :
+S60BitmapViewFinderRendererControl::S60BitmapViewFinderRendererControl(QObject *parent) :
QVideoRendererControl(parent),
m_surface(0)
{
}
-S60VideoRendererControl::~S60VideoRendererControl()
+S60BitmapViewFinderRendererControl::~S60BitmapViewFinderRendererControl()
{
// Stop surface if still active
if (m_surface && m_surface->isActive())
m_surface->stop();
}
-QAbstractVideoSurface *S60VideoRendererControl::surface() const
+QAbstractVideoSurface *S60BitmapViewFinderRendererControl::surface() const
{
return m_surface;
}
-void S60VideoRendererControl::setSurface(QAbstractVideoSurface *surface)
+void S60BitmapViewFinderRendererControl::setSurface(QAbstractVideoSurface *surface)
{
- if (surface == 0) {
- // Stop current surface if needed
- if (m_surface && m_surface->isActive())
- m_surface->stop();
+ if (m_surface != surface) {
+ if (surface == 0) {
+ // Stop current surface if needed
+ if (m_surface && m_surface->isActive())
+ m_surface->stop();
+ }
+ m_surface = surface;
+ emit surfaceChanged();
}
-
- m_surface = surface;
- emit viewFinderSurfaceSet();
}
// End of file
diff --git a/plugins/multimedia/symbian/ecam/s60videorenderercontrol.h b/plugins/multimedia/symbian/ecam/s60bitmapviewfinderrenderercontrol.h
index 9ef3332697..8cdd34ffba 100644
--- a/plugins/multimedia/symbian/ecam/s60videorenderercontrol.h
+++ b/plugins/multimedia/symbian/ecam/s60bitmapviewfinderrenderercontrol.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
@@ -39,38 +39,32 @@
**
****************************************************************************/
-#ifndef S60VIDEORENDERERCONTROL_H
-#define S60VIDEORENDERERCONTROL_H
+#ifndef S60BITMAPVIEWFINDERRENDERERCONTROL_H
+#define S60BITMAPVIEWFINDERRENDERERCONTROL_H
#include <qvideorenderercontrol.h>
/*
* Control for QGraphicsVideoItem. Viewfinder frames are streamed to a surface
- * which is drawn to the display by the Qt Graphics Vide Framework.
+ * which is drawn to the display by the Qt Graphics View Framework.
* VideoRendererControl uses only Bitmap Viewfinder.
*/
-class S60VideoRendererControl : public QVideoRendererControl
+class S60BitmapViewFinderRendererControl : public QVideoRendererControl
{
Q_OBJECT
+public:
+ S60BitmapViewFinderRendererControl(QObject *parent = 0);
+ virtual ~S60BitmapViewFinderRendererControl();
-public: // Constructor & Destructor
-
- S60VideoRendererControl(QObject *parent = 0);
- virtual ~S60VideoRendererControl();
-
-public: // S60VideoRendererControl
-
+ // S60VideoRendererControl
QAbstractVideoSurface *surface() const;
void setSurface(QAbstractVideoSurface *surface);
-signals: // Internal Signals
-
- void viewFinderSurfaceSet();
-
-private: // Data
+signals:
+ void surfaceChanged();
+private:
QAbstractVideoSurface *m_surface;
-
};
-#endif // S60VIDEORENDERERCONTROL_H
+#endif // S60VIEWFINDERRENDERERCONTROL_H
diff --git a/plugins/multimedia/symbian/ecam/s60cameraservice.cpp b/plugins/multimedia/symbian/ecam/s60cameraservice.cpp
index 48d977aefe..cc3c03e690 100644
--- a/plugins/multimedia/symbian/ecam/s60cameraservice.cpp
+++ b/plugins/multimedia/symbian/ecam/s60cameraservice.cpp
@@ -54,16 +54,20 @@
#include "s60mediarecordercontrol.h"
#include "s60videocapturesession.h"
#include "s60imagecapturesession.h"
-#include "s60videowidgetcontrol.h"
#include "s60mediacontainercontrol.h"
#include "s60videoencodercontrol.h"
#include "s60audioencodercontrol.h"
#include "s60imageencodercontrol.h"
#include "s60cameralockscontrol.h"
-#include "s60videorenderercontrol.h"
-#include "s60videowindowcontrol.h"
+#include "s60bitmapviewfinderrenderercontrol.h"
#include "s60cameracapturedestinationcontrol.h"
#include "s60cameracapturebufferformatcontrol.h"
+#include "s60videooutputfactory.h"
+#include "s60videowidgetcontrol.h"
+#include "s60videowindowcontrol.h"
+#ifdef VIDEOOUTPUT_GRAPHICS_SURFACES
+#include "s60videoeglrenderercontrol.h"
+#endif
#include "s60cameraviewfinderengine.h" // ViewfinderOutputType
@@ -87,13 +91,12 @@ S60CameraService::S60CameraService(QObject *parent) :
m_mediaFormat = new S60MediaContainerControl(m_videosession, this);
m_videoEncoder = new S60VideoEncoderControl(m_videosession, this);
m_audioEncoder = new S60AudioEncoderControl(m_videosession, this);
- m_viewFinderWidget = new S60VideoWidgetControl(this);
m_imageEncoderControl = new S60ImageEncoderControl(m_imagesession, this);
m_locksControl = new S60CameraLocksControl(this, m_imagesession, this);
- m_rendererControl = new S60VideoRendererControl(this);
- m_windowControl = new S60VideoWindowControl(this);
+ m_bitmapRendererControl = new S60BitmapViewFinderRendererControl(this);
m_captureDestinationControl = new S60CameraCaptureDestinationControl(m_imagesession, this);
m_bufferFormatControl = new S60CameraCaptureBufferFormatControl(m_imagesession, this);
+ m_videoOutputFactory = new S60VideoOutputFactory(this);
}
}
@@ -135,15 +138,6 @@ S60CameraService::~S60CameraService()
if (m_control)
delete m_control;
- // Delete viewfinder controls after CameraControl to be sure that
- // ViewFinder gets stopped before widget (and window) is destroyed
- if (m_viewFinderWidget)
- delete m_viewFinderWidget;
- if (m_rendererControl)
- delete m_rendererControl;
- if (m_windowControl)
- delete m_windowControl;
-
// Delete sessions
if (m_videosession)
delete m_videosession;
@@ -174,36 +168,6 @@ QMediaControl *S60CameraService::requestControl(const char *name)
if (qstrcmp(name, QCameraFlashControl_iid) == 0)
return m_flashControl;
- if (qstrcmp(name, QVideoWidgetControl_iid) == 0) {
- if (m_viewFinderWidget) {
- m_control->setVideoOutput(m_viewFinderWidget,
- S60CameraViewfinderEngine::OutputTypeVideoWidget);
- return m_viewFinderWidget;
- } else {
- return 0;
- }
- }
-
- if (qstrcmp(name, QVideoRendererControl_iid) == 0) {
- if (m_rendererControl) {
- m_control->setVideoOutput(m_rendererControl,
- S60CameraViewfinderEngine::OutputTypeRenderer);
- return m_rendererControl;
- } else {
- return 0;
- }
- }
-
- if (qstrcmp(name, QVideoWindowControl_iid) == 0) {
- if (m_windowControl) {
- m_control->setVideoOutput(m_windowControl,
- S60CameraViewfinderEngine::OutputTypeVideoWindow);
- return m_windowControl;
- } else {
- return 0;
- }
- }
-
if (qstrcmp(name, QCameraFocusControl_iid) == 0)
return m_focusControl;
@@ -228,23 +192,38 @@ QMediaControl *S60CameraService::requestControl(const char *name)
if (qstrcmp(name, QCameraCaptureBufferFormatControl_iid) == 0)
return m_bufferFormatControl;
- return 0;
+ QMediaControl *videoOutputControl = m_videoOutputFactory->requestControl(name);
+ if (!videoOutputControl && qstrcmp(name, QVideoRendererControl_iid) == 0)
+ videoOutputControl = m_bitmapRendererControl;
+ if (qobject_cast<S60VideoWidgetControl *>(videoOutputControl))
+ m_control->setVideoOutput(videoOutputControl,
+ S60CameraViewfinderEngine::OutputTypeVideoWidget);
+ else if (qobject_cast<S60VideoWindowControl *>(videoOutputControl))
+ m_control->setVideoOutput(videoOutputControl,
+ S60CameraViewfinderEngine::OutputTypeVideoWindow);
+ else if (qobject_cast<S60BitmapViewFinderRendererControl *>(videoOutputControl)
+#ifdef VIDEOOUTPUT_GRAPHICS_SURFACES
+ || qobject_cast<S60VideoEglRendererControl *>(videoOutputControl)
+#endif
+ )
+ m_control->setVideoOutput(videoOutputControl,
+ S60CameraViewfinderEngine::OutputTypeRenderer);
+ return videoOutputControl;
}
void S60CameraService::releaseControl(QMediaControl *control)
{
- if (control == 0)
- return;
-
- // Release viewfinder output
- if (control == m_viewFinderWidget)
+ if (qobject_cast<S60VideoWidgetControl *>(control))
m_control->releaseVideoOutput(S60CameraViewfinderEngine::OutputTypeVideoWidget);
-
- if (control == m_rendererControl)
- m_control->releaseVideoOutput(S60CameraViewfinderEngine::OutputTypeRenderer);
-
- if (control == m_windowControl)
+ else if (qobject_cast<S60VideoWindowControl *>(control))
m_control->releaseVideoOutput(S60CameraViewfinderEngine::OutputTypeVideoWindow);
+ else if (qobject_cast<S60BitmapViewFinderRendererControl *>(control)
+#ifdef VIDEOOUTPUT_GRAPHICS_SURFACES
+ || qobject_cast<S60VideoEglRendererControl *>(control)
+#endif
+ )
+ m_control->releaseVideoOutput(S60CameraViewfinderEngine::OutputTypeRenderer);
+ m_videoOutputFactory->releaseControl(control);
}
int S60CameraService::deviceCount()
diff --git a/plugins/multimedia/symbian/ecam/s60cameraservice.h b/plugins/multimedia/symbian/ecam/s60cameraservice.h
index 9a4d9f7e1d..f275210e7c 100644
--- a/plugins/multimedia/symbian/ecam/s60cameraservice.h
+++ b/plugins/multimedia/symbian/ecam/s60cameraservice.h
@@ -60,13 +60,12 @@ QT_FORWARD_DECLARE_CLASS(S60CameraExposureControl)
QT_FORWARD_DECLARE_CLASS(S60CameraFlashControl)
QT_FORWARD_DECLARE_CLASS(S60CameraImageProcessingControl)
QT_FORWARD_DECLARE_CLASS(S60CameraImageCaptureControl)
-QT_FORWARD_DECLARE_CLASS(S60VideoWidgetControl)
QT_FORWARD_DECLARE_CLASS(S60ImageEncoderControl)
QT_FORWARD_DECLARE_CLASS(S60CameraLocksControl)
-QT_FORWARD_DECLARE_CLASS(S60VideoRendererControl)
-QT_FORWARD_DECLARE_CLASS(S60VideoWindowControl)
+QT_FORWARD_DECLARE_CLASS(S60BitmapViewFinderRendererControl)
QT_FORWARD_DECLARE_CLASS(S60CameraCaptureDestinationControl)
QT_FORWARD_DECLARE_CLASS(S60CameraCaptureBufferFormatControl)
+QT_FORWARD_DECLARE_CLASS(S60VideoOutputFactory)
class S60CameraService : public QMediaService
{
@@ -90,26 +89,25 @@ public: // Static Device Info
private: // Data
- S60ImageCaptureSession *m_imagesession;
- S60VideoCaptureSession *m_videosession;
- S60MediaContainerControl *m_mediaFormat;
- S60VideoEncoderControl *m_videoEncoder;
- S60AudioEncoderControl *m_audioEncoder;
- S60CameraControl *m_control;
- S60VideoDeviceControl *m_videoDeviceControl;
- S60CameraFocusControl *m_focusControl;
- S60CameraExposureControl *m_exposureControl;
- S60CameraFlashControl *m_flashControl;
- S60CameraImageProcessingControl *m_imageProcessingControl;
- S60CameraImageCaptureControl *m_imageCaptureControl;
- S60MediaRecorderControl *m_media;
- S60VideoWidgetControl *m_viewFinderWidget;
- S60ImageEncoderControl *m_imageEncoderControl;
- S60CameraLocksControl *m_locksControl;
- S60VideoRendererControl *m_rendererControl;
- S60VideoWindowControl *m_windowControl;
- S60CameraCaptureDestinationControl *m_captureDestinationControl;
+ S60ImageCaptureSession *m_imagesession;
+ S60VideoCaptureSession *m_videosession;
+ S60MediaContainerControl *m_mediaFormat;
+ S60VideoEncoderControl *m_videoEncoder;
+ S60AudioEncoderControl *m_audioEncoder;
+ S60CameraControl *m_control;
+ S60VideoDeviceControl *m_videoDeviceControl;
+ S60CameraFocusControl *m_focusControl;
+ S60CameraExposureControl *m_exposureControl;
+ S60CameraFlashControl *m_flashControl;
+ S60CameraImageProcessingControl *m_imageProcessingControl;
+ S60CameraImageCaptureControl *m_imageCaptureControl;
+ S60MediaRecorderControl *m_media;
+ S60ImageEncoderControl *m_imageEncoderControl;
+ S60CameraLocksControl *m_locksControl;
+ S60BitmapViewFinderRendererControl *m_bitmapRendererControl;
+ S60CameraCaptureDestinationControl *m_captureDestinationControl;
S60CameraCaptureBufferFormatControl *m_bufferFormatControl;
+ S60VideoOutputFactory *m_videoOutputFactory;
};
#endif // S60CAMERASERVICE_H
diff --git a/plugins/multimedia/symbian/ecam/s60cameraviewfinderengine.cpp b/plugins/multimedia/symbian/ecam/s60cameraviewfinderengine.cpp
index eedce8df88..b5b74edd7d 100644
--- a/plugins/multimedia/symbian/ecam/s60cameraviewfinderengine.cpp
+++ b/plugins/multimedia/symbian/ecam/s60cameraviewfinderengine.cpp
@@ -50,11 +50,17 @@
#include "s60cameracontrol.h"
#include "s60videowidgetcontrol.h"
#include "s60videowidgetdisplay.h"
-#include "s60videorenderercontrol.h"
+#include "s60bitmapviewfinderrenderercontrol.h"
#include "s60videowindowcontrol.h"
#include "s60videowindowdisplay.h"
#include "s60cameraconstants.h"
+#ifdef VIDEOOUTPUT_EGL_RENDERER
+#include <QTimer>
+#include "s60nativewindow.h"
+#include "s60videoeglrenderercontrol.h"
+#endif
+
#include <coemain.h> // CCoeEnv
#include <coecntrl.h> // CCoeControl
#include <w32std.h>
@@ -87,7 +93,8 @@ S60CameraViewfinderEngine::S60CameraViewfinderEngine(S60CameraControl *control,
m_viewfinderType(OutputTypeNotSet),
m_viewfinderNativeType(EBitmapViewFinder), // Default type
m_isViewFinderVisible(true),
- m_vfErrorsSignalled(0)
+ m_vfErrorsSignalled(0),
+ m_dummyWindow(0)
{
m_cameraControl = control;
@@ -105,6 +112,14 @@ S60CameraViewfinderEngine::S60CameraViewfinderEngine(S60CameraControl *control,
}
// From now on it is safe to assume engine exists
+#ifdef VIDEOOUTPUT_EGL_RENDERER
+ // CCamera provides no API for starting the viewfinder (and therefore
+ // creating a viewfinder surface) without passing a native window
+ // handle. We therefore create an invisible window, pass this to
+ // CCamera and then extract from it the background surface handle.
+ m_dummyWindow = new S60NativeWindow(this);
+#endif
+
// Detect UI Rotations
connect(QApplication::desktop(), SIGNAL(resized(int)), this, SLOT(handleDesktopResize(int)));
}
@@ -216,14 +231,18 @@ void S60CameraViewfinderEngine::setVideoRendererControl(QObject *viewfinderOutpu
if (m_viewfinderOutput)
releaseControl(m_viewfinderType);
- S60VideoRendererControl* viewFinderRenderControl =
- qobject_cast<S60VideoRendererControl*>(viewfinderOutput);
+ QVideoRendererControl *rendererControl =
+ qobject_cast<QVideoRendererControl *>(viewfinderOutput);
- if (viewFinderRenderControl) {
- m_viewfinderNativeType = EBitmapViewFinder; // Always Bitmap
+ if (rendererControl) {
+ m_viewfinderNativeType = EBitmapViewFinder;
+#ifdef VIDEOOUTPUT_EGL_RENDERER
+ if (qobject_cast<S60VideoEglRendererControl *>(rendererControl))
+ m_viewfinderNativeType = EDirectScreenViewFinder;
+#endif
- connect(viewFinderRenderControl, SIGNAL(viewFinderSurfaceSet()),
- this, SLOT(rendererSurfaceSet()));
+ connect(rendererControl, SIGNAL(surfaceChanged()),
+ this, SLOT(rendererSurfaceChanged()));
m_viewfinderOutput = viewfinderOutput;
m_viewfinderType = OutputTypeRenderer;
@@ -255,8 +274,8 @@ void S60CameraViewfinderEngine::setVideoRendererControl(QObject *viewfinderOutpu
if (m_vfState == EVFIsConnectedIsStartedIsVisible)
startViewfinder(true, false);
- if (viewFinderRenderControl->surface())
- rendererSurfaceSet();
+ if (rendererControl->surface())
+ rendererSurfaceChanged();
}
}
@@ -326,6 +345,9 @@ void S60CameraViewfinderEngine::setVideoWindowControl(QObject *viewfinderOutput)
void S60CameraViewfinderEngine::releaseControl(ViewfinderOutputType type)
{
+ if (m_viewfinderType != type)
+ return;
+
if (m_vfState == EVFIsConnectedIsStartedIsVisible)
stopViewfinder(true, false);
@@ -426,17 +448,32 @@ void S60CameraViewfinderEngine::startViewfinder(bool internalStart, bool suppres
return;
if (m_viewfinderNativeType == EDirectScreenViewFinder) {
+ m_window = 0;
+ QRect extentRect;
+ QRect clipRect;
- if (RWindow *window = m_viewfinderDisplay ? m_viewfinderDisplay->windowHandle() : 0) {
- m_window = window;
- } else {
+ if (m_viewfinderDisplay) {
+ m_window = m_viewfinderDisplay->windowHandle();
+ extentRect = m_viewfinderDisplay->extentRect();
+ clipRect = m_viewfinderDisplay->clipRect();
+ }
+#ifdef VIDEOOUTPUT_EGL_RENDERER
+ else if (qobject_cast<S60VideoEglRendererControl *>(m_viewfinderOutput)) {
+ m_window = m_dummyWindow->windowHandle();
+ QSize windowSize;
+ if (m_window)
+ windowSize = QSize(m_window->Size().iWidth, m_window->Size().iHeight);
+ extentRect = QRect(QPoint(0, 0), windowSize);
+ clipRect = extentRect;
+ }
+#endif
+
+ if (!m_window) {
emit error(QCamera::CameraError, tr("Requesting window for viewfinder failed."));
qWarning("Requesting window for viewfinder failed. Viewfinder may not be visible.");
return;
}
- const QRect extentRect = m_viewfinderDisplay ? m_viewfinderDisplay->extentRect() : QRect();
- const QRect clipRect = m_viewfinderDisplay ? m_viewfinderDisplay->clipRect() : QRect();
TRect extentRectSymbian = qRect2TRect(extentRect);
TRect clipRectSymbian = qRect2TRect(clipRect);
@@ -447,6 +484,15 @@ void S60CameraViewfinderEngine::startViewfinder(bool internalStart, bool suppres
else
emit error(QCamera::CameraError, tr("Starting viewfinder failed."));
return;
+ } else {
+#ifdef VIDEOOUTPUT_EGL_RENDERER
+ if (qobject_cast<S60VideoEglRendererControl *>(m_viewfinderOutput))
+ // Temporary workaround for a bug in the BCM2727 graphics driver
+ // Without this delay, images acquired from the EGL endpoint all
+ // contain the same data, which may be a valid viewfinder frame,
+ // or may be garbage.
+ QTimer::singleShot(500, this, SLOT(setRendererNativeSurface()));
+#endif
}
m_actualViewFinderSize = QSize(extentRectSymbian.Size().iWidth, extentRectSymbian.Size().iHeight);
@@ -515,6 +561,17 @@ void S60CameraViewfinderEngine::startViewfinder(bool internalStart, bool suppres
m_viewfinderDisplay->setHasContent(true);
}
+void S60CameraViewfinderEngine::setRendererNativeSurface()
+{
+#ifdef VIDEOOUTPUT_EGL_RENDERER
+ S60VideoEglRendererControl *rendererControl =
+ qobject_cast<S60VideoEglRendererControl *>(m_viewfinderOutput);
+ const QSize windowSize(m_window->Size().iWidth, m_window->Size().iHeight);
+ rendererControl->setNativeSize(windowSize);
+ rendererControl->setNativeSurface(m_dummyWindow->nativeSurface());
+#endif
+}
+
void S60CameraViewfinderEngine::stopViewfinder(const bool internalStop, bool suppressHasContentChanged)
{
// Stop if viewfinder is started
@@ -548,6 +605,8 @@ void S60CameraViewfinderEngine::stopViewfinder(const bool internalStop, bool sup
}
}
+ m_window = 0;
+
if (m_viewfinderDisplay && !suppressHasContentChanged)
m_viewfinderDisplay->setHasContent(false);
}
@@ -606,57 +665,55 @@ void S60CameraViewfinderEngine::resetViewfinderDisplay()
}
}
-void S60CameraViewfinderEngine::rendererSurfaceSet()
+void S60CameraViewfinderEngine::rendererSurfaceChanged()
{
- S60VideoRendererControl* viewFinderRenderControl =
- qobject_cast<S60VideoRendererControl*>(m_viewfinderOutput);
+ QVideoRendererControl *rendererControl =
+ qobject_cast<QVideoRendererControl*>(m_viewfinderOutput);
+ Q_ASSERT(rendererControl);
// Reset old surface if needed
if (m_viewfinderSurface) {
handleVisibilityChange(false);
disconnect(m_viewfinderSurface);
- if (viewFinderRenderControl->surface())
- stopViewfinder(true); // Temporary stop
- else
- stopViewfinder(); // Stop for good
+ stopViewfinder(true);
m_viewfinderSize = QApplication::desktop()->screenGeometry().size();
m_viewfinderSurface = 0;
}
- // Set new surface
- m_viewfinderSurface = viewFinderRenderControl->surface();
- if (!m_viewfinderSurface)
- return;
- if (!m_viewfinderSurface->nativeResolution().isEmpty()) {
- if (m_viewfinderSurface->nativeResolution() != m_viewfinderSize)
- resetViewfinderSize(m_viewfinderSurface->nativeResolution());
- }
-
- connect(m_viewfinderSurface, SIGNAL(nativeResolutionChanged(const QSize&)),
- this, SLOT(resetViewfinderSize(QSize)));
+ m_viewfinderSurface = rendererControl->surface();
+ if (m_viewfinderSurface) {
+ // Set new surface
+ if (!m_viewfinderSurface->nativeResolution().isEmpty())
+ if (m_viewfinderSurface->nativeResolution() != m_viewfinderSize)
+ resetViewfinderSize(m_viewfinderSurface->nativeResolution());
+
+ connect(m_viewfinderSurface, SIGNAL(nativeResolutionChanged(const QSize&)),
+ this, SLOT(resetViewfinderSize(QSize)));
+
+ // Set Surface Properties
+ if (m_viewfinderSurface->supportedPixelFormats().contains(QVideoFrame::Format_RGB32))
+ m_surfaceFormat = QVideoSurfaceFormat(m_actualViewFinderSize, QVideoFrame::Format_RGB32);
+ else if (m_viewfinderSurface->supportedPixelFormats().contains(QVideoFrame::Format_ARGB32))
+ m_surfaceFormat = QVideoSurfaceFormat(m_actualViewFinderSize, QVideoFrame::Format_ARGB32);
+ else {
+ return;
+ }
+ m_surfaceFormat.setFrameRate(KViewfinderFrameRate);
+ m_surfaceFormat.setYCbCrColorSpace(QVideoSurfaceFormat::YCbCr_Undefined); // EColor16MU (compatible with EColor16MA)
+ m_surfaceFormat.setPixelAspectRatio(1,1); // PAR 1:1
- // Set Surface Properties
- if (m_viewfinderSurface->supportedPixelFormats().contains(QVideoFrame::Format_RGB32))
- m_surfaceFormat = QVideoSurfaceFormat(m_actualViewFinderSize, QVideoFrame::Format_RGB32);
- else if (m_viewfinderSurface->supportedPixelFormats().contains(QVideoFrame::Format_ARGB32))
- m_surfaceFormat = QVideoSurfaceFormat(m_actualViewFinderSize, QVideoFrame::Format_ARGB32);
- else {
- return;
+ if (qobject_cast<S60BitmapViewFinderRendererControl *>(rendererControl))
+ connect(this, SIGNAL(viewFinderFrameReady(const CFbsBitmap &)),
+ this, SLOT(viewFinderBitmapReady(const CFbsBitmap &)));
}
- m_surfaceFormat.setFrameRate(KViewfinderFrameRate);
- m_surfaceFormat.setYCbCrColorSpace(QVideoSurfaceFormat::YCbCr_Undefined); // EColor16MU (compatible with EColor16MA)
- m_surfaceFormat.setPixelAspectRatio(1,1); // PAR 1:1
-
- connect(this, SIGNAL(viewFinderFrameReady(const CFbsBitmap &)),
- this, SLOT(viewFinderBitmapReady(const CFbsBitmap &)));
-
- // Surface set, viewfinder is "visible"
- handleVisibilityChange(true);
+ handleVisibilityChange(m_viewfinderSurface != 0);
}
void S60CameraViewfinderEngine::viewFinderBitmapReady(const CFbsBitmap &bitmap)
{
+ Q_ASSERT(qobject_cast<S60BitmapViewFinderRendererControl *>(m_viewfinderOutput));
+
CFbsBitmap *bitmapPtr = const_cast<CFbsBitmap*>(&bitmap);
QPixmap pixmap = QPixmap::fromSymbianCFbsBitmap(bitmapPtr);
diff --git a/plugins/multimedia/symbian/ecam/s60cameraviewfinderengine.h b/plugins/multimedia/symbian/ecam/s60cameraviewfinderengine.h
index 5eac701eb1..005ac26714 100644
--- a/plugins/multimedia/symbian/ecam/s60cameraviewfinderengine.h
+++ b/plugins/multimedia/symbian/ecam/s60cameraviewfinderengine.h
@@ -53,6 +53,7 @@ QT_FORWARD_DECLARE_CLASS(S60CameraControl)
QT_FORWARD_DECLARE_CLASS(QAbstractVideoSurface)
QT_FORWARD_DECLARE_CLASS(QDesktopWidget)
QT_FORWARD_DECLARE_CLASS(S60VideoDisplay)
+QT_FORWARD_DECLARE_CLASS(S60NativeWindow)
// For DirectScreen ViewFinder
QT_FORWARD_DECLARE_CLASS(RWsSession)
@@ -122,7 +123,8 @@ private slots:
void handleWindowChange(RWindow *handle);
void handleDesktopResize(int screen);
void handleContentAspectRatioChange(const QSize& newSize);
- void rendererSurfaceSet();
+ void rendererSurfaceChanged();
+ void setRendererNativeSurface();
private: // Enums
@@ -171,6 +173,7 @@ private: // Data
QVideoSurfaceFormat m_surfaceFormat; // Used only by QVideoRendererControl
bool m_isViewFinderVisible;
int m_vfErrorsSignalled;
+ S60NativeWindow *m_dummyWindow;
};
#endif // S60CAMERAVIEWFINDERENGINE_H
diff --git a/plugins/multimedia/symbian/mmf/audiosource/s60audiocaptureservice.cpp b/plugins/multimedia/symbian/mmf/audiosource/s60audiocaptureservice.cpp
index 39db63de4f..d8032cc49a 100644
--- a/plugins/multimedia/symbian/mmf/audiosource/s60audiocaptureservice.cpp
+++ b/plugins/multimedia/symbian/mmf/audiosource/s60audiocaptureservice.cpp
@@ -47,15 +47,14 @@
#include "s60audiocontainercontrol.h"
#include "s60mmtrace.h"
-S60AudioCaptureService::S60AudioCaptureService(QObject *parent):
- QMediaService(parent)
+S60AudioCaptureService::S60AudioCaptureService(QObject *parent)
+ : QMediaService(parent)
{
TRACE("S60AudioCaptureService::S60AudioCaptureService" << qtThisPtr());
-
m_session = new S60AudioCaptureSession(this);
- m_encoderControl = new S60AudioEncoderControl(m_session,this);
- m_recorderControl = new S60AudioMediaRecorderControl(m_session,this);
- m_endpointSelector = new S60AudioEndpointSelector(m_session,this);
+ m_encoderControl = new S60AudioEncoderControl(m_session, this);
+ m_recorderControl = new S60AudioMediaRecorderControl(m_session, this);
+ m_endpointSelector = new S60AudioEndpointSelector(m_session, this);
m_containerControl = new S60AudioContainerControl(m_session, this);
}
@@ -67,22 +66,16 @@ S60AudioCaptureService::~S60AudioCaptureService()
QMediaControl *S60AudioCaptureService::requestControl(const char *name)
{
QMediaControl *result = 0;
-
if (qstrcmp(name,QMediaRecorderControl_iid) == 0)
result = m_recorderControl;
-
if (qstrcmp(name,QAudioEncoderControl_iid) == 0)
result = m_encoderControl;
-
if (qstrcmp(name,QAudioEndpointSelector_iid) == 0)
result = m_endpointSelector;
-
if (qstrcmp(name,QMediaContainerControl_iid) == 0)
result = m_containerControl;
-
TRACE("S60AudioCaptureService::requestControl" << qtThisPtr()
<< "name" << name << "result" << result);
-
return result;
}
@@ -90,6 +83,5 @@ void S60AudioCaptureService::releaseControl(QMediaControl *control)
{
TRACE("S60AudioCaptureService::releaseControl" << qtThisPtr()
<< "control" << control);
-
Q_UNUSED(control)
}
diff --git a/plugins/multimedia/symbian/mmf/audiosource/s60audiocaptureservice.h b/plugins/multimedia/symbian/mmf/audiosource/s60audiocaptureservice.h
index 040f97d297..3a36e7d6c8 100644
--- a/plugins/multimedia/symbian/mmf/audiosource/s60audiocaptureservice.h
+++ b/plugins/multimedia/symbian/mmf/audiosource/s60audiocaptureservice.h
@@ -43,7 +43,6 @@
#define S60AUDIOCAPTURESERVICE_H
#include <QtCore/qobject.h>
-
#include <qmediaservice.h>
QT_USE_NAMESPACE
@@ -54,7 +53,6 @@ class S60AudioMediaRecorderControl;
class S60AudioEndpointSelector;
class S60AudioContainerControl;
-
class S60AudioCaptureService : public QMediaService
{
Q_OBJECT
@@ -64,6 +62,7 @@ public:
QMediaControl *requestControl(const char *name);
void releaseControl(QMediaControl *control);
+
private:
S60AudioCaptureSession *m_session;
S60AudioEncoderControl *m_encoderControl;
diff --git a/plugins/multimedia/symbian/mmf/audiosource/s60audiocapturesession.cpp b/plugins/multimedia/symbian/mmf/audiosource/s60audiocapturesession.cpp
index a443d96de5..f653ed96f5 100644
--- a/plugins/multimedia/symbian/mmf/audiosource/s60audiocapturesession.cpp
+++ b/plugins/multimedia/symbian/mmf/audiosource/s60audiocapturesession.cpp
@@ -43,7 +43,6 @@
#include "s60mmtrace.h"
#include <QtCore/qurl.h>
#include <QDir>
-
#include <mda/common/audio.h>
#include <mda/common/resource.h>
#include <mda/client/utility.h>
@@ -60,9 +59,9 @@ const QString S60AudioCaptureSession::voiceCall("Voice Call");
const QString S60AudioCaptureSession::fmRadio("FM Radio");
#endif
-S60AudioCaptureSession::S60AudioCaptureSession(QObject *parent):
- QObject(parent)
- , m_recorderUtility(NULL)
+S60AudioCaptureSession::S60AudioCaptureSession(QObject *parent)
+ : QObject(parent)
+ , m_recorderUtility(0)
, m_captureState(ENotInitialized)
, m_controllerIdMap(QHash<QString, ControllerData>())
, m_audioCodeclist(QHash<QString, CodecData>())
@@ -71,8 +70,8 @@ S60AudioCaptureSession::S60AudioCaptureSession(QObject *parent):
{
TRACE("S60AudioCaptureSession::S60AudioCaptureSession" << qtThisPtr());
#ifdef AUDIOINPUT_ROUTING
- m_audioInput = NULL;
- m_setActiveEndPoint = FALSE;
+ m_audioInput = 0;
+ m_setActiveEndPoint = false;
m_audioEndpoint = S60AudioCaptureSession::microPhone;
#endif //AUDIOINPUT_ROUTING
TRAPD(err, initializeSessionL());
@@ -143,7 +142,6 @@ QMediaRecorder::Error S60AudioCaptureSession::fromSymbianErrorToMultimediaError(
S60AudioCaptureSession::~S60AudioCaptureSession()
{
TRACE("S60AudioCaptureSession::~S60AudioCaptureSession" << qtThisPtr());
- //stop the utility before deleting it
stop();
if (m_recorderUtility)
delete m_recorderUtility;
@@ -220,9 +218,8 @@ bool S60AudioCaptureSession::setAudioCodec(const QString &codecName)
{
TRACE("S60AudioCaptureSession::setAudioCodec" << qtThisPtr()
<< "codec" << codecName);
-
QStringList codecs = supportedAudioCodecs();
- if(codecs.contains(codecName)) {
+ if (codecs.contains(codecName)) {
m_format.setCodec(codecName);
return true;
}
@@ -233,14 +230,12 @@ bool S60AudioCaptureSession::setAudioContainer(const QString &containerMimeType)
{
TRACE("S60AudioCaptureSession::setAudioContainer" << qtThisPtr()
<< "mimeType" << containerMimeType);
-
QStringList containers = supportedAudioContainers();
- if (containerMimeType == "audio/mpeg")
- {
+ if (containerMimeType == "audio/mpeg") {
m_container = "audio/mp4";
return true;
- }
- if(containers.contains(containerMimeType)) {
+ }
+ if (containers.contains(containerMimeType)) {
m_container = containerMimeType;
return true;
}
@@ -262,11 +257,10 @@ QUrl S60AudioCaptureSession::outputLocation() const
return m_sink;
}
-bool S60AudioCaptureSession::setOutputLocation(const QUrl& sink)
+bool S60AudioCaptureSession::setOutputLocation(const QUrl &sink)
{
TRACE("S60AudioCaptureSession::setOutputLocation" << qtThisPtr()
<< "location" << sink);
-
QString filename = QDir::toNativeSeparators(sink.toString());
TPtrC16 path(reinterpret_cast<const TUint16*>(filename.utf16()));
TRAPD(err, BaflUtils::EnsurePathExistsL(m_fsSession,path));
@@ -274,7 +268,7 @@ bool S60AudioCaptureSession::setOutputLocation(const QUrl& sink)
m_sink = sink;
setError(err);
return true;
- }else {
+ } else {
setError(err);
return false;
}
@@ -284,7 +278,6 @@ qint64 S60AudioCaptureSession::position() const
{
if ((m_captureState != ERecording) || !m_recorderUtility)
return 0;
-
return m_recorderUtility->Duration().Int64() / 1000;
}
@@ -297,20 +290,21 @@ void S60AudioCaptureSession::prepareSinkL()
QDir outputDir(QDir::rootPath());
int lastImage = 0;
int fileCount = 0;
- foreach(QString fileName, outputDir.entryList(QStringList() << "recordclip_*")) {
+ foreach (QString fileName, outputDir.entryList(QStringList() << "recordclip_*")) {
int imgNumber = fileName.mid(5, fileName.size() - 9).toInt();
lastImage = qMax(lastImage, imgNumber);
if (outputDir.exists(fileName))
fileCount += 1;
}
lastImage += fileCount;
- m_sink = QUrl(QDir::toNativeSeparators(outputDir.canonicalPath() + QString("/recordclip_%1").arg(lastImage + 1, 4, 10, QLatin1Char('0'))));
+ m_sink = QUrl(QDir::toNativeSeparators(outputDir.canonicalPath()
+ + QString("/recordclip_%1").arg(lastImage + 1, 4, 10, QLatin1Char('0'))));
}
QString sink = QDir::toNativeSeparators(m_sink.toString());
TPtrC16 path(reinterpret_cast<const TUint16*>(sink.utf16()));
if (BaflUtils::FileExists(m_fsSession, path))
- BaflUtils::DeleteFile(m_fsSession, path);
+ BaflUtils::DeleteFile(m_fsSession, path);
int index = sink.lastIndexOf('.');
if (index != -1)
@@ -328,15 +322,16 @@ void S60AudioCaptureSession::record()
return;
if (m_captureState == EInitialized || m_captureState == ERecordComplete) {
- prepareSinkL();
- QString filename = m_sink.toString();
- TPtrC16 sink(reinterpret_cast<const TUint16*>(filename.utf16()));
- TUid controllerUid(TUid::Uid(m_controllerIdMap.value(m_container).controllerUid));
- TUid formatUid(TUid::Uid(m_controllerIdMap.value(m_container).destinationFormatUid));
-
- TRAPD(err,m_recorderUtility->OpenFileL(sink));
+ TRAPD(err, prepareSinkL());
+ if (!err) {
+ QString filename = m_sink.toString();
+ TPtrC16 sink(reinterpret_cast<const TUint16*>(filename.utf16()));
+ TUid controllerUid(TUid::Uid(m_controllerIdMap.value(m_container).controllerUid));
+ TUid formatUid(TUid::Uid(m_controllerIdMap.value(m_container).destinationFormatUid));
+ TRAP(err, m_recorderUtility->OpenFileL(sink));
+ }
setError(err);
- }else if (m_captureState == EPaused) {
+ } else if (m_captureState == EPaused) {
m_recorderUtility->SetPosition(m_pausedPosition);
TRAPD(error, m_recorderUtility->RecordL());
setError(error);
@@ -348,15 +343,12 @@ void S60AudioCaptureSession::record()
void S60AudioCaptureSession::mute(bool muted)
{
TRACE("S60AudioCaptureSession::mute" << qtThisPtr() << "muted" << muted);
-
if (!m_recorderUtility)
return;
-
if (muted)
m_recorderUtility->SetGain(0);
else
m_recorderUtility->SetGain(m_recorderUtility->MaxGain());
-
m_isMuted = muted;
}
@@ -371,7 +363,7 @@ void S60AudioCaptureSession::setDefaultSettings()
// Setting AMR to default format if supported
if (m_controllerIdMap.count() > 0) {
- if ( m_controllerIdMap.contains("audio/amr"))
+ if (m_controllerIdMap.contains("audio/amr"))
m_container = QString("audio/amr");
else
m_container = m_controllerIdMap.keys()[0];
@@ -383,18 +375,17 @@ void S60AudioCaptureSession::setDefaultSettings()
m_format.setFrequency(8000);
m_format.setSampleType(QAudioFormat::SignedInt);
m_format.setCodec("AMR");
- }else
+ } else {
m_format.setCodec(m_audioCodeclist.keys()[0]);
+ }
}
}
void S60AudioCaptureSession::pause()
{
TRACE("S60AudioCaptureSession::pause" << qtThisPtr());
-
if (!m_recorderUtility)
return;
-
m_pausedPosition = m_recorderUtility->Position();
m_recorderUtility->Stop();
m_captureState = EPaused;
@@ -404,21 +395,15 @@ void S60AudioCaptureSession::pause()
void S60AudioCaptureSession::stop()
{
TRACE("S60AudioCaptureSession::stop" << qtThisPtr());
-
if (!m_recorderUtility)
return;
-
m_recorderUtility->Stop();
-
#ifdef AUDIOINPUT_ROUTING
- //delete audio input instance before closing the utility.
- if (m_audioInput)
- {
+ if (m_audioInput) {
delete m_audioInput;
- m_audioInput = NULL;
- }
-#endif //AUDIOINPUT_ROUTING
-
+ m_audioInput = 0;
+ }
+#endif
m_recorderUtility->Close();
m_captureState = ERecordComplete;
emit stateChanged(m_captureState);
@@ -429,28 +414,25 @@ void S60AudioCaptureSession::stop()
void S60AudioCaptureSession::initAudioInputs()
{
TRACE("S60AudioCaptureSession::initAudioInputs" << qtThisPtr());
-
m_audioInputs[S60AudioCaptureSession::microPhone] = QString("Microphone associated with the currently active speaker.");
m_audioInputs[S60AudioCaptureSession::voiceCall] = QString("Audio stream associated with the current phone call.");
m_audioInputs[S60AudioCaptureSession::fmRadio] = QString("Audio of the currently tuned FM radio station.");
}
-#endif //AUDIOINPUT_ROUTING
+#endif
void S60AudioCaptureSession::setActiveEndpoint(const QString& audioEndpoint)
{
TRACE("S60AudioCaptureSession::setActiveEndpoint" << qtThisPtr()
<< "endpoint" << audioEndpoint);
-
if (!m_audioInputs.keys().contains(audioEndpoint))
return;
-
if (activeEndpoint().compare(audioEndpoint) != 0) {
m_audioEndpoint = audioEndpoint;
#ifdef AUDIOINPUT_ROUTING
- m_setActiveEndPoint = TRUE;
+ m_setActiveEndPoint = true;
#endif
- }
+ }
}
QList<QString> S60AudioCaptureSession::availableEndpoints() const
@@ -467,13 +449,13 @@ QString S60AudioCaptureSession::endpointDescription(const QString& name) const
QString S60AudioCaptureSession::activeEndpoint() const
{
- QString inputSourceName = NULL;
+ QString inputSourceName;
#ifdef AUDIOINPUT_ROUTING
if (m_audioInput) {
CAudioInput::TAudioInputArray input = m_audioInput->AudioInput();
inputSourceName = qStringFromTAudioInputPreference(input[0]);
}
-#endif //AUDIOINPUT_ROUTING
+#endif
return inputSourceName;
}
@@ -482,17 +464,17 @@ QString S60AudioCaptureSession::defaultEndpoint() const
#ifdef AUDIOINPUT_ROUTING
return QString(S60AudioCaptureSession::microPhone);
#else
- return NULL;
+ return QString();
#endif
}
#ifdef AUDIOINPUT_ROUTING
-void S60AudioCaptureSession::doSetAudioInputL(const QString& name)
+void S60AudioCaptureSession::doSetAudioInputL(const QString &name)
{
TRACE("S60AudioCaptureSession::doSetAudioInputL" << qtThisPtr()
<< "name" << name);
- TInt err(KErrNone);
+ TInt err = KErrNone;
if (!m_recorderUtility)
return;
@@ -507,23 +489,19 @@ void S60AudioCaptureSession::doSetAudioInputL(const QString& name)
else // S60AudioCaptureSession::microPhone
input = CAudioInput::EDefaultMic;
- RArray<CAudioInput::TAudioInputPreference> inputArray;
- inputArray.Append(input);
-
- if (m_audioInput){
- TRAP(err,m_audioInput->SetAudioInputL(inputArray.Array()));
+ RArray<CAudioInput::TAudioInputPreference> inputArray;
+ inputArray.Append(input);
- if (err == KErrNone) {
- emit activeEndpointChanged(name);
- }
- else{
- setError(err);
- }
- }
- inputArray.Close();
+ if (m_audioInput){
+ TRAP(err,m_audioInput->SetAudioInputL(inputArray.Array()));
+ if (err == KErrNone)
+ emit activeEndpointChanged(name);
+ else
+ setError(err);
+ }
+ inputArray.Close();
}
-
QString S60AudioCaptureSession::qStringFromTAudioInputPreference(CAudioInput::TAudioInputPreference input) const
{
if (input == CAudioInput::EVoiceCall)
@@ -535,19 +513,16 @@ QString S60AudioCaptureSession::qStringFromTAudioInputPreference(CAudioInput::TA
}
#endif //AUDIOINPUT_ROUTING
-
void S60AudioCaptureSession::MoscoStateChangeEvent(CBase* aObject,
TInt aPreviousState, TInt aCurrentState, TInt aErrorCode)
{
TRACE("S60AudioCaptureSession::MoscoStateChangeEvent" << qtThisPtr()
<< "prevState" << aPreviousState << "currentState" << aCurrentState
<< "error" << aErrorCode);
-
if (aErrorCode==KErrNone) {
TRAPD(err, MoscoStateChangeEventL(aObject, aPreviousState, aCurrentState, NULL));
setError(err);
- }
- else {
+ } else {
setError(aErrorCode);
}
}
@@ -557,33 +532,29 @@ void S60AudioCaptureSession::MoscoStateChangeEventL(CBase* aObject,
{
if (aObject != m_recorderUtility)
return;
-
- switch(aCurrentState) {
- case CMdaAudioClipUtility::EOpen: {
- if(aPreviousState == CMdaAudioClipUtility::ENotReady) {
- applyAudioSettingsL();
- m_recorderUtility->SetGain(m_recorderUtility->MaxGain());
- TRAPD(err, m_recorderUtility->RecordL());
- setError(err);
- m_captureState = EOpenCompelete;
- emit stateChanged(m_captureState);
- }
- break;
- }
- case CMdaAudioClipUtility::ENotReady: {
- m_captureState = EInitialized;
- emit stateChanged(m_captureState);
- break;
- }
- case CMdaAudioClipUtility::ERecording: {
- m_captureState = ERecording;
+ switch(aCurrentState) {
+ case CMdaAudioClipUtility::EOpen: {
+ if (aPreviousState == CMdaAudioClipUtility::ENotReady) {
+ applyAudioSettingsL();
+ m_recorderUtility->SetGain(m_recorderUtility->MaxGain());
+ TRAPD(err, m_recorderUtility->RecordL());
+ setError(err);
+ m_captureState = EOpenCompelete;
emit stateChanged(m_captureState);
- break;
}
- default: {
- break;
- }
- }
+ break;
+ }
+ case CMdaAudioClipUtility::ENotReady:
+ m_captureState = EInitialized;
+ emit stateChanged(m_captureState);
+ break;
+ case CMdaAudioClipUtility::ERecording:
+ m_captureState = ERecording;
+ emit stateChanged(m_captureState);
+ break;
+ default:
+ break;
+ }
}
void S60AudioCaptureSession::updateAudioContainersL()
@@ -608,10 +579,10 @@ void S60AudioCaptureSession::updateAudioContainersL()
//Get all audio record controllers/formats that are supported
pluginParameters->ListImplementationsL(controllers);
- for (TInt index=0; index<controllers.Count(); index++) {
+ for (TInt index=0; index<controllers.Count(); ++index) {
const RMMFFormatImplInfoArray& recordFormats =
controllers[index]->RecordFormats();
- for (TInt j=0; j<recordFormats.Count(); j++) {
+ for (TInt j=0; j<recordFormats.Count(); ++j) {
const CDesC8Array& mimeTypes = recordFormats[j]->SupportedMimeTypes();
const CDesC8Array& fileExtensions = recordFormats[j]->SupportedFileExtensions();
TInt mimeCount = mimeTypes.Count();
@@ -622,7 +593,7 @@ void S60AudioCaptureSession::updateAudioContainersL()
TPtrC8 mimeType = mimeTypes[0];
QString type = QString::fromUtf8((char *)mimeType.Ptr(), mimeType.Length());
- if (type != "audio/basic") {
+ if (type != "audio/basic") {
ControllerData data;
data.controllerUid = controllers[index]->Uid().iUid;
data.destinationFormatUid = recordFormats[j]->Uid().iUid;
@@ -640,66 +611,58 @@ void S60AudioCaptureSession::updateAudioContainersL()
void S60AudioCaptureSession::retrieveSupportedAudioSampleRatesL()
{
- if (!m_recorderUtility) {
+ if (!m_recorderUtility)
return;
- }
-
m_supportedSampleRates.clear();
-
RArray<TUint> supportedSampleRates;
CleanupClosePushL(supportedSampleRates);
m_recorderUtility->GetSupportedSampleRatesL(supportedSampleRates);
- for (TInt j = 0; j < supportedSampleRates.Count(); j++ )
+ for (TInt j=0; j<supportedSampleRates.Count(); ++j)
m_supportedSampleRates.append(supportedSampleRates[j]);
-
CleanupStack::PopAndDestroy(&supportedSampleRates);
}
QList<int> S60AudioCaptureSession::supportedAudioSampleRates(const QAudioEncoderSettings &settings) const
{
QList<int> supportedSampleRates;
-
if (!settings.codec().isEmpty()) {
if (settings.codec() == "AMR")
supportedSampleRates.append(8000);
else
supportedSampleRates = m_supportedSampleRates;
- }else
+ } else {
supportedSampleRates = m_supportedSampleRates;
-
+ }
return supportedSampleRates;
}
void S60AudioCaptureSession::populateAudioCodecsDataL()
{
- if (!m_recorderUtility) {
+ if (!m_recorderUtility)
return;
- }
-
if (m_controllerIdMap.contains("audio/amr")) {
CodecData data;
data.codecDescription = QString("GSM AMR Codec");
- m_audioCodeclist[QString("AMR")]=data;
+ m_audioCodeclist[QString("AMR")] = data;
}
if (m_controllerIdMap.contains("audio/basic")) {
CodecData data;
data.fourCC = KMMFFourCCCodeALAW;
data.codecDescription = QString("Sun/Next ""Au"" audio codec");
- m_audioCodeclist[QString("AULAW")]=data;
+ m_audioCodeclist[QString("AULAW")] = data;
}
if (m_controllerIdMap.contains("audio/wav")) {
CodecData data;
data.fourCC = KMMFFourCCCodePCM16;
data.codecDescription = QString("Pulse code modulation");
- m_audioCodeclist[QString("PCM")]=data;
+ m_audioCodeclist[QString("PCM")] = data;
}
if (m_controllerIdMap.contains("audio/mp4")) {
CodecData data;
data.fourCC = KMMFFourCCCodeAAC;
data.codecDescription = QString("Advanced Audio Codec");
- m_audioCodeclist[QString("AAC")]=data;
+ m_audioCodeclist[QString("AAC")] = data;
}
-
// default samplerates
m_supportedSampleRates << 96000 << 88200 << 64000 << 48000 << 44100 << 32000 << 24000 << 22050 << 16000 << 12000 << 11025 << 8000;
}
@@ -707,7 +670,6 @@ void S60AudioCaptureSession::populateAudioCodecsDataL()
void S60AudioCaptureSession::applyAudioSettingsL()
{
TRACE("S60AudioCaptureSession::applyAudioSettingsL" << qtThisPtr());
-
if (!m_recorderUtility)
return;
@@ -715,14 +677,14 @@ void S60AudioCaptureSession::applyAudioSettingsL()
//CAudioInput needs to be re-initialized every time recording starts
if (m_audioInput) {
delete m_audioInput;
- m_audioInput = NULL;
+ m_audioInput = 0;
}
if (m_setActiveEndPoint) {
m_audioInput = CAudioInput::NewL(*m_recorderUtility);
doSetAudioInputL(m_audioEndpoint);
}
-#endif //AUDIOINPUT_ROUTING
+#endif
if (m_format.codec() == "AMR")
return;
@@ -736,29 +698,27 @@ void S60AudioCaptureSession::applyAudioSettingsL()
CleanupClosePushL(supportedDataTypes);
TRAP_IGNORE(m_recorderUtility->GetSupportedDestinationDataTypesL(supportedDataTypes));
TInt num = supportedDataTypes.Count();
- if (num > 0 ) {
+ if (num > 0) {
supportedDataTypes.SortUnsigned();
int index = supportedDataTypes.Find(fourCC.FourCC());
- if (index != KErrNotFound) {
+ if (index != KErrNotFound)
TRAP_IGNORE(m_recorderUtility->SetDestinationDataTypeL(supportedDataTypes[index]));
- }
}
supportedDataTypes.Reset();
CleanupStack::PopAndDestroy(&supportedDataTypes);
if (m_recorderUtility->DestinationSampleRateL() != m_format.frequency()) {
-
RArray<TUint> supportedSampleRates;
CleanupClosePushL(supportedSampleRates);
m_recorderUtility->GetSupportedSampleRatesL(supportedSampleRates);
- for (TInt i = 0; i < supportedSampleRates.Count(); i++ ) {
- TUint supportedSampleRate = supportedSampleRates[i];
- if (supportedSampleRate == m_format.frequency()) {
- m_recorderUtility->SetDestinationSampleRateL(m_format.frequency());
- break;
+ for (TInt i=0; i<supportedSampleRates.Count(); ++i) {
+ TUint supportedSampleRate = supportedSampleRates[i];
+ if (supportedSampleRate == m_format.frequency()) {
+ m_recorderUtility->SetDestinationSampleRateL(m_format.frequency());
+ break;
+ }
}
- }
supportedSampleRates.Reset();
CleanupStack::PopAndDestroy(&supportedSampleRates);
}
@@ -768,7 +728,7 @@ void S60AudioCaptureSession::applyAudioSettingsL()
RArray<TUint> supportedChannels;
CleanupClosePushL(supportedChannels);
m_recorderUtility->GetSupportedNumberOfChannelsL(supportedChannels);
- for (TInt l = 0; l < supportedChannels.Count(); l++ ) {
+ for (TInt l=0; l < supportedChannels.Count(); ++l) {
if (supportedChannels[l] == m_format.channels()) {
m_recorderUtility->SetDestinationNumberOfChannelsL(m_format.channels());
break;
@@ -783,7 +743,7 @@ void S60AudioCaptureSession::applyAudioSettingsL()
RArray<TUint> supportedBitRates;
CleanupClosePushL(supportedBitRates);
m_recorderUtility->GetSupportedBitRatesL(supportedBitRates);
- for (TInt l = 0; l < supportedBitRates.Count(); l++ ) {
+ for (TInt l=0; l<supportedBitRates.Count(); ++l) {
if (supportedBitRates[l] == m_audioEncoderSettings.bitRate()) {
m_recorderUtility->SetDestinationBitRateL(m_audioEncoderSettings.bitRate());
break;
@@ -798,44 +758,36 @@ void S60AudioCaptureSession::applyAudioSettingsL()
TFourCC S60AudioCaptureSession::determinePCMFormat()
{
TFourCC fourCC;
-
if (m_format.sampleSize() == 8) {
// 8 bit
switch (m_format.sampleType()) {
- case QAudioFormat::SignedInt: {
+ case QAudioFormat::SignedInt:
fourCC.Set(KMMFFourCCCodePCM8);
break;
- }
- case QAudioFormat::UnSignedInt: {
+ case QAudioFormat::UnSignedInt:
fourCC.Set(KMMFFourCCCodePCMU8);
break;
- }
case QAudioFormat::Float:
case QAudioFormat::Unknown:
- default: {
+ default:
fourCC.Set(KMMFFourCCCodePCM8);
break;
}
- }
} else if (m_format.sampleSize() == 16) {
// 16 bit
switch (m_format.sampleType()) {
- case QAudioFormat::SignedInt: {
+ case QAudioFormat::SignedInt:
fourCC.Set(m_format.byteOrder()==QAudioFormat::BigEndian?
KMMFFourCCCodePCM16B:KMMFFourCCCodePCM16);
break;
- }
- case QAudioFormat::UnSignedInt: {
+ case QAudioFormat::UnSignedInt:
fourCC.Set(m_format.byteOrder()==QAudioFormat::BigEndian?
KMMFFourCCCodePCMU16B:KMMFFourCCCodePCMU16);
break;
- }
- default: {
+ default:
fourCC.Set(KMMFFourCCCodePCM16);
break;
}
- }
}
-
return fourCC;
}
diff --git a/plugins/multimedia/symbian/mmf/audiosource/s60audiocapturesession.h b/plugins/multimedia/symbian/mmf/audiosource/s60audiocapturesession.h
index b2801470df..f1a33c2cd5 100644
--- a/plugins/multimedia/symbian/mmf/audiosource/s60audiocapturesession.h
+++ b/plugins/multimedia/symbian/mmf/audiosource/s60audiocapturesession.h
@@ -63,6 +63,7 @@
#endif //AUDIOINPUT_ROUTING
QT_BEGIN_NAMESPACE
+
struct ControllerData
{
int controllerUid;
@@ -76,19 +77,19 @@ struct CodecData
TFourCC fourCC;
QString codecDescription;
};
+
QT_END_NAMESPACE
QT_USE_NAMESPACE
-class S60AudioCaptureSession : public QObject, public MMdaObjectStateChangeObserver
+class S60AudioCaptureSession : public QObject
+ , public MMdaObjectStateChangeObserver
{
Q_OBJECT
Q_PROPERTY(qint64 position READ position NOTIFY positionChanged)
Q_ENUMS(TAudioCaptureState)
public:
-
- enum TAudioCaptureState
- {
+ enum TAudioCaptureState {
ENotInitialized = 0,
EInitialized,
EOpenCompelete,
@@ -125,13 +126,14 @@ public:
QString activeEndpoint() const;
QString defaultEndpoint() const;
QList<QString> availableEndpoints() const;
- QString endpointDescription(const QString& name) const;
+ QString endpointDescription(const QString &name) const;
#ifdef AUDIOINPUT_ROUTING
static const QString microPhone;
static const QString voiceCall;
static const QString fmRadio;
-#endif //AUDIOINPUT_ROUTING
+#endif
+
private:
void initializeSessionL();
void setError(TInt aError);
@@ -143,6 +145,7 @@ private:
void applyAudioSettingsL();
TFourCC determinePCMFormat();
void setDefaultSettings();
+
// MMdaObjectStateChangeObserver
void MoscoStateChangeEvent(CBase* aObject, TInt aPreviousState,
TInt aCurrentState, TInt aErrorCode);
@@ -152,18 +155,18 @@ private:
#ifdef AUDIOINPUT_ROUTING
QString qStringFromTAudioInputPreference(CAudioInput::TAudioInputPreference input) const;
void initAudioInputs();
- void doSetAudioInputL(const QString& name);
-#endif //AUDIOINPUT_ROUTING
+ void doSetAudioInputL(const QString &name);
+#endif
public Q_SLOTS:
- void setActiveEndpoint(const QString& audioEndpoint);
-
+ void setActiveEndpoint(const QString &audioEndpoint);
Q_SIGNALS:
void stateChanged(S60AudioCaptureSession::TAudioCaptureState);
void positionChanged(qint64 position);
void error(int error, const QString &errorString);
void activeEndpointChanged(const QString &audioEndpoint);
+
private:
QString m_container;
QUrl m_sink;
@@ -182,12 +185,10 @@ private:
#ifdef AUDIOINPUT_ROUTING
bool m_setActiveEndPoint;
CAudioInput *m_audioInput;
+#endif
-#endif //AUDIOINPUT_ROUTING
QMap<QString, QString> m_audioInputs;
QString m_audioEndpoint;
-
-
};
#endif // S60AUDIOCAPTURESESSION_H
diff --git a/plugins/multimedia/symbian/mmf/audiosource/s60audiocontainercontrol.cpp b/plugins/multimedia/symbian/mmf/audiosource/s60audiocontainercontrol.cpp
index 54eec244eb..54e4774145 100644
--- a/plugins/multimedia/symbian/mmf/audiosource/s60audiocontainercontrol.cpp
+++ b/plugins/multimedia/symbian/mmf/audiosource/s60audiocontainercontrol.cpp
@@ -50,7 +50,7 @@ S60AudioContainerControl::S60AudioContainerControl(QObject *parent)
}
S60AudioContainerControl::S60AudioContainerControl(QObject *session, QObject *parent)
- : QMediaContainerControl(parent)
+ : QMediaContainerControl(parent)
{
TRACE("S60AudioContainerControl::S60AudioContainerControl" << qtThisPtr());
m_session = qobject_cast<S60AudioCaptureSession*>(session);
@@ -77,4 +77,3 @@ QString S60AudioContainerControl::containerDescription(const QString &containerM
{
return m_session->audioContainerDescription(containerMimeType);
}
-
diff --git a/plugins/multimedia/symbian/mmf/audiosource/s60audiocontainercontrol.h b/plugins/multimedia/symbian/mmf/audiosource/s60audiocontainercontrol.h
index e657b4319c..239e4728d5 100644
--- a/plugins/multimedia/symbian/mmf/audiosource/s60audiocontainercontrol.h
+++ b/plugins/multimedia/symbian/mmf/audiosource/s60audiocontainercontrol.h
@@ -45,14 +45,13 @@
#include "qmediacontainercontrol.h"
#include <QtCore/qstringlist.h>
-
QT_USE_NAMESPACE
class S60AudioCaptureSession;
class S60AudioContainerControl : public QMediaContainerControl
{
-Q_OBJECT
+ Q_OBJECT
public:
S60AudioContainerControl(QObject *parent = 0);
S60AudioContainerControl(QObject *session, QObject *parent = 0);
diff --git a/plugins/multimedia/symbian/mmf/audiosource/s60audioencodercontrol.cpp b/plugins/multimedia/symbian/mmf/audiosource/s60audioencodercontrol.cpp
index cc058fbe38..17da5c0791 100644
--- a/plugins/multimedia/symbian/mmf/audiosource/s60audioencodercontrol.cpp
+++ b/plugins/multimedia/symbian/mmf/audiosource/s60audioencodercontrol.cpp
@@ -42,14 +42,12 @@
#include "s60audioencodercontrol.h"
#include "s60audiocapturesession.h"
#include "s60mmtrace.h"
-
#include "qaudioformat.h"
S60AudioEncoderControl::S60AudioEncoderControl(QObject *session, QObject *parent)
- :QAudioEncoderControl(parent), m_quality(QtMultimediaKit::NormalQuality)
+ : QAudioEncoderControl(parent), m_quality(QtMultimediaKit::NormalQuality)
{
TRACE("S60AudioEncoderControl::S60AudioEncoderControl" << qtThisPtr());
-
m_session = qobject_cast<S60AudioCaptureSession*>(session);
QAudioFormat fmt = m_session->format();
// medium, 22050Hz mono S16
@@ -124,23 +122,19 @@ QStringList S60AudioEncoderControl::supportedEncodingOptions(const QString &code
QStringList list;
if (codec == "PCM")
list << "quality" << "channels" << "samplerate";
- return list;
+ return list;
}
QVariant S60AudioEncoderControl::encodingOption(const QString &codec, const QString &name) const
{
if (codec == "PCM") {
QAudioFormat fmt = m_session->format();
-
- if(qstrcmp(name.toLocal8Bit().constData(), "quality") == 0) {
+ if(qstrcmp(name.toLocal8Bit().constData(), "quality") == 0)
return QVariant(quality());
- }
- else if(qstrcmp(name.toLocal8Bit().constData(), "channels") == 0) {
+ else if(qstrcmp(name.toLocal8Bit().constData(), "channels") == 0)
return QVariant(fmt.channels());
- }
- else if(qstrcmp(name.toLocal8Bit().constData(), "samplerate") == 0) {
+ else if(qstrcmp(name.toLocal8Bit().constData(), "samplerate") == 0)
return QVariant(fmt.frequency());
- }
}
return QVariant();
}
@@ -150,17 +144,14 @@ void S60AudioEncoderControl::setEncodingOption(
{
TRACE("S60AudioEncoderControl::setEncodingOption" << qtThisPtr()
<< "codec" << codec << "name" << name << "value" << value);
-
if (codec == "PCM") {
QAudioFormat fmt = m_session->format();
-
- if(qstrcmp(name.toLocal8Bit().constData(), "quality") == 0) {
+ if(qstrcmp(name.toLocal8Bit().constData(), "quality") == 0)
setQuality((QtMultimediaKit::EncodingQuality)value.toInt(), fmt);
- } else if(qstrcmp(name.toLocal8Bit().constData(), "channels") == 0) {
+ else if(qstrcmp(name.toLocal8Bit().constData(), "channels") == 0)
fmt.setChannels(value.toInt());
- } else if(qstrcmp(name.toLocal8Bit().constData(), "samplerate") == 0) {
+ else if(qstrcmp(name.toLocal8Bit().constData(), "samplerate") == 0)
fmt.setFrequency(value.toInt());
- }
m_session->setFormat(fmt);
}
}
@@ -169,7 +160,6 @@ QList<int> S60AudioEncoderControl::supportedSampleRates(const QAudioEncoderSetti
{
if (continuous)
*continuous = false;
-
return m_session->supportedAudioSampleRates(settings);
}
@@ -187,17 +177,15 @@ void S60AudioEncoderControl::setAudioSettings(const QAudioEncoderSettings &setti
<< "channelCount" << settings.channelCount()
<< "sampleRate" << settings.sampleRate()
<< "quality" << settings.quality());
-
QAudioFormat fmt = m_session->format();
if (settings.encodingMode() == QtMultimediaKit::ConstantQualityEncoding) {
fmt.setCodec(settings.codec());
setQuality(settings.quality(), fmt);
- if (settings.sampleRate() > 0) {
+ if (settings.sampleRate() > 0)
fmt.setFrequency(settings.sampleRate());
- }
if (settings.channelCount() > 0)
fmt.setChannels(settings.channelCount());
- }else {
+ } else {
if (settings.sampleRate() == 8000) {
fmt.setSampleType(QAudioFormat::UnSignedInt);
fmt.setSampleSize(8);
diff --git a/plugins/multimedia/symbian/mmf/audiosource/s60audioencodercontrol.h b/plugins/multimedia/symbian/mmf/audiosource/s60audioencodercontrol.h
index df44b498df..0e77d00532 100644
--- a/plugins/multimedia/symbian/mmf/audiosource/s60audioencodercontrol.h
+++ b/plugins/multimedia/symbian/mmf/audiosource/s60audioencodercontrol.h
@@ -63,7 +63,7 @@ public:
QList<int> supportedSampleRates(const QAudioEncoderSettings &settings, bool *continuous = 0) const;
QAudioEncoderSettings audioSettings() const;
- void setAudioSettings(const QAudioEncoderSettings&);
+ void setAudioSettings(const QAudioEncoderSettings &settings);
QStringList supportedEncodingOptions(const QString &codec) const;
QVariant encodingOption(const QString &codec, const QString &name) const;
diff --git a/plugins/multimedia/symbian/mmf/audiosource/s60audioendpointselector.cpp b/plugins/multimedia/symbian/mmf/audiosource/s60audioendpointselector.cpp
index ac2b02db59..558f03ace6 100644
--- a/plugins/multimedia/symbian/mmf/audiosource/s60audioendpointselector.cpp
+++ b/plugins/multimedia/symbian/mmf/audiosource/s60audioendpointselector.cpp
@@ -46,12 +46,12 @@
#include <qaudiodeviceinfo.h>
S60AudioEndpointSelector::S60AudioEndpointSelector(QObject *session, QObject *parent)
- :QAudioEndpointSelector(parent)
+ : QAudioEndpointSelector(parent)
{
TRACE("S60AudioEndpointSelector::S60AudioEndpointSelector" << qtThisPtr());
m_session = qobject_cast<S60AudioCaptureSession*>(session);
-
- connect(m_session, SIGNAL(activeEndpointChanged(const QString &)), this, SIGNAL(activeEndpointChanged(const QString &)));
+ connect(m_session, SIGNAL(activeEndpointChanged(const QString &)),
+ this, SIGNAL(activeEndpointChanged(const QString &)));
}
S60AudioEndpointSelector::~S60AudioEndpointSelector()
@@ -64,7 +64,7 @@ QList<QString> S60AudioEndpointSelector::availableEndpoints() const
return m_session->availableEndpoints();
}
-QString S60AudioEndpointSelector::endpointDescription(const QString& name) const
+QString S60AudioEndpointSelector::endpointDescription(const QString &name) const
{
return m_session->endpointDescription(name);
}
@@ -79,7 +79,7 @@ QString S60AudioEndpointSelector::activeEndpoint() const
return m_session->activeEndpoint();
}
-void S60AudioEndpointSelector::setActiveEndpoint(const QString& name)
+void S60AudioEndpointSelector::setActiveEndpoint(const QString &name)
{
TRACE("S60AudioEndpointSelector::setActiveEndpoint" << qtThisPtr()
<< "name" << name);
diff --git a/plugins/multimedia/symbian/mmf/audiosource/s60audioendpointselector.h b/plugins/multimedia/symbian/mmf/audiosource/s60audioendpointselector.h
index f9668108bd..d565e957a4 100644
--- a/plugins/multimedia/symbian/mmf/audiosource/s60audioendpointselector.h
+++ b/plugins/multimedia/symbian/mmf/audiosource/s60audioendpointselector.h
@@ -43,7 +43,6 @@
#define S60AUDIOENDPOINTSELECTOR_H
#include <QStringList>
-
#include <qaudioendpointselector.h>
QT_USE_NAMESPACE
@@ -52,24 +51,20 @@ class S60AudioCaptureSession;
class S60AudioEndpointSelector : public QAudioEndpointSelector
{
-
-Q_OBJECT
-
+ Q_OBJECT
public:
S60AudioEndpointSelector(QObject *session, QObject *parent = 0);
~S60AudioEndpointSelector();
QList<QString> availableEndpoints() const;
- QString endpointDescription(const QString& name) const;
+ QString endpointDescription(const QString &name) const;
QString defaultEndpoint() const;
QString activeEndpoint() const;
-
public Q_SLOTS:
- void setActiveEndpoint(const QString& name);
+ void setActiveEndpoint(const QString &name);
private:
-
S60AudioCaptureSession* m_session;
};
diff --git a/plugins/multimedia/symbian/mmf/audiosource/s60audiomediarecordercontrol.cpp b/plugins/multimedia/symbian/mmf/audiosource/s60audiomediarecordercontrol.cpp
index 2c7c96e78e..a473a12d9c 100644
--- a/plugins/multimedia/symbian/mmf/audiosource/s60audiomediarecordercontrol.cpp
+++ b/plugins/multimedia/symbian/mmf/audiosource/s60audiomediarecordercontrol.cpp
@@ -44,14 +44,16 @@
#include "s60mmtrace.h"
S60AudioMediaRecorderControl::S60AudioMediaRecorderControl(QObject *session, QObject *parent)
- :QMediaRecorderControl(parent), m_state(QMediaRecorder::StoppedState)
+ : QMediaRecorderControl(parent), m_state(QMediaRecorder::StoppedState)
{
TRACE("S60AudioMediaRecorderControl::S60AudioMediaRecorderControl" << qtThisPtr());
-
m_session = qobject_cast<S60AudioCaptureSession*>(session);
- connect(m_session, SIGNAL(positionChanged(qint64)), this, SIGNAL(durationChanged(qint64)));
- connect(m_session, SIGNAL(stateChanged(S60AudioCaptureSession::TAudioCaptureState)), this, SLOT(updateState(S60AudioCaptureSession::TAudioCaptureState)));
- connect(m_session,SIGNAL(error(int,const QString &)),this,SIGNAL(error(int,const QString &)));
+ connect(m_session, SIGNAL(positionChanged(qint64)),
+ this, SIGNAL(durationChanged(qint64)));
+ connect(m_session, SIGNAL(stateChanged(S60AudioCaptureSession::TAudioCaptureState)),
+ this, SLOT(updateState(S60AudioCaptureSession::TAudioCaptureState)));
+ connect(m_session,SIGNAL(error(int, const QString &)),
+ this, SIGNAL(error(int, const QString &)));
}
S60AudioMediaRecorderControl::~S60AudioMediaRecorderControl()
@@ -64,11 +66,10 @@ QUrl S60AudioMediaRecorderControl::outputLocation() const
return m_session->outputLocation();
}
-bool S60AudioMediaRecorderControl::setOutputLocation(const QUrl& sink)
+bool S60AudioMediaRecorderControl::setOutputLocation(const QUrl &sink)
{
TRACE("S60AudioMediaRecorderControl::setOutputLocation" << qtThisPtr()
<< "sink" << sink);
-
return m_session->setOutputLocation(sink);
}
@@ -116,21 +117,18 @@ qint64 S60AudioMediaRecorderControl::duration() const
void S60AudioMediaRecorderControl::record()
{
TRACE("S60AudioMediaRecorderControl::record" << qtThisPtr());
-
m_session->record();
}
void S60AudioMediaRecorderControl::pause()
{
TRACE("S60AudioMediaRecorderControl::pause" << qtThisPtr());
-
m_session->pause();
}
void S60AudioMediaRecorderControl::stop()
{
TRACE("S60AudioMediaRecorderControl::stop" << qtThisPtr());
-
m_session->stop();
}
@@ -139,6 +137,11 @@ bool S60AudioMediaRecorderControl::isMuted() const
return m_session->muted();
}
+void S60AudioMediaRecorderControl::applySettings()
+{
+
+}
+
void S60AudioMediaRecorderControl::setMuted(bool muted)
{
if (muted != isMuted()) {
diff --git a/plugins/multimedia/symbian/mmf/audiosource/s60audiomediarecordercontrol.h b/plugins/multimedia/symbian/mmf/audiosource/s60audiomediarecordercontrol.h
index 1312050caa..d766111028 100644
--- a/plugins/multimedia/symbian/mmf/audiosource/s60audiomediarecordercontrol.h
+++ b/plugins/multimedia/symbian/mmf/audiosource/s60audiomediarecordercontrol.h
@@ -44,33 +44,25 @@
#include <QtCore/qobject.h>
#include <QUrl>
-
#include "qmediarecorder.h"
#include "qmediarecordercontrol.h"
-
#include "s60audiocapturesession.h"
QT_USE_NAMESPACE
-//class S60AudioCaptureSession;
-
class S60AudioMediaRecorderControl : public QMediaRecorderControl
{
Q_OBJECT
public:
- S60AudioMediaRecorderControl(QObject *session,QObject *parent = 0);
+ S60AudioMediaRecorderControl(QObject *session, QObject *parent = 0);
~S60AudioMediaRecorderControl();
QUrl outputLocation() const;
bool setOutputLocation(const QUrl &sink);
-
QMediaRecorder::State state() const;
-
qint64 duration() const;
-
bool isMuted() const;
-
- void applySettings() {}
+ void applySettings();
private:
QMediaRecorder::State convertState(S60AudioCaptureSession::TAudioCaptureState aState) const;
diff --git a/plugins/multimedia/symbian/mmf/mediaplayer/mediaplayer_s60.pri b/plugins/multimedia/symbian/mmf/mediaplayer/mediaplayer_s60.pri
index aef2145bd4..6786f1a2be 100644
--- a/plugins/multimedia/symbian/mmf/mediaplayer/mediaplayer_s60.pri
+++ b/plugins/multimedia/symbian/mmf/mediaplayer/mediaplayer_s60.pri
@@ -35,6 +35,8 @@ HEADERS += \
$$PWD/s60mediarecognizer.h \
$$PWD/s60audioplayersession.h \
$$PWD/s60mediaplayeraudioendpointselector.h \
+ $$PWD/s60mediaplayerutils.h \
+ $$PWD/s60mediasettings.h \
$$PWD/s60mediastreamcontrol.h \
$$PWD/s60medianetworkaccesscontrol.h
@@ -47,6 +49,8 @@ SOURCES += \
$$PWD/s60mediarecognizer.cpp \
$$PWD/s60audioplayersession.cpp \
$$PWD/s60mediaplayeraudioendpointselector.cpp \
+ $$PWD/s60mediaplayerutils.cpp \
+ $$PWD/s60mediasettings.cpp \
$$PWD/s60mediastreamcontrol.cpp \
$$PWD/s60medianetworkaccesscontrol.cpp
diff --git a/plugins/multimedia/symbian/mmf/mediaplayer/s60audioplayersession.cpp b/plugins/multimedia/symbian/mmf/mediaplayer/s60audioplayersession.cpp
index 82125da719..caa9384ec5 100644
--- a/plugins/multimedia/symbian/mmf/mediaplayer/s60audioplayersession.cpp
+++ b/plugins/multimedia/symbian/mmf/mediaplayer/s60audioplayersession.cpp
@@ -41,15 +41,6 @@
#include "s60audioplayersession.h"
#include "s60mmtrace.h"
-#include <QtCore/qdebug.h>
-#include <QtCore/qvariant.h>
-
-/*!
- Constructs the CMdaAudioPlayerUtility object with given \a parent QObject.
-
- And Registers for Audio Loading Notifications.
-
-*/
S60AudioPlayerSession::S60AudioPlayerSession(QObject *parent)
: S60MediaPlayerSession(parent)
@@ -57,22 +48,13 @@ S60AudioPlayerSession::S60AudioPlayerSession(QObject *parent)
, m_audioEndpoint("Default")
{
TRACE("S60AudioPlayerSession::S60AudioPlayerSession" << qtThisPtr());
-
#ifdef HAS_AUDIOROUTING
m_audioOutput = 0;
-#endif //HAS_AUDIOROUTING
+#endif
QT_TRAP_THROWING(m_player = CAudioPlayer::NewL(*this, 0, EMdaPriorityPreferenceNone));
m_player->RegisterForAudioLoadingNotification(*this);
}
-
-/*!
- Destroys the CMdaAudioPlayerUtility object.
-
- And Unregister the observer.
-
-*/
-
S60AudioPlayerSession::~S60AudioPlayerSession()
{
TRACE("S60AudioPlayerSession::~S60AudioPlayerSession" << qtThisPtr());
@@ -85,12 +67,6 @@ S60AudioPlayerSession::~S60AudioPlayerSession()
delete m_player;
}
-/*!
-
- Opens the a file from \a path.
-
-*/
-
void S60AudioPlayerSession::doLoadL(const TDesC &path)
{
#ifdef HAS_AUDIOROUTING
@@ -98,27 +74,21 @@ void S60AudioPlayerSession::doLoadL(const TDesC &path)
if (m_audioOutput)
m_audioOutput->UnregisterObserver(*this);
delete m_audioOutput;
- m_audioOutput = NULL;
-#endif //HAS_AUDIOROUTING
+ m_audioOutput = 0;
+#endif
m_player->OpenFileL(path);
}
-/*!
-
- Returns the duration of the audio sample in microseconds.
-
-*/
+void S60AudioPlayerSession::doLoadUrlL(const TDesC &path)
+{
+ Q_UNUSED(path);
+}
qint64 S60AudioPlayerSession::doGetDurationL() const
{
return m_player->Duration().Int64() / qint64(1000);
}
-/*!
- * Returns the current playback position in microseconds from the start of the clip.
-
-*/
-
qint64 S60AudioPlayerSession::doGetPositionL() const
{
TTimeIntervalMicroSeconds ms = 0;
@@ -126,158 +96,85 @@ qint64 S60AudioPlayerSession::doGetPositionL() const
return ms.Int64() / qint64(1000);
}
-/*!
- Returns TRUE if Video available or else FALSE
- */
-
bool S60AudioPlayerSession::isVideoAvailable()
{
return false;
}
-/*!
- Returns TRUE if Audio available or else FALSE
- */
bool S60AudioPlayerSession::isAudioAvailable()
{
- return true; // this is a bit happy scenario, but we do emit error that we can't play
+ return true;
}
-/*!
- Starts loading Media and sets media status to Buffering.
-
- */
-
void S60AudioPlayerSession::MaloLoadingStarted()
{
TRACE("S60AudioPlayerSession::MaloLoadingStarted" << qtThisPtr());
-
buffering();
}
-
-/*!
- Indicates loading Media is completed.
-
- And sets media status to Buffered.
-
- */
-
void S60AudioPlayerSession::MaloLoadingComplete()
{
TRACE("S60AudioPlayerSession::MaloLoadingComplete" << qtThisPtr());
-
buffered();
}
-/*!
- Start or resume playing the current source.
-*/
-
void S60AudioPlayerSession::doPlay()
{
- // For some reason loading progress callback are not called on emulator
- // Same is the case with hardware. Will be fixed as part of QTMOBILITY-782.
-
- //#ifdef __WINSCW__
- buffering();
- //#endif
- m_player->Play();
- //#ifdef __WINSCW__
- buffered();
- //#endif
+ buffering();
+ m_player->Play();
+ buffered();
}
-
-/*!
- Pause playing the current source.
-*/
-
-
void S60AudioPlayerSession::doPauseL()
{
m_player->Pause();
}
-
-/*!
-
- Stop playing, and reset the play position to the beginning.
-*/
-
void S60AudioPlayerSession::doStop()
{
m_player->Stop();
}
-/*!
- Closes the current audio clip (allowing another clip to be opened)
-*/
-
void S60AudioPlayerSession::doClose()
{
#ifdef HAS_AUDIOROUTING
if (m_audioOutput) {
m_audioOutput->UnregisterObserver(*this);
delete m_audioOutput;
- m_audioOutput = NULL;
+ m_audioOutput = 0;
}
#endif
m_player->Close();
}
-/*!
-
- Changes the current playback volume to specified \a value.
-*/
-
void S60AudioPlayerSession::doSetVolumeL(int volume)
{
m_player->SetVolume(volume * m_player->MaxVolume() / 100);
}
-/*!
- Sets the current playback position to \a microSeconds from the start of the clip.
-*/
-
void S60AudioPlayerSession::doSetPositionL(qint64 microSeconds)
{
m_player->SetPosition(TTimeIntervalMicroSeconds(microSeconds));
}
-/*!
-
- Updates meta data entries in the current audio clip.
-*/
-
void S60AudioPlayerSession::updateMetaDataEntriesL()
{
metaDataEntries().clear();
int numberOfMetaDataEntries = 0;
-
- //User::LeaveIfError(m_player->GetNumberOfMetaDataEntries(numberOfMetaDataEntries));
m_player->GetNumberOfMetaDataEntries(numberOfMetaDataEntries);
-
- for (int i = 0; i < numberOfMetaDataEntries; i++) {
- CMMFMetaDataEntry *entry = NULL;
+ for (int i=0; i<numberOfMetaDataEntries; ++i) {
+ CMMFMetaDataEntry *entry = 0;
entry = m_player->GetMetaDataEntryL(i);
- metaDataEntries().insert(QString::fromUtf16(entry->Name().Ptr(), entry->Name().Length()), QString::fromUtf16(entry->Value().Ptr(), entry->Value().Length()));
+ metaDataEntries().insert(QString::fromUtf16(entry->Name().Ptr(), entry->Name().Length()),
+ QString::fromUtf16(entry->Value().Ptr(), entry->Value().Length()));
delete entry;
}
emit metaDataChanged();
}
-/*!
- Sets the playbackRate with \a rate.
-*/
-
void S60AudioPlayerSession::setPlaybackRate(qreal rate)
{
TRACE("S60AudioPlayerSession::setPlaybackRate" << qtThisPtr() << "rate" << rate);
- /*Since AudioPlayerUtility doesn't support set playback rate hence
- * setPlaybackRate emits playbackRateChanged signal for 1.0x ie normal playback.
- * For all other playBackRates it sets and emits error signal.
- */
if (rate == 1.0) {
emit playbackRateChanged(rate);
return;
@@ -287,11 +184,6 @@ void S60AudioPlayerSession::setPlaybackRate(qreal rate)
}
}
-/*!
-
- Returns the percentage of the audio clip loaded.
-*/
-
int S60AudioPlayerSession::doGetBufferStatusL() const
{
int progress = 0;
@@ -299,16 +191,6 @@ int S60AudioPlayerSession::doGetBufferStatusL() const
return progress;
}
-/*!
-
- Defines required client behaviour when an attempt to open and initialise an audio sample has completed,
- successfully or not.
-
- \a aError if KErrNone the sample is ready to play or else system wide error.
-
- \a aDuration The duration of the audio sample.
-*/
-
#ifdef S60_DRM_SUPPORTED
void S60AudioPlayerSession::MdapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& aDuration)
#else
@@ -316,15 +198,14 @@ void S60AudioPlayerSession::MapcInitComplete(TInt aError, const TTimeIntervalMic
#endif
{
TRACE("S60AudioPlayerSession::MapcInitComplete" << qtThisPtr() << "error" << aError);
-
Q_UNUSED(aDuration);
setError(aError);
if (KErrNone != aError)
return;
#ifdef HAS_AUDIOROUTING
TRAPD(err,
- m_audioOutput = CAudioOutput::NewL(*m_player);
- m_audioOutput->RegisterObserverL(*this);
+ m_audioOutput = CAudioOutput::NewL(*m_player);
+ m_audioOutput->RegisterObserverL(*this);
);
setActiveEndpoint(m_audioEndpoint);
setError(err);
@@ -333,14 +214,6 @@ void S60AudioPlayerSession::MapcInitComplete(TInt aError, const TTimeIntervalMic
loaded();
}
-/*!
- Defines required client behaviour when an attempt to playback an audio sample has completed,
- successfully or not.
-
- \a aError if KErrNone the playback completed or else system wide error.
-*/
-
-
#ifdef S60_DRM_SUPPORTED
void S60AudioPlayerSession::MdapcPlayComplete(TInt aError)
#else
@@ -348,29 +221,17 @@ void S60AudioPlayerSession::MapcPlayComplete(TInt aError)
#endif
{
TRACE("S60AudioPlayerSession::MapcPlayComplete" << qtThisPtr() << "error" << aError);
-
if (KErrNone == aError)
endOfMedia();
else
setError(aError);
}
-/*!
- Defiens which Audio End point to use.
-
- \a audioEndpoint audioEndpoint name.
-*/
-
-void S60AudioPlayerSession::doSetAudioEndpoint(const QString& audioEndpoint)
+void S60AudioPlayerSession::doSetAudioEndpoint(const QString &audioEndpoint)
{
m_audioEndpoint = audioEndpoint;
}
-/*!
-
- Returns audioEndpoint name.
-*/
-
QString S60AudioPlayerSession::activeEndpoint() const
{
QString outputName = QString("Default");
@@ -383,10 +244,6 @@ QString S60AudioPlayerSession::activeEndpoint() const
return outputName;
}
-/*!
- * Returns default Audio End point in use.
-*/
-
QString S60AudioPlayerSession::defaultEndpoint() const
{
QString outputName = QString("Default");
@@ -399,17 +256,11 @@ QString S60AudioPlayerSession::defaultEndpoint() const
return outputName;
}
-/*!
- Sets active end \a name as an Audio End point.
-*/
-
-void S60AudioPlayerSession::setActiveEndpoint(const QString& name)
+void S60AudioPlayerSession::setActiveEndpoint(const QString &name)
{
TRACE("S60AudioPlayerSession::setActiveEndpoint" << qtThisPtr() << "name" << name);
-
#ifdef HAS_AUDIOROUTING
CAudioOutput::TAudioOutputPreference output = CAudioOutput::ENoPreference;
-
if (name == QString("Default"))
output = CAudioOutput::ENoPreference;
else if (name == QString("All"))
@@ -420,7 +271,6 @@ void S60AudioPlayerSession::setActiveEndpoint(const QString& name)
output = CAudioOutput::EPrivate;
else if (name == QString("Speaker"))
output = CAudioOutput::EPublic;
-
if (m_audioOutput) {
TRAPD(err, m_audioOutput->SetAudioOutputL(output));
setError(err);
@@ -428,34 +278,17 @@ void S60AudioPlayerSession::setActiveEndpoint(const QString& name)
#endif
}
-/*!
- The default audio output has been changed.
-
- \a aAudioOutput Audio Output object.
-
- \a aNewDefault is CAudioOutput::TAudioOutputPreference.
-*/
-
-
#ifdef HAS_AUDIOROUTING
void S60AudioPlayerSession::DefaultAudioOutputChanged(CAudioOutput& aAudioOutput,
- CAudioOutput::TAudioOutputPreference aNewDefault)
+ CAudioOutput::TAudioOutputPreference aNewDefault)
{
- TRACE("S60AudioPlayerSession::DefaultAudioOutputChanged" << qtThisPtr() << "newDefault" << aNewDefault);
-
+ TRACE("S60AudioPlayerSession::DefaultAudioOutputChanged" << qtThisPtr()
+ << "newDefault" << aNewDefault);
// Emit already implemented in setActiveEndpoint function
Q_UNUSED(aAudioOutput)
Q_UNUSED(aNewDefault)
}
-
-/*!
- Converts CAudioOutput::TAudioOutputPreference enum to QString.
-
- \a output is CAudioOutput::TAudioOutputPreference enum value.
-
-*/
-
QString S60AudioPlayerSession::qStringFromTAudioOutputPreference(CAudioOutput::TAudioOutputPreference output) const
{
if (output == CAudioOutput::ENoPreference)
@@ -472,12 +305,7 @@ QString S60AudioPlayerSession::qStringFromTAudioOutputPreference(CAudioOutput::T
}
#endif
-/*!
- Return True if its Seekable or else False.
-*/
-
bool S60AudioPlayerSession::getIsSeekable() const
{
- return ETrue;
+ return true;
}
-
diff --git a/plugins/multimedia/symbian/mmf/mediaplayer/s60audioplayersession.h b/plugins/multimedia/symbian/mmf/mediaplayer/s60audioplayersession.h
index 772d9fc9a7..a2dee6f517 100644
--- a/plugins/multimedia/symbian/mmf/mediaplayer/s60audioplayersession.h
+++ b/plugins/multimedia/symbian/mmf/mediaplayer/s60audioplayersession.h
@@ -42,23 +42,22 @@
#ifndef S60AUDIOPLAYERSESSION_H
#define S60AUDIOPLAYERSESSION_H
-#include <QtCore/qobject.h>
#include "s60mediaplayersession.h"
#ifdef S60_DRM_SUPPORTED
-#include <drmaudiosampleplayer.h>
-typedef CDrmPlayerUtility CAudioPlayer;
-typedef MDrmAudioPlayerCallback MAudioPlayerObserver;
+# include <drmaudiosampleplayer.h>
+ typedef CDrmPlayerUtility CAudioPlayer;
+ typedef MDrmAudioPlayerCallback MAudioPlayerObserver;
#else
-#include <mdaaudiosampleplayer.h>
-typedef CMdaAudioPlayerUtility CAudioPlayer;
-typedef MMdaAudioPlayerCallback MAudioPlayerObserver;
+# include <mdaaudiosampleplayer.h>
+ typedef CMdaAudioPlayerUtility CAudioPlayer;
+ typedef MMdaAudioPlayerCallback MAudioPlayerObserver;
#endif
#ifdef HAS_AUDIOROUTING
-#include <AudioOutput.h>
-#include <MAudioOutputObserver.h>
-#endif //HAS_AUDIOROUTING
+# include <AudioOutput.h>
+# include <MAudioOutputObserver.h>
+#endif
class S60AudioPlayerSession : public S60MediaPlayerSession
, public MAudioPlayerObserver
@@ -72,32 +71,33 @@ public:
S60AudioPlayerSession(QObject *parent);
~S60AudioPlayerSession();
- //From S60MediaPlayerSession
+ // S60MediaPlayerSession
bool isVideoAvailable();
bool isAudioAvailable();
- // From MAudioLoadingObserver
+ // MAudioLoadingObserver
void MaloLoadingStarted();
void MaloLoadingComplete();
#ifdef HAS_AUDIOROUTING
- // From MAudioOutputObserver
- void DefaultAudioOutputChanged( CAudioOutput& aAudioOutput,
- CAudioOutput::TAudioOutputPreference aNewDefault );
-#endif //HAS_AUDIOROUTING
+ // MAudioOutputObserver
+ void DefaultAudioOutputChanged(CAudioOutput& aAudioOutput,
+ CAudioOutput::TAudioOutputPreference aNewDefault);
+#endif
public:
- // From S60MediaPlayerAudioEndpointSelector
+ // S60MediaPlayerAudioEndpointSelector
QString activeEndpoint() const;
QString defaultEndpoint() const;
void setPlaybackRate(qreal rate);
+
public Q_SLOTS:
- void setActiveEndpoint(const QString& name);
+ void setActiveEndpoint(const QString &name);
protected:
- //From S60MediaPlayerSession
+ // S60MediaPlayerSession
void doLoadL(const TDesC &path);
- void doLoadUrlL(const TDesC &path){Q_UNUSED(path)/*empty implementation*/}
+ void doLoadUrlL(const TDesC &path);
void doPlay();
void doStop();
void doClose();
@@ -108,29 +108,30 @@ protected:
void updateMetaDataEntriesL();
int doGetBufferStatusL() const;
qint64 doGetDurationL() const;
- void doSetAudioEndpoint(const QString& audioEndpoint);
+ void doSetAudioEndpoint(const QString &audioEndpoint);
bool getIsSeekable() const;
+
private:
#ifdef S60_DRM_SUPPORTED
- // From MMdaAudioPlayerCallback
+ // MMdaAudioPlayerCallback
void MdapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& aDuration);
void MdapcPlayComplete(TInt aError);
#else
- // From MDrmAudioPlayerCallback
+ // MDrmAudioPlayerCallback
void MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& aDuration);
void MapcPlayComplete(TInt aError);
#endif
#ifdef HAS_AUDIOROUTING
QString qStringFromTAudioOutputPreference(CAudioOutput::TAudioOutputPreference output) const;
-#endif //HAS_AUDIOROUTING
+#endif
private:
CAudioPlayer *m_player;
#ifdef HAS_AUDIOROUTING
CAudioOutput *m_audioOutput;
-#endif //HAS_AUDIOROUTING
+#endif
QString m_audioEndpoint;
};
-#endif
+#endif // S60AUDIOPLAYERSESSION_H
diff --git a/plugins/multimedia/symbian/mmf/mediaplayer/s60mediametadataprovider.cpp b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediametadataprovider.cpp
index 2d23db0434..49d6656bb6 100644
--- a/plugins/multimedia/symbian/mmf/mediaplayer/s60mediametadataprovider.cpp
+++ b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediametadataprovider.cpp
@@ -43,33 +43,20 @@
#include "s60mediaplayercontrol.h"
#include "s60mediaplayersession.h"
#include "s60mmtrace.h"
-#include <QtCore/qdebug.h>
-/*!
- * Typecasts the \a control object to S60MediaPlayerControl object.
-*/
S60MediaMetaDataProvider::S60MediaMetaDataProvider(QObject *control, QObject *parent)
: QMetaDataReaderControl(parent)
- , m_control(NULL)
+ , m_control(0)
{
TRACE("S60MediaMetaDataProvider::S60MediaMetaDataProvider" << qtThisPtr());
-
m_control = qobject_cast<S60MediaPlayerControl*>(control);
}
-/*!
- * Destructor
-*/
-
S60MediaMetaDataProvider::~S60MediaMetaDataProvider()
{
TRACE("S60MediaMetaDataProvider::~S60MediaMetaDataProvider" << qtThisPtr());
}
-/*!
- * Returns TRUE if MetaData is Available or else FALSE.
-*/
-
bool S60MediaMetaDataProvider::isMetaDataAvailable() const
{
if (m_control->session())
@@ -77,18 +64,11 @@ bool S60MediaMetaDataProvider::isMetaDataAvailable() const
return false;
}
-/*!
- * Always returns FLASE.
-*/
bool S60MediaMetaDataProvider::isWritable() const
{
return false;
}
-/*!
- * Returns when \a key meta data is found in metaData.
-*/
-
QVariant S60MediaMetaDataProvider::metaData(QtMultimediaKit::MetaData key) const
{
if (m_control->session())
@@ -96,10 +76,6 @@ QVariant S60MediaMetaDataProvider::metaData(QtMultimediaKit::MetaData key) const
return QVariant();
}
-/*!
- * Returns available metaData.
-*/
-
QList<QtMultimediaKit::MetaData> S60MediaMetaDataProvider::availableMetaData() const
{
if (m_control->session())
@@ -107,10 +83,6 @@ QList<QtMultimediaKit::MetaData> S60MediaMetaDataProvider::availableMetaData() c
return QList<QtMultimediaKit::MetaData>();
}
-/*!
- * Returns when \a key string is found in extended metaData.
-*/
-
QVariant S60MediaMetaDataProvider::extendedMetaData(const QString &key) const
{
if (m_control->session())
@@ -118,10 +90,6 @@ QVariant S60MediaMetaDataProvider::extendedMetaData(const QString &key) const
return QVariant();
}
-/*!
- * Returns available Extended MetaData.
-*/
-
QStringList S60MediaMetaDataProvider::availableExtendedMetaData() const
{
if (m_control->session())
diff --git a/plugins/multimedia/symbian/mmf/mediaplayer/s60mediametadataprovider.h b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediametadataprovider.h
index b7285c4ff6..4b97609844 100644
--- a/plugins/multimedia/symbian/mmf/mediaplayer/s60mediametadataprovider.h
+++ b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediametadataprovider.h
@@ -43,7 +43,6 @@
#define S60MEDIAMETADATAPROVIDER_H
#include <qmetadatareadercontrol.h>
-#include "s60mediaplayercontrol.h"
QT_USE_NAMESPACE
diff --git a/plugins/multimedia/symbian/mmf/mediaplayer/s60medianetworkaccesscontrol.cpp b/plugins/multimedia/symbian/mmf/mediaplayer/s60medianetworkaccesscontrol.cpp
index 1604fccc61..b88850c332 100644
--- a/plugins/multimedia/symbian/mmf/mediaplayer/s60medianetworkaccesscontrol.cpp
+++ b/plugins/multimedia/symbian/mmf/mediaplayer/s60medianetworkaccesscontrol.cpp
@@ -48,19 +48,20 @@ S60MediaNetworkAccessControl::S60MediaNetworkAccessControl(QObject *parent)
, m_iapId(KUseDefaultIap)
, m_currentIndex(0)
{
+
}
void S60MediaNetworkAccessControl::accessPointChanged(int id)
{
- if (!m_IapIdList.isEmpty())
- m_NetworkObject = m_NetworkObjectList.at(m_IapIdList.indexOf(id));
- emit configurationChanged(m_NetworkObject);
+ if (!m_iapIdList.isEmpty())
+ m_networkObject = m_networkObjectList.at(m_iapIdList.indexOf(id));
+ emit configurationChanged(m_networkObject);
}
S60MediaNetworkAccessControl::~S60MediaNetworkAccessControl()
{
- m_NetworkObjectList.clear();
- m_IapIdList.clear();
+ m_networkObjectList.clear();
+ m_iapIdList.clear();
}
void S60MediaNetworkAccessControl::resetIndex()
@@ -74,44 +75,41 @@ void S60MediaNetworkAccessControl::setConfigurations(const QList<QNetworkConfigu
m_currentIndex =0;
TRAPD(error, retriveAccesspointIDL(configurations));
if (error != KErrNone) {
- m_NetworkObjectList.clear();
- m_IapIdList.clear();
+ m_networkObjectList.clear();
+ m_iapIdList.clear();
}
}
}
-TBool S60MediaNetworkAccessControl::isLastAccessPoint()
+bool S60MediaNetworkAccessControl::isLastAccessPoint()
{
- if (m_currentIndex == m_NetworkObjectList.size())
- return TRUE;
+ if (m_currentIndex == m_networkObjectList.size())
+ return true;
else
- return FALSE;
+ return false;
}
int S60MediaNetworkAccessControl::accessPointId()
{
- if (m_IapIdList.isEmpty())
+ if (m_iapIdList.isEmpty())
return m_iapId;
-
- m_iapId = m_IapIdList.at(m_currentIndex);
-
+ m_iapId = m_iapIdList.at(m_currentIndex);
if (isLastAccessPoint())
m_currentIndex = 0;
else
m_currentIndex ++;
-
return m_iapId;
}
QNetworkConfiguration S60MediaNetworkAccessControl::currentConfiguration() const
{
- return m_NetworkObject;
+ return m_networkObject;
}
void S60MediaNetworkAccessControl::retriveAccesspointIDL(const QList<QNetworkConfiguration> &configurationList)
{
- m_NetworkObjectList.clear();
- m_IapIdList.clear();
+ m_networkObjectList.clear();
+ m_iapIdList.clear();
TBuf<KBuffersize> iapName;
TUint32 iapId;
TInt err;
@@ -123,22 +121,22 @@ void S60MediaNetworkAccessControl::retriveAccesspointIDL(const QList<QNetworkCon
// Open the IAP table
CCommsDbTableView* view = commDB->OpenTableLC(TPtrC(IAP));
- for (int i=0;i<=configurationList.size()- 1;i++) {
- QString accesspointname = configurationList.at(i).name();
- TBuf<KBuffersize> accesspointbuffer(accesspointname.utf16());
+ for (int i=0; i<=configurationList.size()- 1; ++i) {
+ QString accesspointname = configurationList.at(i).name();
+ TBuf<KBuffersize> accesspointbuffer(accesspointname.utf16());
// Point to the first entry
if (view->GotoFirstRecord() == KErrNone) {
- do {
- view->ReadTextL(TPtrC(COMMDB_NAME), iapName);
- view->ReadUintL(TPtrC(COMMDB_ID), iapId);
- if (accesspointbuffer == iapName) {
- m_NetworkObjectList<<configurationList.at(i);
- m_IapIdList<<iapId;
- }
- // Store name and ID to where you want to
- } while (err = view->GotoNextRecord(), err == KErrNone);
- }
- }
+ do {
+ view->ReadTextL(TPtrC(COMMDB_NAME), iapName);
+ view->ReadUintL(TPtrC(COMMDB_ID), iapId);
+ if (accesspointbuffer == iapName) {
+ m_networkObjectList << configurationList.at(i);
+ m_iapIdList << iapId;
+ }
+ // Store name and ID to where you want to
+ } while (err = view->GotoNextRecord(), err == KErrNone);
+ }
+ }
CleanupStack::PopAndDestroy(); // view
CleanupStack::PopAndDestroy(); // commDB
}
diff --git a/plugins/multimedia/symbian/mmf/mediaplayer/s60medianetworkaccesscontrol.h b/plugins/multimedia/symbian/mmf/mediaplayer/s60medianetworkaccesscontrol.h
index 529d95f272..a1c7e7d5ee 100644
--- a/plugins/multimedia/symbian/mmf/mediaplayer/s60medianetworkaccesscontrol.h
+++ b/plugins/multimedia/symbian/mmf/mediaplayer/s60medianetworkaccesscontrol.h
@@ -39,19 +39,15 @@
**
****************************************************************************/
-#ifndef S60MEDIANETWORKACCESSCONTROL_H_
-#define S60MEDIANETWORKACCESSCONTROL_H_
+#ifndef S60MEDIANETWORKACCESSCONTROL_H
+#define S60MEDIANETWORKACCESSCONTROL_H
-
-#include <QtCore/qobject.h>
-#include <QtCore/qlist.h>
-#include <QtCore/qstring.h>
-#include <qmetaobject.h>
-#include <QtNetwork/qnetworkconfiguration.h>
+#include <QtCore/QList>
+#include <QtNetwork/QNetworkConfiguration>
+#include <qmedianetworkaccesscontrol.h>
#include <commdbconnpref.h>
#include <commdb.h>
#include <mmf/common/mmfcontrollerframeworkbase.h>
-#include <qmedianetworkaccesscontrol.h>
#include "s60mediaplayercontrol.h"
QT_BEGIN_NAMESPACE
@@ -63,27 +59,26 @@ QT_END_NAMESPACE
class S60MediaNetworkAccessControl : public QMediaNetworkAccessControl
{
Q_OBJECT
-
public:
-
S60MediaNetworkAccessControl(QObject *parent = 0);
~S60MediaNetworkAccessControl();
virtual void setConfigurations(const QList<QNetworkConfiguration> &configurations);
virtual QNetworkConfiguration currentConfiguration() const;
int accessPointId();
- TBool isLastAccessPoint();
+ bool isLastAccessPoint();
void resetIndex();
public Q_SLOTS:
void accessPointChanged(int);
private:
- void retriveAccesspointIDL(const QList<QNetworkConfiguration> &);
- QList<int> m_IapIdList;
- QList<QNetworkConfiguration> m_NetworkObjectList;
- QNetworkConfiguration m_NetworkObject;
+ void retriveAccesspointIDL(const QList<QNetworkConfiguration> &accessPoint);
+ QList<int> m_iapIdList;
+ QList<QNetworkConfiguration> m_networkObjectList;
+ QNetworkConfiguration m_networkObject;
int m_iapId;
int m_currentIndex;
};
-#endif /* S60MEDIANETWORKACCESSCONTROL_H_ */
+
+#endif // S60MEDIANETWORKACCESSCONTROL_H
diff --git a/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayeraudioendpointselector.cpp b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayeraudioendpointselector.cpp
index cdcc9f3841..c0885264d3 100644
--- a/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayeraudioendpointselector.cpp
+++ b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayeraudioendpointselector.cpp
@@ -44,19 +44,11 @@
#include "s60mediaplayeraudioendpointselector.h"
#include "s60mmtrace.h"
-#include <QtGui/QIcon>
-#include <QtCore/QDebug>
-
-/*!
- Constructs a new audio endpoint selector with the given \a parent.
-*/
-
S60MediaPlayerAudioEndpointSelector::S60MediaPlayerAudioEndpointSelector(QObject *control, QObject *parent)
- :QAudioEndpointSelector(parent)
+ : QAudioEndpointSelector(parent)
, m_control(0)
{
TRACE("S60MediaPlayerAudioEndpointSelector::S60MediaPlayerAudioEndpointSelector" << qtThisPtr());
-
m_control = qobject_cast<S60MediaPlayerControl*>(control);
m_audioEndpointNames.append("Default");
m_audioEndpointNames.append("All");
@@ -65,87 +57,66 @@ S60MediaPlayerAudioEndpointSelector::S60MediaPlayerAudioEndpointSelector(QObject
m_audioEndpointNames.append("Speaker");
}
-/*!
- Destroys an audio endpoint selector.
-*/
-
S60MediaPlayerAudioEndpointSelector::~S60MediaPlayerAudioEndpointSelector()
{
TRACE("S60MediaPlayerAudioEndpointSelector::~S60MediaPlayerAudioEndpointSelector" << qtThisPtr());
}
-/*!
- \return a list of available audio endpoints.
-*/
QList<QString> S60MediaPlayerAudioEndpointSelector::availableEndpoints() const
{
return m_audioEndpointNames;
}
-/*!
- \return the description of the endpoint name.
-*/
-
QString S60MediaPlayerAudioEndpointSelector::endpointDescription(const QString& name) const
{
- if (name == QString("Default")) //ENoPreference
+ if (name == QString("Default")) // ENoPreference
return QString("Used to indicate that the playing audio can be routed to"
- "any speaker. This is the default value for audio.");
- else if (name == QString("All")) //EAll
+ "any speaker. This is the default value for audio.");
+ else if (name == QString("All")) // EAll
return QString("Used to indicate that the playing audio should be routed to all speakers.");
- else if (name == QString("None")) //ENoOutput
+ else if (name == QString("None")) // ENoOutput
return QString("Used to indicate that the playing audio should not be routed to any output.");
- else if (name == QString("Earphone")) //EPrivate
+ else if (name == QString("Earphone")) // EPrivate
return QString("Used to indicate that the playing audio should be routed to"
- "the default private speaker. A private speaker is one that can only"
- "be heard by one person.");
- else if (name == QString("Speaker")) //EPublic
+ "the default private speaker. A private speaker is one that can only"
+ "be heard by one person.");
+ else if (name == QString("Speaker")) // EPublic
return QString("Used to indicate that the playing audio should be routed to"
- "the default public speaker. A public speaker is one that can "
- "be heard by multiple people.");
-
+ "the default public speaker. A public speaker is one that can "
+ "be heard by multiple people.");
return QString();
}
-/*!
- \return the name of the currently selected audio endpoint.
-*/
-
QString S60MediaPlayerAudioEndpointSelector::activeEndpoint() const
{
- if (m_control->session()) {
+ if (m_control->session())
return m_control->session()->activeEndpoint();
- }
- else {
+ else
return m_control->mediaControlSettings().audioEndpoint();
- }
}
-/*!
- \return the name of the default audio endpoint.
-*/
-
QString S60MediaPlayerAudioEndpointSelector::defaultEndpoint() const
{
- if (m_control->session()) {
+ if (m_control->session())
return m_control->session()->defaultEndpoint();
- }
- else {
+ else
return m_control->mediaControlSettings().audioEndpoint();
- }
}
-/*!
- Set the audio endpoint to \a name.
-*/
-
-void S60MediaPlayerAudioEndpointSelector::setActiveEndpoint(const QString& name)
+void S60MediaPlayerAudioEndpointSelector::setActiveEndpoint(const QString &name)
{
QString oldEndpoint = m_control->mediaControlSettings().audioEndpoint();
- if (name != oldEndpoint && (name == QString("Default") || name == QString("All") ||
- name == QString("None") || name == QString("Earphone") || name == QString("Speaker"))) {
+ if (name != oldEndpoint &&
+ (
+ name == QString("Default")
+ || name == QString("All")
+ || name == QString("None")
+ || name == QString("Earphone")
+ || name == QString("Speaker")
+ )
+ ) {
TRACE("S60MediaPlayerAudioEndpointSelector::setActiveEndpoint" << qtThisPtr()
<< "name" << name);
if (m_control->session()) {
diff --git a/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayeraudioendpointselector.h b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayeraudioendpointselector.h
index 9f0fcfe4e6..4f726259eb 100644
--- a/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayeraudioendpointselector.h
+++ b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayeraudioendpointselector.h
@@ -42,8 +42,8 @@
#ifndef S60MEDIAPLAYERAUDIOENDPOINTSELECTOR_H
#define S60MEDIAPLAYERAUDIOENDPOINTSELECTOR_H
-#include <QStringList>
-
+#include <QtCore/QList>
+#include <QtCore/QString>
#include <qaudioendpointselector.h>
QT_USE_NAMESPACE
@@ -53,20 +53,18 @@ class S60MediaPlayerSession;
class S60MediaPlayerAudioEndpointSelector : public QAudioEndpointSelector
{
-
-Q_OBJECT
-
+ Q_OBJECT
public:
S60MediaPlayerAudioEndpointSelector(QObject *control, QObject *parent = 0);
~S60MediaPlayerAudioEndpointSelector();
QList<QString> availableEndpoints() const ;
- QString endpointDescription(const QString& name) const;
+ QString endpointDescription(const QString &name) const;
QString defaultEndpoint() const;
QString activeEndpoint() const;
public Q_SLOTS:
- void setActiveEndpoint(const QString& name);
+ void setActiveEndpoint(const QString &name);
private:
S60MediaPlayerControl* m_control;
diff --git a/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayercontrol.cpp b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayercontrol.cpp
index cb7b556867..1a83fa0313 100644
--- a/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayercontrol.cpp
+++ b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayercontrol.cpp
@@ -1,4 +1,3 @@
-
/****************************************************************************
**
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
@@ -40,40 +39,27 @@
**
****************************************************************************/
+#include <QtCore/QDir>
+#include <QtCore/QUrl>
#include "s60mediaplayercontrol.h"
#include "s60mediaplayersession.h"
#include "s60mmtrace.h"
-#include <QtCore/qdir.h>
-#include <QtCore/qurl.h>
-#include <QtCore/qdebug.h>
-
-/*!
- Constructs a new media player control with the given \a parent.
-*/
-
S60MediaPlayerControl::S60MediaPlayerControl(S60MediaPlayerService *service)
- : QMediaPlayerControl(service),
- m_service(service),
- m_session(NULL),
- m_stream(NULL)
+ : QMediaPlayerControl(service)
+ , m_service(service)
+ , m_session(0)
+ , m_stream(0)
+ , m_mediaSettings(new S60MediaSettings(this))
{
TRACE("S60MediaPlayerControl::S60MediaPlayerControl" << qtThisPtr());
}
-/*!
- Destroys a media player control.
-*/
-
S60MediaPlayerControl::~S60MediaPlayerControl()
{
TRACE("S60MediaPlayerControl::~S60MediaPlayerControl" << qtThisPtr());
}
-/*!
- \return the current playback position in milliseconds.
-*/
-
qint64 S60MediaPlayerControl::position() const
{
if (m_session)
@@ -81,10 +67,6 @@ qint64 S60MediaPlayerControl::position() const
return 0;
}
-/*!
- \return the duration of the current media in milliseconds.
-*/
-
qint64 S60MediaPlayerControl::duration() const
{
if (m_session)
@@ -92,10 +74,6 @@ qint64 S60MediaPlayerControl::duration() const
return -1;
}
-/*!
- \return the state of a player control.
-*/
-
QMediaPlayer::State S60MediaPlayerControl::state() const
{
if (m_session)
@@ -103,22 +81,13 @@ QMediaPlayer::State S60MediaPlayerControl::state() const
return QMediaPlayer::StoppedState;
}
-/*!
- \return the status of the current media.
-*/
-
QMediaPlayer::MediaStatus S60MediaPlayerControl::mediaStatus() const
{
if (m_session)
return m_session->mediaStatus();
- return m_mediaSettings.mediaStatus();
+ return m_mediaSettings->mediaStatus();
}
-/*!
- \return the buffering progress of the current media. Progress is measured in the percentage
- of the buffer filled.
-*/
-
int S60MediaPlayerControl::bufferStatus() const
{
if (m_session)
@@ -126,212 +95,112 @@ int S60MediaPlayerControl::bufferStatus() const
return 0;
}
-/*!
- \return the audio volume of a player control.
-*/
-
int S60MediaPlayerControl::volume() const
{
if (m_session)
return m_session->volume();
- return m_mediaSettings.volume();
+ return m_mediaSettings->volume();
}
-/*!
- \return the mute state of a player control.
-*/
-
bool S60MediaPlayerControl::isMuted() const
{
if (m_session)
- return m_session->isMuted();
- return m_mediaSettings.isMuted();
+ return m_session->isMuted();
+ return m_mediaSettings->isMuted();
}
-/*!
- Identifies if the current media is seekable.
-
- \return true if it possible to seek within the current media, and false otherwise.
-*/
-
bool S60MediaPlayerControl::isSeekable() const
{
if (m_session)
- return m_session->isSeekable();
+ return m_session->isSeekable();
return false;
}
-/*!
- \return a range of times in milliseconds that can be played back.
-
- Usually for local files this is a continuous interval equal to [0..duration()]
- or an empty time range if seeking is not supported, but for network sources
- it refers to the buffered parts of the media.
-*/
-
QMediaTimeRange S60MediaPlayerControl::availablePlaybackRanges() const
{
QMediaTimeRange ranges;
-
- if(m_session && m_session->isSeekable())
+ if (m_session && m_session->isSeekable())
ranges.addInterval(0, m_session->duration());
-
return ranges;
}
-/*!
- \return the rate of playback.
-*/
-
qreal S60MediaPlayerControl::playbackRate() const
{
- return m_mediaSettings.playbackRate();
+ return m_mediaSettings->playbackRate();
}
-/*!
- Sets the \a rate of playback.
-*/
-
void S60MediaPlayerControl::setPlaybackRate(qreal rate)
{
TRACE("S60MediaPlayerControl::setPlaybackRate" << qtThisPtr() << "rate" << rate);
-
- //getting the current playbackrate
- qreal currentPBrate = m_mediaSettings.playbackRate();
- //checking if we need to change the Playback rate
- if (!qFuzzyCompare(currentPBrate,rate))
+ qreal currentRate = m_mediaSettings->playbackRate();
+ if (!qFuzzyCompare(currentRate, rate))
{
- if(m_session)
+ if (m_session)
m_session->setPlaybackRate(rate);
-
- m_mediaSettings.setPlaybackRate(rate);
+ m_mediaSettings->setPlaybackRate(rate);
}
}
-/*!
- Sets the playback \a pos of the current media. This will initiate a seek and it may take
- some time for playback to reach the position set.
-*/
-
void S60MediaPlayerControl::setPosition(qint64 pos)
{
TRACE("S60MediaPlayerControl::setPosition" << qtThisPtr() << "pos" << pos);
-
if (m_session)
m_session->setPosition(pos);
}
-/*!
- Starts playback of the current media.
-
- If successful the player control will immediately enter the \l {QMediaPlayer::PlayingState}
- {playing} state.
-*/
-
void S60MediaPlayerControl::play()
{
TRACE("S60MediaPlayerControl::play" << qtThisPtr());
-
if (m_session)
m_session->play();
}
-/*!
- Pauses playback of the current media.
-
- If sucessful the player control will immediately enter the \l {QMediaPlayer::PausedState}
- {paused} state.
-*/
-
void S60MediaPlayerControl::pause()
{
TRACE("S60MediaPlayerControl::pause" << qtThisPtr());
-
if (m_session)
m_session->pause();
}
-/*!
- Stops playback of the current media.
-
- If successful the player control will immediately enter the \l {QMediaPlayer::StoppedState}
- {stopped} state.
-*/
-
void S60MediaPlayerControl::stop()
{
TRACE("S60MediaPlayerControl::stop" << qtThisPtr());
-
if (m_session)
m_session->stop();
}
-/*!
- Sets the audio \a volume of a player control.
-*/
-
void S60MediaPlayerControl::setVolume(int volume)
{
int boundVolume = qBound(0, volume, 100);
- if (boundVolume == m_mediaSettings.volume())
+ if (boundVolume == m_mediaSettings->volume())
return;
-
TRACE("S60MediaPlayerControl::setVolume" << qtThisPtr()
<< "volume" << volume << "boundVolume" << boundVolume);
-
- m_mediaSettings.setVolume(boundVolume);
-
+ m_mediaSettings->setVolume(boundVolume);
if (m_session)
m_session->setVolume(boundVolume);
}
-/*!
- Sets the \a muted state of a player control.
-*/
-
void S60MediaPlayerControl::setMuted(bool muted)
{
- if (m_mediaSettings.isMuted() == muted)
+ if (m_mediaSettings->isMuted() == muted)
return;
-
TRACE("S60MediaPlayerControl::setMuted" << qtThisPtr() << "muted" << muted);
-
- m_mediaSettings.setMuted(muted);
-
+ m_mediaSettings->setMuted(muted);
if (m_session)
m_session->setMuted(muted);
}
-/*!
- * \return the current media source.
-*/
-
QMediaContent S60MediaPlayerControl::media() const
{
return m_media;
}
-/*!
- \return the current media stream. This is only a valid if a stream was passed to setMedia().
-
- \sa setMedia()
-*/
-
const QIODevice *S60MediaPlayerControl::mediaStream() const
{
return m_stream;
}
-/*!
- Sets the current \a source media source. If a \a stream is supplied; data will be read from that
- instead of attempting to resolve the media source. The media source may still be used to
- supply media information such as mime type.
-
- Setting the media to a null QMediaContent will cause the control to discard all
- information relating to the current media source and to cease all I/O operations related
- to that media.
-*/
-
void S60MediaPlayerControl::setMedia(const QMediaContent &source, QIODevice *stream)
{
TRACE("S60MediaPlayerControl::setMedia" << qtThisPtr()
@@ -349,7 +218,7 @@ void S60MediaPlayerControl::setMedia(const QMediaContent &source, QIODevice *str
m_session->load(source);
mediaStatus = m_session->mediaStatus();
}
- m_mediaSettings.setMediaStatus(mediaStatus);
+ m_mediaSettings->setMediaStatus(mediaStatus);
}
emit stateChanged(QMediaPlayer::StoppedState);
if (m_media != source) {
@@ -358,42 +227,32 @@ void S60MediaPlayerControl::setMedia(const QMediaContent &source, QIODevice *str
}
}
-/*!
- * \return media player session.
-*/
S60MediaPlayerSession* S60MediaPlayerControl::session()
{
return m_session;
}
-/*!
- * Sets \a output as a VideoOutput.
-*/
-
void S60MediaPlayerControl::setVideoOutput(QObject *output)
{
TRACE("S60MediaPlayerControl::setVideoOutput" << qtThisPtr()
<< "output" << output);
- m_mediaSettings.setVideoOutput(output);
+ m_mediaSettings->setVideoOutput(output);
if (m_session)
m_session->setVideoRenderer(output);
}
-/*!
- * \return TRUE if Audio available or else FALSE.
-*/
+QObject *S60MediaPlayerControl::videoOutput() const
+{
+ return m_mediaSettings->videoOutput();
+}
bool S60MediaPlayerControl::isAudioAvailable() const
{
if (m_session)
- return m_session->isAudioAvailable();
+ return m_session->isAudioAvailable();
return false;
}
-/*!
- * \return TRUE if Video available or else FALSE.
-*/
-
bool S60MediaPlayerControl::isVideoAvailable() const
{
if (m_session)
@@ -401,36 +260,22 @@ bool S60MediaPlayerControl::isVideoAvailable() const
return false;
}
-/*!
- * \return media settings.
- *
- * Media Settings include volume, muted, playbackRate, mediaStatus, audioEndpoint.
-*/
-const S60MediaSettings& S60MediaPlayerControl::mediaControlSettings() const
+const S60MediaSettings &S60MediaPlayerControl::mediaControlSettings() const
{
- return m_mediaSettings;
+ return *m_mediaSettings;
}
-/*!
- * Set the audio endpoint to \a name.
-*/
-
-void S60MediaPlayerControl::setAudioEndpoint(const QString& name)
+void S60MediaPlayerControl::setAudioEndpoint(const QString &name)
{
TRACE("S60MediaPlayerControl::setAudioEndpoint" << qtThisPtr()
<< "name" << name);
-
- m_mediaSettings.setAudioEndpoint(name);
+ m_mediaSettings->setAudioEndpoint(name);
}
-/*!
- * Sets media type \a type as Unknown, Video, Audio, Data.
-*/
-
-void S60MediaPlayerControl::setMediaType(S60MediaSettings::TMediaType type)
+void S60MediaPlayerControl::setMediaType(S60MediaSettings::MediaType type)
{
TRACE("S60MediaPlayerControl::setMediaType" << qtThisPtr()
<< "type" << type);
-
- m_mediaSettings.setMediaType(type);
+ m_mediaSettings->setMediaType(type);
}
+
diff --git a/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayercontrol.h b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayercontrol.h
index e929a6ed09..3356170981 100644
--- a/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayercontrol.h
+++ b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayercontrol.h
@@ -42,11 +42,8 @@
#ifndef S60MEDIAPLAYERCONTROL_H
#define S60MEDIAPLAYERCONTROL_H
-#include <QtCore/qobject.h>
-
#include <qmediaplayercontrol.h>
-
-#include <QtCore/qdebug.h>
+#include "s60mediasettings.h"
QT_BEGIN_NAMESPACE
class QMediaPlayer;
@@ -59,48 +56,6 @@ QT_USE_NAMESPACE
class S60MediaPlayerSession;
class S60MediaPlayerService;
-class S60MediaSettings
-{
-
-public:
- S60MediaSettings()
- : m_volume(30)
- , m_muted(false)
- , m_playbackRate(0)
- , m_mediaStatus(QMediaPlayer::NoMedia)
- , m_audioEndpoint(QString("Default"))
- , m_videoOutput(0)
- {
- }
-
- enum TMediaType {Unknown, Video, Audio, Data};
-
- void setVolume(int volume) { m_volume = volume; }
- void setMuted(bool muted) { m_muted = muted; }
- void setPlaybackRate(qreal rate) { m_playbackRate = rate; }
- void setMediaStatus(QMediaPlayer::MediaStatus status) {m_mediaStatus=status;}
- void setAudioEndpoint(const QString& audioEndpoint) { m_audioEndpoint = audioEndpoint; }
- void setMediaType(S60MediaSettings::TMediaType type) { m_mediaType = type; }
- void setVideoOutput(QObject *value) { m_videoOutput = value; }
-
- int volume() const { return m_volume; }
- bool isMuted() const { return m_muted; }
- qreal playbackRate() const { return m_playbackRate; }
- QMediaPlayer::MediaStatus mediaStatus() const {return m_mediaStatus;}
- QString audioEndpoint() const { return m_audioEndpoint; }
- S60MediaSettings::TMediaType mediaType() const { return m_mediaType; }
- QObject *videoOutput() const { return m_videoOutput; }
-
-private:
- int m_volume;
- bool m_muted;
- qreal m_playbackRate;
- QMediaPlayer::MediaStatus m_mediaStatus;
- QString m_audioEndpoint;
- S60MediaSettings::TMediaType m_mediaType;
- QObject *m_videoOutput;
-};
-
class S60MediaPlayerControl : public QMediaPlayerControl
{
Q_OBJECT
@@ -109,43 +64,44 @@ public:
S60MediaPlayerControl(S60MediaPlayerService *service);
~S60MediaPlayerControl();
- // from QMediaPlayerControl
- virtual QMediaPlayer::State state() const;
- virtual QMediaPlayer::MediaStatus mediaStatus() const;
- virtual qint64 duration() const;
- virtual qint64 position() const;
- virtual void setPosition(qint64 pos);
- virtual int volume() const;
- virtual void setVolume(int volume);
- virtual bool isMuted() const;
- virtual void setMuted(bool muted);
- virtual int bufferStatus() const;
- virtual bool isAudioAvailable() const;
- virtual bool isVideoAvailable() const;
- virtual bool isSeekable() const;
- virtual QMediaTimeRange availablePlaybackRanges() const;
- virtual qreal playbackRate() const;
- virtual void setPlaybackRate(qreal rate);
- virtual QMediaContent media() const;
- virtual const QIODevice *mediaStream() const;
- virtual void setMedia(const QMediaContent&, QIODevice *);
- virtual void play();
- virtual void pause();
- virtual void stop();
+ // QMediaPlayerControl
+ QMediaPlayer::State state() const;
+ QMediaPlayer::MediaStatus mediaStatus() const;
+ qint64 duration() const;
+ qint64 position() const;
+ void setPosition(qint64 pos);
+ int volume() const;
+ void setVolume(int volume);
+ bool isMuted() const;
+ void setMuted(bool muted);
+ int bufferStatus() const;
+ bool isAudioAvailable() const;
+ bool isVideoAvailable() const;
+ bool isSeekable() const;
+ QMediaTimeRange availablePlaybackRanges() const;
+ qreal playbackRate() const;
+ void setPlaybackRate(qreal rate);
+ QMediaContent media() const;
+ const QIODevice *mediaStream() const;
+ void setMedia(const QMediaContent &source, QIODevice *device);
+ void play();
+ void pause();
+ void stop();
// Own methods
S60MediaPlayerSession* session();
void setVideoOutput(QObject *output);
+ QObject *videoOutput() const;
const S60MediaSettings& mediaControlSettings() const;
- void setAudioEndpoint(const QString& name);
- void setMediaType(S60MediaSettings::TMediaType type);
+ void setAudioEndpoint(const QString &name);
+ void setMediaType(S60MediaSettings::MediaType type);
private:
S60MediaPlayerService *m_service;
S60MediaPlayerSession *m_session;
QMediaContent m_media;
QIODevice *m_stream;
- S60MediaSettings m_mediaSettings;
+ S60MediaSettings *m_mediaSettings;
};
#endif
diff --git a/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayerservice.cpp b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayerservice.cpp
index 7b32d8de28..0a7c1a12d9 100644
--- a/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayerservice.cpp
+++ b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayerservice.cpp
@@ -42,130 +42,83 @@
#include <QtCore/qvariant.h>
#include <QtCore/qdebug.h>
#include <QtGui/qwidget.h>
-
+#include <qmediaplaylistnavigator.h>
+#include <qmediaplaylist.h>
#include "s60mediaplayerservice.h"
#include "s60mediaplayercontrol.h"
#include "s60videoplayersession.h"
#include "s60audioplayersession.h"
#include "s60mediametadataprovider.h"
#include "s60mediarecognizer.h"
-#include "s60videowidgetcontrol.h"
-#include "s60videowindowcontrol.h"
+#include "s60videooutputfactory.h"
#include "s60mediaplayeraudioendpointselector.h"
#include "s60medianetworkaccesscontrol.h"
#include "s60mediastreamcontrol.h"
#include "s60mmtrace.h"
-#include <qmediaplaylistnavigator.h>
-#include <qmediaplaylist.h>
-
-/*!
- Construct a media service with the given \a parent.
-*/
-
S60MediaPlayerService::S60MediaPlayerService(QObject *parent)
: QMediaService(parent)
- , m_control(NULL)
- , m_metaData(NULL)
- , m_audioEndpointSelector(NULL)
- , m_streamControl(NULL)
- , m_networkAccessControl(NULL)
- , m_videoOutput(NULL)
+ , m_control(0)
+ , m_metaData(0)
+ , m_audioEndpointSelector(0)
+ , m_streamControl(0)
+ , m_networkAccessControl(0)
+ , m_videoOutputFactory(0)
{
TRACE("S60MediaPlayerService::S60MediaPlayerService" << qtThisPtr());
-
m_control = new S60MediaPlayerControl(this);
m_metaData = new S60MediaMetaDataProvider(m_control, this);
m_audioEndpointSelector = new S60MediaPlayerAudioEndpointSelector(m_control, this);
m_streamControl = new S60MediaStreamControl(m_control, this);
m_networkAccessControl = new S60MediaNetworkAccessControl(this);
+ m_videoOutputFactory = new S60VideoOutputFactory(this);
}
-/*!
- Destroys a media service.
-*/
-
S60MediaPlayerService::~S60MediaPlayerService()
{
TRACE("S60MediaPlayerService::~S60MediaPlayerService" << qtThisPtr());
}
-/*!
- \return a pointer to the media control, which matches the controller \a name.
-
- If the service does not implement the control, or if it is unavailable a
- null pointer is returned instead.
-
- Controls must be returned to the service when no longer needed using the
- releaseControl() function.
-*/
-
QMediaControl *S60MediaPlayerService::requestControl(const char *name)
{
QMediaControl *result = 0;
-
if (qstrcmp(name, QMediaPlayerControl_iid) == 0)
result = m_control;
-
if (qstrcmp(name, QMediaNetworkAccessControl_iid) == 0)
result = m_networkAccessControl;
-
if (qstrcmp(name, QMetaDataReaderControl_iid) == 0)
result = m_metaData;
-
if (qstrcmp(name, QAudioEndpointSelector_iid) == 0)
result = m_audioEndpointSelector;
-
if (qstrcmp(name, QMediaStreamsControl_iid) == 0)
result = m_streamControl;
- if (!m_videoOutput) {
- if (qstrcmp(name, QVideoWidgetControl_iid) == 0) {
- m_videoOutput = new S60VideoWidgetControl(this);
- }
- else if (qstrcmp(name, QVideoWindowControl_iid) == 0) {
- m_videoOutput = new S60VideoWindowControl(this);
- }
-
- if (m_videoOutput) {
- m_control->setVideoOutput(m_videoOutput);
- result = m_videoOutput;
- }
- }else {
- if (qstrcmp(name, QVideoWidgetControl_iid) == 0 ||
- qstrcmp(name, QVideoWindowControl_iid) == 0){
- result = m_videoOutput;
- }
+ if (!result) {
+ result = m_videoOutputFactory->requestControl(name);
+ if (result)
+ m_control->setVideoOutput(result);
}
+
TRACE("S60MediaPlayerService::requestControl" << qtThisPtr()
<< "name" << name << "result" << result);
return result;
}
-/*!
- Releases a \a control back to the service.
-*/
-
void S60MediaPlayerService::releaseControl(QMediaControl *control)
{
TRACE("S60MediaPlayerService::releaseControl" << qtThisPtr()
<< "control" << control);
- if (control == m_videoOutput) {
- m_videoOutput = 0;
- m_control->setVideoOutput(m_videoOutput);
- }
+ if (m_control->videoOutput() == control)
+ m_control->setVideoOutput(0);
+ m_videoOutputFactory->releaseControl(control);
}
-/*!
- * \return media player session(audio playersesion/video playersession)
- * by recognizing whether media is audio or video and sets it on media type.
-*/
S60MediaPlayerSession* S60MediaPlayerService::createPlayerSession(const QMediaContent &content)
{
QUrl url = content.canonicalUrl();
S60MediaPlayerSession *session = 0;
- S60MediaSettings::TMediaType mediaType = S60MediaSettings::Unknown;
+ S60MediaSettings::MediaType mediaType = S60MediaSettings::Unknown;
if (!url.isEmpty()) {
S60MediaRecognizer *recognizer = new S60MediaRecognizer;
const S60MediaRecognizer::MediaType recognizerMediaType = recognizer->mediaType(url);
@@ -186,16 +139,9 @@ S60MediaPlayerSession* S60MediaPlayerService::createPlayerSession(const QMediaCo
return session;
}
-/*!
- * \return media playersession (videoplayersession).
- * constructs the videoplayersession object and connects all the respective signals and slots.
- * and initialises all the media settings.
-*/
-
S60MediaPlayerSession* S60MediaPlayerService::createVideoPlayerSession()
{
S60VideoPlayerSession *session = new S60VideoPlayerSession(this, m_networkAccessControl);
-
connect(session, SIGNAL(positionChanged(qint64)),
m_control, SIGNAL(positionChanged(qint64)));
connect(session, SIGNAL(playbackRateChanged(qreal)),
@@ -230,25 +176,16 @@ S60MediaPlayerSession* S60MediaPlayerService::createVideoPlayerSession()
m_streamControl, SLOT(handleStreamsChanged()));
connect(session, SIGNAL(accessPointChanged(int)),
m_networkAccessControl, SLOT(accessPointChanged(int)));
-
session->setVolume(m_control->mediaControlSettings().volume());
session->setMuted(m_control->mediaControlSettings().isMuted());
session->setAudioEndpoint(m_control->mediaControlSettings().audioEndpoint());
session->setVideoRenderer(m_control->mediaControlSettings().videoOutput());
-
return session;
}
-/*!
- * \return media playersession (audioplayersession).
- * constructs the audioplayersession object and connects all the respective signals and slots.
- * and initialises all the media settings.
-*/
-
S60MediaPlayerSession* S60MediaPlayerService::createAudioPlayerSession()
{
S60AudioPlayerSession *session = new S60AudioPlayerSession(this);
-
connect(session, SIGNAL(positionChanged(qint64)),
m_control, SIGNAL(positionChanged(qint64)));
connect(session, SIGNAL(playbackRateChanged(qreal)),
@@ -281,10 +218,9 @@ S60MediaPlayerSession* S60MediaPlayerService::createAudioPlayerSession()
m_audioEndpointSelector, SIGNAL(activeEndpointChanged(const QString&)));
connect(session, SIGNAL(mediaChanged()),
m_streamControl, SLOT(handleStreamsChanged()));
-
session->setVolume(m_control->mediaControlSettings().volume());
session->setMuted(m_control->mediaControlSettings().isMuted());
session->setAudioEndpoint(m_control->mediaControlSettings().audioEndpoint());
-
return session;
}
+
diff --git a/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayerservice.h b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayerservice.h
index 4b2685a94b..54e772dd9e 100644
--- a/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayerservice.h
+++ b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayerservice.h
@@ -44,7 +44,6 @@
#include <QtCore/qobject.h>
#include <qmediaservice.h>
-
#include "s60mediaplayeraudioendpointselector.h"
QT_BEGIN_NAMESPACE
@@ -61,20 +60,19 @@ class S60MediaPlayerControl;
class S60MediaMetaDataProvider;
class S60MediaStreamControl;
class S60MediaRecognizer;
-
+class S60MediaNetworkAccessControl;
+class S60VideoOutputFactory;
class QMediaContent;
class QMediaPlaylistNavigator;
-class S60MediaNetworkAccessControl;
class S60MediaPlayerService : public QMediaService
{
Q_OBJECT
-
public:
-
S60MediaPlayerService(QObject *parent = 0);
~S60MediaPlayerService();
+ // QMediaService
QMediaControl *requestControl(const char *name);
void releaseControl(QMediaControl *control);
@@ -90,7 +88,7 @@ private:
S60MediaPlayerAudioEndpointSelector *m_audioEndpointSelector;
S60MediaStreamControl *m_streamControl;
S60MediaNetworkAccessControl *m_networkAccessControl;
- QMediaControl *m_videoOutput;
+ S60VideoOutputFactory *m_videoOutputFactory;
};
#endif
diff --git a/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayersession.cpp b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayersession.cpp
index 3cef38b3f8..24a8b78671 100644
--- a/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayersession.cpp
+++ b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayersession.cpp
@@ -39,19 +39,13 @@
**
****************************************************************************/
-#include "s60mediaplayersession.h"
-#include "s60mmtrace.h"
-
-#include <QtCore/qdebug.h>
-#include <QtCore/qdir.h>
-#include <QtCore/qvariant.h>
-#include <QtCore/qtimer.h>
+#include <QtCore/QDir>
+#include <QtCore/QTimer>
#include <mmf/common/mmferrors.h>
#include <qmediatimerange.h>
-
-/*!
- Construct a media playersession with the given \a parent.
-*/
+#include "s60mediaplayersession.h"
+#include "s60mediaplayerutils.h"
+#include "s60mmtrace.h"
S60MediaPlayerSession::S60MediaPlayerSession(QObject *parent)
: QObject(parent)
@@ -70,44 +64,28 @@ S60MediaPlayerSession::S60MediaPlayerSession(QObject *parent)
, m_progressduration(0)
{
TRACE("S60MediaPlayerSession::S60MediaPlayerSession" << qtThisPtr());
-
connect(m_progressTimer, SIGNAL(timeout()), this, SLOT(tick()));
connect(m_stalledTimer, SIGNAL(timeout()), this, SLOT(stalled()));
}
-/*!
- Destroys a media playersession.
-*/
-
S60MediaPlayerSession::~S60MediaPlayerSession()
{
TRACE("S60MediaPlayerSession::~S60MediaPlayerSession" << qtThisPtr());
}
-/*!
- * \return the audio volume of a player session.
-*/
int S60MediaPlayerSession::volume() const
{
return m_volume;
}
-/*!
- Sets the audio \a volume of a player session.
-*/
-
void S60MediaPlayerSession::setVolume(int volume)
{
if (m_volume == volume)
return;
-
TRACE("S60MediaPlayerSession::setVolume" << qtThisPtr() << "volume" << volume);
-
m_volume = volume;
emit volumeChanged(m_volume);
-
- // Dont set symbian players volume until media loaded.
- // Leaves with KerrNotReady although documentation says otherwise.
+ // Don't set player volume until media loaded
if (!m_muted &&
( mediaStatus() == QMediaPlayer::LoadedMedia
|| (mediaStatus() == QMediaPlayer::StalledMedia && state() != QMediaPlayer::StoppedState)
@@ -119,94 +97,55 @@ void S60MediaPlayerSession::setVolume(int volume)
}
}
-/*!
- \return the mute state of a player session.
-*/
-
bool S60MediaPlayerSession::isMuted() const
{
return m_muted;
}
-/*!
- Identifies if the current media is seekable.
-
- \return true if it possible to seek within the current media, and false otherwise.
-*/
-
bool S60MediaPlayerSession::isSeekable() const
{
return m_seekable;
}
-/*!
- Sets the \a status of the current media.
-*/
-
void S60MediaPlayerSession::setMediaStatus(QMediaPlayer::MediaStatus status)
{
if (m_mediaStatus == status)
return;
-
TRACE("S60MediaPlayerSession::setMediaStatus" << qtThisPtr() << "status" << status);
-
m_mediaStatus = status;
-
emit mediaStatusChanged(m_mediaStatus);
-
if (m_play_requested && m_mediaStatus == QMediaPlayer::LoadedMedia)
play();
}
-/*!
- Sets the \a state on media player.
-*/
-
void S60MediaPlayerSession::setState(QMediaPlayer::State state)
{
if (m_state == state)
return;
-
TRACE("S60MediaPlayerSession::setMediaStatus" << qtThisPtr() << "state" << state);
-
m_state = state;
emit stateChanged(m_state);
}
-/*!
- \return the state of a player session.
-*/
-
QMediaPlayer::State S60MediaPlayerSession::state() const
{
return m_state;
}
-/*!
- \return the status of the current media.
-*/
-
QMediaPlayer::MediaStatus S60MediaPlayerSession::mediaStatus() const
{
return m_mediaStatus;
}
-/*!
- * Loads the \a url for playback.
- * If \a url is local file then it loads audio playersesion if its audio file.
- * If it is a local video file then loads the video playersession.
-*/
-
void S60MediaPlayerSession::load(const QMediaContent source)
{
TRACE("S60MediaPlayerSession::load" << qtThisPtr()
<< "source" << source.canonicalUrl().toString());
-
m_source = source;
setMediaStatus(QMediaPlayer::LoadingMedia);
startStalledTimer();
- m_stream = (source.canonicalUrl().scheme() == "file")?false:true;
- m_UrlPath = source.canonicalUrl();
+ m_stream = (source.canonicalUrl().scheme() != "file");
+ m_url = source.canonicalUrl();
TRAPD(err,
if (m_stream)
doLoadUrlL(QString2TPtrC(source.canonicalUrl().toString()));
@@ -216,35 +155,32 @@ void S60MediaPlayerSession::load(const QMediaContent source)
m_isaudiostream = false;
}
+bool S60MediaPlayerSession::getIsSeekable() const
+{
+ return ETrue;
+}
+
TBool S60MediaPlayerSession::isStreaming()
{
return m_stream;
}
-/*!
- Start or resume playing the current source.
-*/
void S60MediaPlayerSession::play()
{
TRACE("S60MediaPlayerSession::play" << qtThisPtr()
<< "state" << state() << "mediaStatus" << mediaStatus());
-
- if ( (state() == QMediaPlayer::PlayingState && m_play_requested == false)
+ if ( (state() == QMediaPlayer::PlayingState && m_play_requested == false)
|| mediaStatus() == QMediaPlayer::UnknownMediaStatus
|| mediaStatus() == QMediaPlayer::NoMedia
|| mediaStatus() == QMediaPlayer::InvalidMedia)
return;
-
setState(QMediaPlayer::PlayingState);
-
if (mediaStatus() == QMediaPlayer::LoadingMedia ||
(mediaStatus() == QMediaPlayer::StalledMedia &&
- state() == QMediaPlayer::StoppedState))
- {
+ state() == QMediaPlayer::StoppedState)) {
m_play_requested = true;
return;
}
-
m_play_requested = false;
m_duration = duration();
setVolume(m_volume);
@@ -253,38 +189,25 @@ void S60MediaPlayerSession::play()
doPlay();
}
-/*!
- Pause playing the current source.
-*/
-
void S60MediaPlayerSession::pause()
{
TRACE("S60MediaPlayerSession::pause" << qtThisPtr());
-
if (state() != QMediaPlayer::PlayingState)
return;
-
if (mediaStatus() == QMediaPlayer::NoMedia ||
mediaStatus() == QMediaPlayer::InvalidMedia)
return;
-
setState(QMediaPlayer::PausedState);
stopProgressTimer();
TRAP_IGNORE(doPauseL());
m_play_requested = false;
}
-/*!
- Stop playing, and reset the play position to the beginning.
-*/
-
void S60MediaPlayerSession::stop()
{
TRACE("S60MediaPlayerSession::stop" << qtThisPtr());
-
if (state() == QMediaPlayer::StoppedState)
return;
-
m_play_requested = false;
m_state = QMediaPlayer::StoppedState;
if (mediaStatus() == QMediaPlayer::BufferingMedia ||
@@ -300,129 +223,99 @@ void S60MediaPlayerSession::stop()
emit stateChanged(m_state);
}
-/*!
- * Sets \a renderer as video renderer.
-*/
-
void S60MediaPlayerSession::setVideoRenderer(QObject *renderer)
{
TRACE("S60MediaPlayerSession::setVideoRenderer" << qtThisPtr()
<< "videoRenderer" << renderer);
-
Q_UNUSED(renderer);
}
-/*!
- * the percentage of the temporary buffer filled before playback begins.
-
- When the player object is buffering; this property holds the percentage of
- the temporary buffer that is filled. The buffer will need to reach 100%
- filled before playback can resume, at which time the MediaStatus will be
- BufferedMedia.
-
- \sa mediaStatus()
-*/
-
int S60MediaPlayerSession::bufferStatus()
{
if (state() ==QMediaPlayer::StoppedState)
return 0;
-
if( mediaStatus() == QMediaPlayer::LoadingMedia
|| mediaStatus() == QMediaPlayer::UnknownMediaStatus
|| mediaStatus() == QMediaPlayer::NoMedia
|| mediaStatus() == QMediaPlayer::InvalidMedia)
return 0;
-
int progress = 0;
TRAPD(err, progress = doGetBufferStatusL());
// If buffer status query not supported by codec return 100
// do not set error
- if(err == KErrNotSupported)
+ if (err == KErrNotSupported)
return 100;
-
setError(err);
return progress;
}
-/*!
- * return TRUE if Meta data is available in current media source.
-*/
-
bool S60MediaPlayerSession::isMetadataAvailable() const
{
return !m_metaDataMap.isEmpty();
}
-/*!
- * \return the \a key meta data.
-*/
QVariant S60MediaPlayerSession::metaData(const QString &key) const
{
return m_metaDataMap.value(key);
}
-/*!
- * \return the \a key meta data as QString.
-*/
-
QVariant S60MediaPlayerSession::metaData(QtMultimediaKit::MetaData key) const
{
return metaData(metaDataKeyAsString(key));
}
-/*!
- * \return List of all available meta data from current media source.
-*/
-
QList<QtMultimediaKit::MetaData> S60MediaPlayerSession::availableMetaData() const
{
QList<QtMultimediaKit::MetaData> metaDataTags;
if (isMetadataAvailable()) {
- for (int i = QtMultimediaKit::Title; i <= QtMultimediaKit::ThumbnailImage; i++) {
+ for (int i=QtMultimediaKit::Title; i<=QtMultimediaKit::ThumbnailImage; ++i) {
QString metaDataItem = metaDataKeyAsString((QtMultimediaKit::MetaData)i);
if (!metaDataItem.isEmpty()) {
- if (!metaData(metaDataItem).isNull()) {
+ if (!metaData(metaDataItem).isNull())
metaDataTags.append((QtMultimediaKit::MetaData)i);
- }
}
}
}
-
return metaDataTags;
}
-/*!
- * \return all available extended meta data of current media source.
-*/
-
QStringList S60MediaPlayerSession::availableExtendedMetaData() const
{
return m_metaDataMap.keys();
}
-/*!
- * \return meta data \a key as QString.
-*/
-
QString S60MediaPlayerSession::metaDataKeyAsString(QtMultimediaKit::MetaData key) const
{
switch(key) {
- case QtMultimediaKit::Title: return "title";
- case QtMultimediaKit::AlbumArtist: return "artist";
- case QtMultimediaKit::Comment: return "comment";
- case QtMultimediaKit::Genre: return "genre";
- case QtMultimediaKit::Year: return "year";
- case QtMultimediaKit::Copyright: return "copyright";
- case QtMultimediaKit::AlbumTitle: return "album";
- case QtMultimediaKit::Composer: return "composer";
- case QtMultimediaKit::TrackNumber: return "albumtrack";
- case QtMultimediaKit::AudioBitRate: return "audiobitrate";
- case QtMultimediaKit::VideoBitRate: return "videobitrate";
- case QtMultimediaKit::Duration: return "duration";
- case QtMultimediaKit::MediaType: return "contenttype";
- case QtMultimediaKit::CoverArtImage: return "attachedpicture";
- case QtMultimediaKit::SubTitle: // TODO: Find the matching metadata keys
+ case QtMultimediaKit::Title:
+ return "title";
+ case QtMultimediaKit::AlbumArtist:
+ return "artist";
+ case QtMultimediaKit::Comment:
+ return "comment";
+ case QtMultimediaKit::Genre:
+ return "genre";
+ case QtMultimediaKit::Year:
+ return "year";
+ case QtMultimediaKit::Copyright:
+ return "copyright";
+ case QtMultimediaKit::AlbumTitle:
+ return "album";
+ case QtMultimediaKit::Composer:
+ return "composer";
+ case QtMultimediaKit::TrackNumber:
+ return "albumtrack";
+ case QtMultimediaKit::AudioBitRate:
+ return "audiobitrate";
+ case QtMultimediaKit::VideoBitRate:
+ return "videobitrate";
+ case QtMultimediaKit::Duration:
+ return "duration";
+ case QtMultimediaKit::MediaType:
+ return "contenttype";
+ case QtMultimediaKit::CoverArtImage:
+ return "attachedpicture";
+ case QtMultimediaKit::SubTitle:
case QtMultimediaKit::Description:
case QtMultimediaKit::Category:
case QtMultimediaKit::Date:
@@ -462,21 +355,15 @@ QString S60MediaPlayerSession::metaDataKeyAsString(QtMultimediaKit::MetaData key
default:
break;
}
-
return QString();
}
-/*!
- Sets the \a muted state of a player session.
-*/
-
void S60MediaPlayerSession::setMuted(bool muted)
{
if (muted != m_muted) {
TRACE("S60MediaPlayerSession::setMuted" << qtThisPtr() << "muted" << muted);
m_muted = muted;
emit mutedChanged(m_muted);
-
if( m_mediaStatus == QMediaPlayer::LoadedMedia
|| (m_mediaStatus == QMediaPlayer::StalledMedia && state() != QMediaPlayer::StoppedState)
|| m_mediaStatus == QMediaPlayer::BufferingMedia
@@ -488,10 +375,6 @@ void S60MediaPlayerSession::setMuted(bool muted)
}
}
-/*!
- \return the duration of the current media in milliseconds.
-*/
-
qint64 S60MediaPlayerSession::duration() const
{
if( mediaStatus() == QMediaPlayer::LoadingMedia
@@ -500,16 +383,11 @@ qint64 S60MediaPlayerSession::duration() const
|| (mediaStatus() == QMediaPlayer::StalledMedia && state() == QMediaPlayer::StoppedState)
|| mediaStatus() == QMediaPlayer::InvalidMedia)
return -1;
-
qint64 pos = 0;
TRAP_IGNORE(pos = doGetDurationL());
return pos;
}
-/*!
- \return the current playback position in milliseconds.
-*/
-
qint64 S60MediaPlayerSession::position() const
{
if( mediaStatus() == QMediaPlayer::LoadingMedia
@@ -518,7 +396,6 @@ qint64 S60MediaPlayerSession::position() const
|| (mediaStatus() == QMediaPlayer::StalledMedia && state() == QMediaPlayer::StoppedState)
|| mediaStatus() == QMediaPlayer::InvalidMedia)
return 0;
-
qint64 pos = 0;
TRAP_IGNORE(pos = doGetPositionL());
if (pos < m_progressduration)
@@ -526,64 +403,39 @@ qint64 S60MediaPlayerSession::position() const
return pos;
}
-/*!
- Sets the playback \a pos of the current media. This will initiate a seek and it may take
- some time for playback to reach the position set.
-*/
-
void S60MediaPlayerSession::setPosition(qint64 pos)
{
if (position() == pos)
return;
-
TRACE("S60MediaPlayerSession::setPosition" << qtThisPtr() << "pos" << pos);
-
QMediaPlayer::State originalState = state();
-
if (originalState == QMediaPlayer::PlayingState)
pause();
-
TRAPD(err, doSetPositionL(pos * 1000));
setError(err);
-
if (err == KErrNone) {
if (mediaStatus() == QMediaPlayer::EndOfMedia)
setMediaStatus(QMediaPlayer::LoadedMedia);
- }
- else if (err == KErrNotSupported) {
+ } else if (err == KErrNotSupported) {
m_seekable = false;
emit seekableChanged(m_seekable);
}
-
if (originalState == QMediaPlayer::PlayingState)
play();
-
TRAP_IGNORE(m_progressduration = doGetPositionL());
emit positionChanged(m_progressduration);
}
-/*!
- * Set the audio endpoint to \a audioEndpoint.
-*/
-
void S60MediaPlayerSession::setAudioEndpoint(const QString& audioEndpoint)
{
TRACE("S60MediaPlayerSession::setAudioEndpoint" << qtThisPtr()
<< "audioEndpoint" << audioEndpoint);
-
doSetAudioEndpoint(audioEndpoint);
}
-/*!
- * Loading of media source is completed.
- * And ready for playback. Updates all the media status, state, settings etc.
- * And emits the signals.
-*/
-
void S60MediaPlayerSession::loaded()
{
TRACE("S60MediaPlayerSession::loaded" << qtThisPtr());
-
stopStalledTimer();
if (m_error == KErrNone || m_error == KErrMMPartialPlayback) {
setMediaStatus(QMediaPlayer::LoadedMedia);
@@ -594,86 +446,50 @@ void S60MediaPlayerSession::loaded()
emit videoAvailableChanged(isVideoAvailable());
emit audioAvailableChanged(isAudioAvailable());
emit mediaChanged();
-
m_seekable = getIsSeekable();
}
}
-/*!
- * Playback is completed as medai source reached end of media.
-*/
void S60MediaPlayerSession::endOfMedia()
{
TRACE("S60MediaPlayerSession::endOfMedia" << qtThisPtr());
-
m_state = QMediaPlayer::StoppedState;
setMediaStatus(QMediaPlayer::EndOfMedia);
- //there is a chance that user might have called play from EOF callback
- //if we are already in playing state, do not send state change callback
+ // There is a chance that user might have called play from EOF callback.
+ // If we are already in playing state, do not send state change callback.
emit positionChanged(m_duration);
- if(m_state == QMediaPlayer::StoppedState)
+ if (m_state == QMediaPlayer::StoppedState)
emit stateChanged(QMediaPlayer::StoppedState);
}
-/*!
- * The percentage of the temporary buffer filling before playback begins.
-
- When the player object is buffering; this property holds the percentage of
- the temporary buffer that is filled. The buffer will need to reach 100%
- filled before playback can resume, at which time the MediaStatus will be
- BufferedMedia.
-
- \sa mediaStatus()
-*/
-
void S60MediaPlayerSession::buffering()
{
TRACE("S60MediaPlayerSession::buffering" << qtThisPtr());
-
startStalledTimer();
setMediaStatus(QMediaPlayer::BufferingMedia);
-
-//Buffering cannot happen in stopped state. Hence update the state
+ // Buffering cannot happen in stopped state. Hence update the state
if (state() == QMediaPlayer::StoppedState)
setState(QMediaPlayer::PausedState);
}
-/*!
- * Buffer is filled with data and to for continuing/start playback.
-*/
-
void S60MediaPlayerSession::buffered()
{
TRACE("S60MediaPlayerSession::buffered" << qtThisPtr());
-
stopStalledTimer();
setMediaStatus(QMediaPlayer::BufferedMedia);
}
-/*!
- * Sets media status as stalled as waiting for the buffer to be filled to start playback.
-*/
-
void S60MediaPlayerSession::stalled()
{
TRACE("S60MediaPlayerSession::stalled" << qtThisPtr());
-
setMediaStatus(QMediaPlayer::StalledMedia);
}
-/*!
- * \return all the meta data entries in the current media source.
-*/
-
-QMap<QString, QVariant>& S60MediaPlayerSession::metaDataEntries()
+QMap<QString, QVariant> &S60MediaPlayerSession::metaDataEntries()
{
return m_metaDataMap;
}
-/*!
- * \return Error by converting Symbian specific error to Multimedia error.
-*/
-
QMediaPlayer::Error S60MediaPlayerSession::fromSymbianErrorToMultimediaError(int error)
{
switch(error) {
@@ -736,24 +552,14 @@ QMediaPlayer::Error S60MediaPlayerSession::fromSymbianErrorToMultimediaError(int
}
}
-/*!
- * \return error.
- */
-
int S60MediaPlayerSession::error() const
{
return m_error;
}
-/*!
- * Sets the error.
- * * If playback complete/prepare complete ..., etc with successful then sets error as ZERO
- * else Multimedia error.
-*/
-
void S60MediaPlayerSession::setError(int error, const QString &errorString, bool forceReset)
{
- if( forceReset ) {
+ if (forceReset) {
TRACE("S60MediaPlayerSession::setError" << qtThisPtr() << "forceReset");
m_error = KErrNone;
emit this->error(QMediaPlayer::NoError, QString());
@@ -800,142 +606,35 @@ void S60MediaPlayerSession::setAndEmitError(int error)
emit this->error(rateError, symbianError);
}
-/*!
- * emits the signal if there is a changes in position and buffering status.
- */
-
void S60MediaPlayerSession::tick()
{
m_progressduration = position();
emit positionChanged(m_progressduration);
-
if (bufferStatus() < 100)
emit bufferStatusChanged(bufferStatus());
}
-/*!
- * Starts the timer once the media source starts buffering.
-*/
-
void S60MediaPlayerSession::startProgressTimer()
{
TRACE("S60MediaPlayerSession::startProgressTimer" << qtThisPtr());
-
m_progressTimer->start(500);
}
-/*!
- * Stops the timer once the media source finished buffering.
-*/
-
void S60MediaPlayerSession::stopProgressTimer()
{
TRACE("S60MediaPlayerSession::stopProgressTimer" << qtThisPtr());
-
m_progressduration = 0;
m_progressTimer->stop();
}
-/*!
- * Starts the timer while waiting for some events to happen like source buffering or call backs etc.
- * So that if the events doesn't occur before stalled timer stops, it'll set the error/media status etc.
-*/
-
void S60MediaPlayerSession::startStalledTimer()
{
TRACE("S60MediaPlayerSession::startStalledTimer" << qtThisPtr());
-
m_stalledTimer->start(30000);
}
-/*!
- * Stops the timer when some events occurred while waiting for them.
- * media source started buffering or call back is received etc.
-*/
-
void S60MediaPlayerSession::stopStalledTimer()
{
TRACE("S60MediaPlayerSession::stopStalledTimer" << qtThisPtr());
-
m_stalledTimer->stop();
}
-
-/*!
- * \return Converted Symbian specific Descriptor to QString.
-*/
-
-QString S60MediaPlayerSession::TDesC2QString(const TDesC& aDescriptor)
-{
- return QString::fromUtf16(aDescriptor.Ptr(), aDescriptor.Length());
-}
-
-/*!
- * \return Converted QString to non-modifiable pointer Descriptor.
-*/
-
-TPtrC S60MediaPlayerSession::QString2TPtrC( const QString& string )
-{
- // Returned TPtrC is valid as long as the given parameter is valid and unmodified
- return TPtrC16(static_cast<const TUint16*>(string.utf16()), string.length());
-}
-
-/*!
- * \return Converted Symbian TRect object to QRect object.
-*/
-
-QRect S60MediaPlayerSession::TRect2QRect(const TRect& tr)
-{
- return QRect(tr.iTl.iX, tr.iTl.iY, tr.Width(), tr.Height());
-}
-
-/*!
- * \return converted QRect object to Symbian specific TRec object.
- */
-
-TRect S60MediaPlayerSession::QRect2TRect(const QRect& qr)
-{
- return TRect(TPoint(qr.left(), qr.top()), TSize(qr.width(), qr.height()));
-}
-
-/*!
- \fn bool S60MediaPlayerSession::isVideoAvailable();
-
-
- Returns TRUE if Video is available.
-*/
-
-/*!
- \fn bool S60MediaPlayerSession::isAudioAvailable();
-
-
- Returns TRUE if Audio is available.
-*/
-
-/*!
- \fn void S60MediaPlayerSession::setPlaybackRate (qreal rate);
-
-
- Sets \a rate play back rate on media source. getIsSeekable
-*/
-
-/*!
- \fn bool S60MediaPlayerSession::getIsSeekable () const;
-
-
- \return TRUE if Seekable possible on current media source else FALSE.
-*/
-
-/*!
- \fn QString S60MediaPlayerSession::activeEndpoint () const;
-
-
- \return active end point name..
-*/
-
-/*!
- \fn QString S60MediaPlayerSession::defaultEndpoint () const;
-
-
- \return default end point name.
-*/
-
diff --git a/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayersession.h b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayersession.h
index fc70d6ace8..cbba418b28 100644
--- a/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayersession.h
+++ b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayersession.h
@@ -42,18 +42,11 @@
#ifndef S60MEDIAPLAYERSESSION_H
#define S60MEDIAPLAYERSESSION_H
-#include <QtCore/qobject.h>
-#include <QtCore/qurl.h>
-#include <QtCore/qpair.h>
+#include <QtCore/QUrl>
+#include <QtCore/QRect>
#include <qmediaplayer.h>
-#include <e32cmn.h> // for TDesC
-#include <QRect>
#include "s60mediaplayerservice.h"
-
-_LIT( KSeekable, "Seekable" );
-_LIT( KFalse, "0");
-
QT_BEGIN_NAMESPACE
class QMediaTimeRange;
QT_END_NAMESPACE
@@ -68,7 +61,6 @@ public:
S60MediaPlayerSession(QObject *parent);
virtual ~S60MediaPlayerSession();
- // for player control interface to use
QMediaPlayer::State state() const;
QMediaPlayer::MediaStatus mediaStatus() const;
qint64 duration() const;
@@ -95,9 +87,9 @@ public:
virtual void setVideoRenderer(QObject *renderer);
void setMediaStatus(QMediaPlayer::MediaStatus);
void setState(QMediaPlayer::State state);
- void setAudioEndpoint(const QString& audioEndpoint);
+ void setAudioEndpoint(const QString &audioEndpoint);
virtual void setPlaybackRate(qreal rate) = 0;
- virtual bool getIsSeekable() const { return ETrue; }
+ virtual bool getIsSeekable() const;
TBool isStreaming();
protected:
@@ -113,33 +105,30 @@ protected:
virtual void updateMetaDataEntriesL() = 0;
virtual int doGetBufferStatusL() const = 0;
virtual qint64 doGetDurationL() const = 0;
- virtual void doSetAudioEndpoint(const QString& audioEndpoint) = 0;
+ virtual void doSetAudioEndpoint(const QString &audioEndpoint) = 0;
public:
- // From S60MediaPlayerAudioEndpointSelector
+ // S60MediaPlayerAudioEndpointSelector
virtual QString activeEndpoint() const = 0;
virtual QString defaultEndpoint() const = 0;
+
public Q_SLOTS:
- virtual void setActiveEndpoint(const QString& name) = 0;
+ virtual void setActiveEndpoint(const QString &name) = 0;
protected:
int error() const;
- void setError(int error, const QString &errorString = QString(), bool forceReset = false);
+ void setError(int error, const QString &errorString = QString(), bool forceReset = false);
void setAndEmitError(int error);
void loaded();
void buffering();
void buffered();
void endOfMedia();
- QMap<QString, QVariant>& metaDataEntries();
+ QMap<QString, QVariant> &metaDataEntries();
QMediaPlayer::Error fromSymbianErrorToMultimediaError(int error);
void startProgressTimer();
void stopProgressTimer();
void startStalledTimer();
void stopStalledTimer();
- QString TDesC2QString(const TDesC& aDescriptor);
- TPtrC QString2TPtrC( const QString& string );
- QRect TRect2QRect(const TRect& tr);
- TRect QRect2TRect(const QRect& qr);
protected slots:
void tick();
@@ -154,7 +143,7 @@ signals:
void audioAvailableChanged(bool audioAvailable);
void bufferStatusChanged(int percentFilled);
void seekableChanged(bool);
- void availablePlaybackRangesChanged(const QMediaTimeRange&);
+ void availablePlaybackRangesChanged(const QMediaTimeRange &range);
void metaDataChanged();
void error(int error, const QString &errorString);
void activeEndpointChanged(const QString &name);
@@ -164,7 +153,7 @@ signals:
void mutedChanged(bool muted);
protected:
- QUrl m_UrlPath;
+ QUrl m_url;
bool m_stream;
QMediaContent m_source;
bool m_isaudiostream;
diff --git a/plugins/multimedia/symbian/mmf/mediaplayer/s60videooutputinterface.h b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayerutils.cpp
index f0e993339d..093479e115 100644
--- a/plugins/multimedia/symbian/mmf/mediaplayer/s60videooutputinterface.h
+++ b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayerutils.cpp
@@ -1,3 +1,4 @@
+
/****************************************************************************
**
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
@@ -39,24 +40,25 @@
**
****************************************************************************/
-#ifndef S60VIDEOOUTPUTINTERFACE_H
-#define S60VIDEOOUTPUTINTERFACE_H
+#include "s60mediaplayerutils.h"
-#include <QtCore/qglobal.h>
-#include <QtGui/qwindowdefs.h>
-#include <coecntrl.h>
+QString TDesC2QString(const TDesC &des)
+{
+ return QString::fromUtf16(des.Ptr(), des.Length());
+}
-class S60VideoOutputInterface
+TPtrC QString2TPtrC(const QString &string)
{
-public:
- RWindow *videoWindowHandle() const { return videoWinId() ? static_cast<RWindow *>(videoWinId()->DrawableWindow()) : 0 ; }
- virtual WId videoWinId() const = 0;
- // If VIDEOOUTPUT_GRAPHICS_SURFACES is defined, the return value is the video
- // rectangle relative to the video window. If not, the return value is the
- // absolute screen rectangle.
- virtual QRect videoDisplayRect() const = 0;
- virtual Qt::AspectRatioMode videoAspectRatio() const = 0;
-};
+ // Returned TPtrC is valid as long as the given parameter is valid and unmodified
+ return TPtrC16(static_cast<const TUint16*>(string.utf16()), string.length());
+}
-#endif // S60VIDEOOUTPUTINTERFACE_H
+QRect TRect2QRect(const TRect &tr)
+{
+ return QRect(tr.iTl.iX, tr.iTl.iY, tr.Width(), tr.Height());
+}
+TRect QRect2TRect(const QRect &qr)
+{
+ return TRect(TPoint(qr.left(), qr.top()), TSize(qr.width(), qr.height()));
+}
diff --git a/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayerutils.h b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayerutils.h
new file mode 100644
index 0000000000..18b489dff5
--- /dev/null
+++ b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediaplayerutils.h
@@ -0,0 +1,54 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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, Nokia gives you certain additional
+** rights. These rights are described in the Nokia 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.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef S60MEDIAPLAYERUTILS_H
+#define S60MEDIAPLAYERUTILS_H
+
+#include <QtCore/QString>
+#include <QtCore/QRect>
+#include <e32cmn.h>
+
+QString TDesC2QString(const TDesC &des);
+TPtrC QString2TPtrC(const QString &string);
+QRect TRect2QRect(const TRect &tr);
+TRect QRect2TRect(const QRect &qr);
+
+#endif // S60MEDIAPLAYERUTILS_H
diff --git a/plugins/multimedia/symbian/mmf/mediaplayer/s60mediarecognizer.cpp b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediarecognizer.cpp
index a0bf0b35fc..b2dbdd5c87 100644
--- a/plugins/multimedia/symbian/mmf/mediaplayer/s60mediarecognizer.cpp
+++ b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediarecognizer.cpp
@@ -39,14 +39,13 @@
**
****************************************************************************/
+#include <QtCore/QUrl>
+#include <QtCore/QDir>
+#include "s60mediaplayerutils.h"
#include "s60mediarecognizer.h"
#include "s60mmtrace.h"
#include <e32def.h>
#include <e32cmn.h>
-#include <QtCore/qurl.h>
-#include <QtCore/qdir.h>
-#include <QtCore/qdebug.h>
-
#include <apgcli.h>
static const TInt KMimeTypePrefixLength = 6; // "audio/" or "video/"
@@ -55,34 +54,20 @@ _LIT(KMimeTypePrefixAudio, "audio/");
_LIT(KMimeTypePrefixVideo, "video/");
_LIT(KMimeTypeRingingTone, "application/vnd.nokia.ringing-tone");
-/*!
- Construct a media Recognizer with the given \a parent.
-*/
-
-S60MediaRecognizer::S60MediaRecognizer(QObject *parent) : QObject(parent)
+S60MediaRecognizer::S60MediaRecognizer(QObject *parent)
+ : QObject(parent)
{
TRACE("S60MediaRecognizer::S60MediaRecognizer" << qtThisPtr());
}
-/*!
- Destroys a media Recognizer.
-*/
-
S60MediaRecognizer::~S60MediaRecognizer()
{
TRACE("S60MediaRecognizer::~S60MediaRecognizer" << qtThisPtr());
-
m_file.Close();
m_fileServer.Close();
m_recognizer.Close();
}
-/*!
- * \return media type of \a url.
- * \a url may be a streaming link or a local file.
- * If \a url is local file then identifies the media type and returns it.
-*/
-
S60MediaRecognizer::MediaType S60MediaRecognizer::mediaType(const QUrl &url)
{
S60MediaRecognizer::MediaType result;
@@ -95,62 +80,36 @@ S60MediaRecognizer::MediaType S60MediaRecognizer::mediaType(const QUrl &url)
return result;
}
-/*!
- * \return Media type of \a file name by recognizing its mimetype whether its audio or video.
-*/
-
-S60MediaRecognizer::MediaType S60MediaRecognizer::identifyMediaType(const QString& fileName)
+S60MediaRecognizer::MediaType S60MediaRecognizer::identifyMediaType(const QString &fileName)
{
-
- S60MediaRecognizer::MediaType result = Video; // default to videoplayer
+ S60MediaRecognizer::MediaType result = Video;
bool recognizerOpened = false;
-
TInt err = m_recognizer.Connect();
- if (err == KErrNone) {
+ if (err == KErrNone)
recognizerOpened = true;
- }
-
err = m_fileServer.Connect();
- if (err == KErrNone) {
+ if (err == KErrNone)
recognizerOpened = true;
- }
-
// This is needed for sharing file handles for the recognizer
err = m_fileServer.ShareProtected();
- if (err == KErrNone) {
+ if (err == KErrNone)
recognizerOpened = true;
- }
-
if (recognizerOpened) {
m_file.Close();
- err = m_file.Open(m_fileServer, QString2TPtrC(QDir::toNativeSeparators(fileName)), EFileRead |
- EFileShareReadersOnly);
-
+ err = m_file.Open(m_fileServer, QString2TPtrC(QDir::toNativeSeparators(fileName)),
+ EFileRead | EFileShareReadersOnly);
if (err == KErrNone) {
TDataRecognitionResult recognizerResult;
err = m_recognizer.RecognizeData(m_file, recognizerResult);
if (err == KErrNone) {
const TPtrC mimeType = recognizerResult.iDataType.Des();
-
- if (mimeType.Left(KMimeTypePrefixLength).Compare(KMimeTypePrefixAudio) == 0 ||
- mimeType.Compare(KMimeTypeRingingTone) == 0) {
+ if (mimeType.Left(KMimeTypePrefixLength).Compare(KMimeTypePrefixAudio) == 0
+ || mimeType.Compare(KMimeTypeRingingTone) == 0)
result = Audio;
- } else if (mimeType.Left(KMimeTypePrefixLength).Compare(KMimeTypePrefixVideo) == 0) {
+ else if (mimeType.Left(KMimeTypePrefixLength).Compare(KMimeTypePrefixVideo) == 0)
result = Video;
- }
}
}
}
-
return result;
}
-
-/*!
- * \return Symbian modifiable pointer descriptor from a QString \a string.
- */
-
-TPtrC S60MediaRecognizer::QString2TPtrC( const QString& string )
-{
- // Returned TPtrC is valid as long as the given parameter is valid and unmodified
- return TPtrC16(static_cast<const TUint16*>(string.utf16()), string.length());
-}
diff --git a/plugins/multimedia/symbian/mmf/mediaplayer/s60mediarecognizer.h b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediarecognizer.h
index 0d654ca70b..300e066ff6 100644
--- a/plugins/multimedia/symbian/mmf/mediaplayer/s60mediarecognizer.h
+++ b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediarecognizer.h
@@ -39,11 +39,10 @@
**
****************************************************************************/
-#ifndef S60MEDIARECOGNIZER_H_
-#define S60MEDIARECOGNIZER_H_
-
-#include <QtCore/qobject.h>
+#ifndef S60MEDIARECOGNIZER_H
+#define S60MEDIARECOGNIZER_H
+#include <QtCore/QObject>
#include <apgcli.h>
#include <f32file.h>
@@ -52,7 +51,6 @@ class QUrl;
class S60MediaRecognizer : public QObject
{
Q_OBJECT
-
public:
enum MediaType {
Audio,
@@ -65,10 +63,7 @@ public:
~S60MediaRecognizer();
S60MediaRecognizer::MediaType mediaType(const QUrl &url);
- S60MediaRecognizer::MediaType identifyMediaType(const QString& fileName);
-
-protected:
- TPtrC QString2TPtrC( const QString& string );
+ S60MediaRecognizer::MediaType identifyMediaType(const QString &fileName);
private:
RApaLsSession m_recognizer;
@@ -76,4 +71,4 @@ private:
RFs m_fileServer;
};
-#endif /* S60MEDIARECOGNIZER_H_ */
+#endif // S60MEDIARECOGNIZER_H
diff --git a/plugins/multimedia/symbian/mmf/mediaplayer/s60mediasettings.cpp b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediasettings.cpp
new file mode 100644
index 0000000000..42ec348cd3
--- /dev/null
+++ b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediasettings.cpp
@@ -0,0 +1,125 @@
+
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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, Nokia gives you certain additional
+** rights. These rights are described in the Nokia 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.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "s60mediasettings.h"
+
+S60MediaSettings::S60MediaSettings(QObject *parent)
+ : QObject(parent)
+ , m_volume(30)
+ , m_muted(false)
+ , m_playbackRate(0)
+ , m_mediaStatus(QMediaPlayer::NoMedia)
+ , m_audioEndpoint(QString("Default"))
+ , m_videoOutput(0)
+{
+
+}
+
+void S60MediaSettings::setVolume(int volume)
+{
+ m_volume = volume;
+}
+
+void S60MediaSettings::setMuted(bool muted)
+{
+ m_muted = muted;
+}
+
+void S60MediaSettings::setPlaybackRate(qreal rate)
+{
+ m_playbackRate = rate;
+}
+
+void S60MediaSettings::setMediaStatus(QMediaPlayer::MediaStatus status)
+{
+ m_mediaStatus = status;
+}
+
+void S60MediaSettings::setAudioEndpoint(const QString &audioEndpoint)
+{
+ m_audioEndpoint = audioEndpoint;
+}
+
+void S60MediaSettings::setMediaType(MediaType type)
+{
+ m_mediaType = type;
+}
+
+void S60MediaSettings::setVideoOutput(QObject *value)
+{
+ m_videoOutput = value;
+}
+
+int S60MediaSettings::volume() const
+{
+ return m_volume;
+}
+
+bool S60MediaSettings::isMuted() const
+{
+ return m_muted;
+}
+
+qreal S60MediaSettings::playbackRate() const
+{
+ return m_playbackRate;
+}
+
+QMediaPlayer::MediaStatus S60MediaSettings::mediaStatus() const
+{
+ return m_mediaStatus;
+}
+
+QString S60MediaSettings::audioEndpoint() const
+{
+ return m_audioEndpoint;
+}
+
+S60MediaSettings::MediaType S60MediaSettings::mediaType() const
+{
+ return m_mediaType;
+}
+
+QObject *S60MediaSettings::videoOutput() const
+{
+ return m_videoOutput;
+}
diff --git a/plugins/multimedia/symbian/mmf/mediaplayer/s60mediasettings.h b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediasettings.h
new file mode 100644
index 0000000000..0e2cc229e6
--- /dev/null
+++ b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediasettings.h
@@ -0,0 +1,87 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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, Nokia gives you certain additional
+** rights. These rights are described in the Nokia 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.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef S60MEDIASETTINGS_H
+#define S60MEDIASETTINGS_H
+
+#include <QtCore/QObject>
+#include <QtCore/QString>
+#include <qmediaplayer.h>
+
+class S60MediaSettings : public QObject
+{
+public:
+ S60MediaSettings(QObject *parent = 0);
+
+ enum MediaType {
+ Unknown,
+ Video,
+ Audio,
+ Data
+ };
+
+ void setVolume(int volume);
+ void setMuted(bool muted);
+ void setPlaybackRate(qreal rate);
+ void setMediaStatus(QMediaPlayer::MediaStatus status);
+ void setAudioEndpoint(const QString &audioEndpoint);
+ void setMediaType(MediaType type);
+ void setVideoOutput(QObject *value);
+
+ int volume() const;
+ bool isMuted() const;
+ qreal playbackRate() const;
+ QMediaPlayer::MediaStatus mediaStatus() const;
+ QString audioEndpoint() const;
+ MediaType mediaType() const;
+ QObject *videoOutput() const;
+
+private:
+ int m_volume;
+ bool m_muted;
+ qreal m_playbackRate;
+ QMediaPlayer::MediaStatus m_mediaStatus;
+ QString m_audioEndpoint;
+ MediaType m_mediaType;
+ QObject *m_videoOutput;
+};
+
+#endif // S60MEDIASETTINGS_H
diff --git a/plugins/multimedia/symbian/mmf/mediaplayer/s60mediastreamcontrol.cpp b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediastreamcontrol.cpp
index 61a8e4109e..c9fba84460 100644
--- a/plugins/multimedia/symbian/mmf/mediaplayer/s60mediastreamcontrol.cpp
+++ b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediastreamcontrol.cpp
@@ -43,40 +43,22 @@
#include "s60mediaplayersession.h"
#include "s60mediaplayercontrol.h"
#include "s60mmtrace.h"
-#include <qmediastreamscontrol.h>
-
-#include <QtCore/qdir.h>
-#include <QtCore/qurl.h>
-#include <QtCore/qdebug.h>
-
-/*!
- Constructs a new media streams control with the given \a control.
-*/
S60MediaStreamControl::S60MediaStreamControl(QObject *control, QObject *parent)
: QMediaStreamsControl(parent)
- , m_control(NULL)
+ , m_control(0)
, m_mediaType(S60MediaSettings::Unknown)
{
TRACE("S60MediaStreamControl::S60MediaStreamControl" << qtThisPtr());
-
m_control = qobject_cast<S60MediaPlayerControl*>(control);
m_mediaType = m_control->mediaControlSettings().mediaType();
}
-/*!
- Destroys a media streams control.
-*/
-
S60MediaStreamControl::~S60MediaStreamControl()
{
TRACE("S60MediaStreamControl::~S60MediaStreamControl" << qtThisPtr());
}
-/*!
- \return the number of media streams.
-*/
-
int S60MediaStreamControl::streamCount()
{
int streamCount = 0;
@@ -87,34 +69,20 @@ int S60MediaStreamControl::streamCount()
return streamCount;
}
-/*!
- \return the type of a media \a streamNumber.
-*/
-
QMediaStreamsControl::StreamType S60MediaStreamControl::streamType(int streamNumber)
{
Q_UNUSED(streamNumber);
-
QMediaStreamsControl::StreamType type = QMediaStreamsControl::UnknownStream;
-
if (m_control->mediaControlSettings().mediaType() == S60MediaSettings::Video)
type = QMediaStreamsControl::VideoStream;
else
type = QMediaStreamsControl::AudioStream;
-
return type;
}
-/*!
- \return the meta-data value of \a key for a given \a streamNumber.
-
- Useful metadata keya are QtMultimediaKit::Title, QtMultimediaKit::Description and QtMultimediaKit::Language.
-*/
-
QVariant S60MediaStreamControl::metaData(int streamNumber, QtMultimediaKit::MetaData key)
{
Q_UNUSED(streamNumber);
-
if (m_control->session()) {
if (m_control->session()->isMetadataAvailable())
return m_control->session()->metaData(key);
@@ -122,10 +90,6 @@ QVariant S60MediaStreamControl::metaData(int streamNumber, QtMultimediaKit::Meta
return QVariant();
}
-/*!
- \return true if the media \a streamNumber is active else false.
-*/
-
bool S60MediaStreamControl::isActive(int streamNumber)
{
if (m_control->mediaControlSettings().mediaType() == S60MediaSettings::Video) {
@@ -138,37 +102,20 @@ bool S60MediaStreamControl::isActive(int streamNumber)
break;
}
}
-
return m_control->isAudioAvailable();
}
-/*!
- Sets the active \a streamNumber of a media \a state.
-
- Symbian MMF does not support enabling or disabling specific media streams.
-
- Setting the active state of a media stream to true will activate it. If any other stream
- of the same type was previously active it will be deactivated. Setting the active state fo a
- media stream to false will deactivate it.
-*/
-
void S60MediaStreamControl::setActive(int streamNumber, bool state)
{
TRACE("S60MediaStreamControl::setActive" << qtThisPtr()
<< "streamNumber" << streamNumber << "state" << state);
-
Q_UNUSED(streamNumber);
Q_UNUSED(state);
// Symbian MMF does not support enabling or disabling specific media streams
}
-/*!
- The signal is emitted when the available streams list is changed.
-*/
-
void S60MediaStreamControl::handleStreamsChanged()
{
TRACE("S60MediaStreamControl::handleStreamsChanged" << qtThisPtr());
-
emit streamsChanged();
}
diff --git a/plugins/multimedia/symbian/mmf/mediaplayer/s60mediastreamcontrol.h b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediastreamcontrol.h
index 6df90c4b67..89a8b5a0e5 100644
--- a/plugins/multimedia/symbian/mmf/mediaplayer/s60mediastreamcontrol.h
+++ b/plugins/multimedia/symbian/mmf/mediaplayer/s60mediastreamcontrol.h
@@ -42,12 +42,11 @@
#ifndef S60MEDIASTREAMCONTROL_H
#define S60MEDIASTREAMCONTROL_H
-#include <QVariant>
-
-#include "s60mediaplayercontrol.h"
-
+#include <QtCore/QVariant>
#include <qmediastreamscontrol.h>
#include <qtmedianamespace.h>
+#include "s60mediaplayercontrol.h"
+#include "s60mediasettings.h"
QT_USE_NAMESPACE
@@ -61,7 +60,7 @@ public:
S60MediaStreamControl(QObject *session, QObject *parent = 0);
~S60MediaStreamControl();
- // from QMediaStreamsControl
+ // QMediaStreamsControl
int streamCount();
QMediaStreamsControl::StreamType streamType(int streamNumber);
QVariant metaData(int streamNumber, QtMultimediaKit::MetaData key);
@@ -73,7 +72,7 @@ public Q_SLOTS:
private:
S60MediaPlayerControl *m_control;
- S60MediaSettings::TMediaType m_mediaType;
+ S60MediaSettings::MediaType m_mediaType;
};
-#endif //S60MEDIASTREAMCONTROL_H
+#endif // S60MEDIASTREAMCONTROL_H
diff --git a/plugins/multimedia/symbian/mmf/mediaplayer/s60videoplayersession.cpp b/plugins/multimedia/symbian/mmf/mediaplayer/s60videoplayersession.cpp
index 43d40553dd..e284f58e43 100644
--- a/plugins/multimedia/symbian/mmf/mediaplayer/s60videoplayersession.cpp
+++ b/plugins/multimedia/symbian/mmf/mediaplayer/s60videoplayersession.cpp
@@ -41,12 +41,18 @@
#include "s60videoplayersession.h"
#include "s60mediaplayerservice.h"
+#include "s60mediaplayerutils.h"
#include "s60videowidgetcontrol.h"
#include "s60videowidgetdisplay.h"
#include "s60videowindowcontrol.h"
#include "s60videowindowdisplay.h"
#include "s60mmtrace.h"
+#ifdef VIDEOOUTPUT_GRAPHICS_SURFACES
+#include "s60videoeglrenderercontrol.h"
+#include "s60nativewindow.h"
+#endif
+
#include <QtCore/QTimer>
#include <QtGui/QApplication>
#include <QtGui/QDesktopWidget>
@@ -66,8 +72,10 @@
const QString DefaultAudioEndpoint = QLatin1String("Default");
const TUid KHelixUID = {0x101F8514};
+_LIT(KSeekable, "Seekable" );
+_LIT(KFalse, "0");
-//Hard-coding the command to support older versions.
+// Hard-coding the command to support older versions.
const TInt KMMFROPControllerEnablePausedLoadingStatus = 7;
TVideoRotation videoRotation(qreal angle)
@@ -149,18 +157,17 @@ bool S60VideoPlayerEventHandler::filterEvent(void *message, long *result)
return ret;
}
-/*!
- Constructs the CVideoPlayerUtility2 object with given \a service and \a object.
- And Registers for Video Loading Notifications.
-*/
S60VideoPlayerSession::S60VideoPlayerSession(QMediaService *service, S60MediaNetworkAccessControl *object)
: S60MediaPlayerSession(service)
, m_accessPointId(0)
+ , m_networkAccessControl(object)
, m_wsSession(&CCoeEnv::Static()->WsSession())
, m_screenDevice(CCoeEnv::Static()->ScreenDevice())
, m_service(service)
, m_player(0)
-#ifndef VIDEOOUTPUT_GRAPHICS_SURFACES
+#ifdef VIDEOOUTPUT_GRAPHICS_SURFACES
+ , m_nativeSurface(TSurfaceId::CreateNullId())
+#else
, m_dsaActive(false)
, m_dsaStopped(false)
#endif
@@ -178,8 +185,6 @@ S60VideoPlayerSession::S60VideoPlayerSession(QMediaService *service, S60MediaNet
#endif
{
TRACE("S60VideoPlayerSession::S60VideoPlayerSession" << qtThisPtr());
-
- m_networkAccessControl = object;
#ifdef VIDEOOUTPUT_GRAPHICS_SURFACES
QT_TRAP_THROWING(m_player = CVideoPlayerUtility2::NewL(
*this,
@@ -187,6 +192,9 @@ S60VideoPlayerSession::S60VideoPlayerSession(QMediaService *service, S60MediaNet
EMdaPriorityPreferenceNone
));
m_player->RegisterForVideoLoadingNotification(*this);
+ m_dummyWindow = new S60NativeWindow(this);
+ connect(this, SIGNAL(nativeSurfaceChanged(TSurfaceId)),
+ m_dummyWindow, SLOT(setNativeSurface(TSurfaceId)));
#else
RWindow *window = 0;
QRect extentRect;
@@ -217,12 +225,6 @@ S60VideoPlayerSession::S60VideoPlayerSession(QMediaService *service, S60MediaNet
S60VideoPlayerEventHandler::instance()->addApplicationFocusObserver(this);
}
-/*!
- Destroys the CVideoPlayerUtility2 object.
-
- And Unregister the observer.
-*/
-
S60VideoPlayerSession::~S60VideoPlayerSession()
{
TRACE("S60VideoPlayerSession::~S60VideoPlayerSession" << qtThisPtr());
@@ -254,17 +256,12 @@ void S60VideoPlayerSession::applicationLostFocus()
TRACE("S60VideoPlayerSession::applicationLostFocus" << qtThisPtr());
if (QMediaPlayer::PlayingState == state()) {
if (!m_isaudiostream) {
- m_backendInitiatedPause = true;
- pause();
+ m_backendInitiatedPause = true;
+ pause();
}
}
}
-/*!
-
- Opens the a file from \a path.
-*/
-
void S60VideoPlayerSession::doLoadL(const TDesC &path)
{
#ifdef HAS_AUDIOROUTING_IN_VIDEOPLAYER
@@ -272,29 +269,18 @@ void S60VideoPlayerSession::doLoadL(const TDesC &path)
if (m_audioOutput)
m_audioOutput->UnregisterObserver(*this);
delete m_audioOutput;
- m_audioOutput = NULL;
+ m_audioOutput = 0;
#endif
m_player->OpenFileL(path, KHelixUID);
}
-/*!
- Sets the playbackRate with \a rate.
-*/
-
void S60VideoPlayerSession::setPlaybackRate(qreal rate)
{
- /*
- * setPlaybackRate is not supported in S60 3.1 and 3.2
- * This flag will be defined for 3.1 and 3.2
- */
#ifdef PLAY_RATE_NOT_SUPPORTED
TRACE("S60VideoPlayerSession::setPlaybackRate" << qtThisPtr()
<< "rate" << rate << "not supported");
#else
TRACE("S60VideoPlayerSession::setPlaybackRate" << qtThisPtr() << "rate" << rate);
- //setPlayVelocity requires rate in the form of
- //50 = 0.5x ;100 = 1.x ; 200 = 2.x ; 300 = 3.x
- //so multiplying rate with 100
TRAPD(err, m_player->SetPlayVelocityL((TInt)(rate*100)));
if (KErrNone == err)
emit playbackRateChanged(rate);
@@ -303,11 +289,6 @@ void S60VideoPlayerSession::setPlaybackRate(qreal rate)
#endif
}
-/*!
-
- Opens the a Url from \a path for streaming the source.
-*/
-
void S60VideoPlayerSession::doLoadUrlL(const TDesC &path)
{
#ifdef HAS_AUDIOROUTING_IN_VIDEOPLAYER
@@ -315,17 +296,12 @@ void S60VideoPlayerSession::doLoadUrlL(const TDesC &path)
if (m_audioOutput)
m_audioOutput->UnregisterObserver(*this);
delete m_audioOutput;
- m_audioOutput = NULL;
+ m_audioOutput = 0;
#endif
m_accessPointId = m_networkAccessControl->accessPointId();
m_player->OpenUrlL(path, m_accessPointId, KNullDesC8, KHelixUID);
}
-/*!
-
- Returns the percentage of the video clip loaded.
-*/
-
int S60VideoPlayerSession::doGetBufferStatusL() const
{
int progress = 0;
@@ -333,24 +309,20 @@ int S60VideoPlayerSession::doGetBufferStatusL() const
return progress;
}
-/*!
- Returns the duration of the video sample in microseconds.
-*/
-
qint64 S60VideoPlayerSession::doGetDurationL() const
{
return m_player->DurationL().Int64() / qint64(1000);
}
-/*!
- * Sets the \a videooutput for video rendering.
-*/
-
void S60VideoPlayerSession::setVideoRenderer(QObject *videoOutput)
{
TRACE("S60VideoPlayerSession::setVideoRenderer" << qtThisPtr()
<< "output" << videoOutput);
if (videoOutput != m_videoOutputControl) {
+ if (m_videoOutputControl) {
+ disconnect(m_videoOutputControl);
+ m_videoOutputControl->disconnect(this);
+ }
if (m_videoOutputDisplay) {
m_videoOutputDisplay->setHasContent(false);
disconnect(m_videoOutputDisplay);
@@ -358,10 +330,21 @@ void S60VideoPlayerSession::setVideoRenderer(QObject *videoOutput)
m_videoOutputDisplay = 0;
}
if (videoOutput) {
+ TRACE("S60VideoPlayerSession::setVideoRenderer output" << videoOutput);
+#ifdef VIDEOOUTPUT_GRAPHICS_SURFACES
+ if (S60VideoEglRendererControl *control = qobject_cast<S60VideoEglRendererControl *>(videoOutput)) {
+ control->setNativeSurface(m_nativeSurface);
+ control->setNativeSize(m_nativeSize);
+ connect(this, SIGNAL(nativeSurfaceChanged(TSurfaceId)), control, SLOT(setNativeSurface(TSurfaceId)));
+ connect(this, SIGNAL(nativeSizeChanged(QSize)), control, SLOT(setNativeSize(QSize)));
+ }
+ else
+#endif
if (S60VideoWidgetControl *control = qobject_cast<S60VideoWidgetControl *>(videoOutput))
m_videoOutputDisplay = control->display();
else if (S60VideoWindowControl *control = qobject_cast<S60VideoWindowControl *>(videoOutput))
m_videoOutputDisplay = control->display();
+ TRACE("S60VideoPlayerSession::setVideoRenderer display" << m_videoOutputDisplay);
if (m_videoOutputDisplay) {
m_videoOutputDisplay->setHasContent(QMediaPlayer::PlayingState == state());
m_videoOutputDisplay->setNativeSize(m_nativeSize);
@@ -381,9 +364,6 @@ void S60VideoPlayerSession::setVideoRenderer(QObject *videoOutput)
}
}
-/*!
- * Apply the pending changes for window.
-*/
void S60VideoPlayerSession::applyPendingChanges(bool force)
{
TRACE("S60VideoPlayerSession::applyPendingChanges" << qtThisPtr()
@@ -473,10 +453,6 @@ void S60VideoPlayerSession::applyPendingChanges(bool force)
}
}
-/*!
- * \return TRUE if video is available.
-*/
-
bool S60VideoPlayerSession::isVideoAvailable()
{
#ifdef PRE_S60_50_PLATFORM
@@ -501,10 +477,6 @@ bool S60VideoPlayerSession::isVideoAvailable()
}
-/*!
- * \return TRUE if Audio available.
-*/
-
bool S60VideoPlayerSession::isAudioAvailable()
{
if ( mediaStatus() == QMediaPlayer::LoadingMedia
@@ -524,10 +496,6 @@ bool S60VideoPlayerSession::isAudioAvailable()
}
}
-/*!
- Start or resume playing the current source.
-*/
-
void S60VideoPlayerSession::doPlay()
{
m_player->Play();
@@ -535,91 +503,59 @@ void S60VideoPlayerSession::doPlay()
m_videoOutputDisplay->setHasContent(true);
}
-/*!
- Pause playing the current source.
-*/
-
void S60VideoPlayerSession::doPauseL()
{
m_player->PauseL();
}
-/*!
-
- Stop playing, and reset the play position to the beginning.
-*/
-
void S60VideoPlayerSession::doStop()
{
if (m_stream)
m_networkAccessControl->resetIndex();
-
if (m_videoOutputDisplay)
m_videoOutputDisplay->setHasContent(false);
-
m_player->Stop();
}
-/*!
- Closes the current audio clip (allowing another clip to be opened)
-*/
-
void S60VideoPlayerSession::doClose()
{
#ifdef HAS_AUDIOROUTING_IN_VIDEOPLAYER
if (m_audioOutput) {
m_audioOutput->UnregisterObserver(*this);
delete m_audioOutput;
- m_audioOutput = NULL;
+ m_audioOutput = 0;
}
#endif
-
m_player->Close();
-// close will remove the window handle in media clint video.
-// So mark it in pending changes.
+#ifdef VIDEOOUTPUT_GRAPHICS_SURFACES
+ m_nativeSurface = TSurfaceId::CreateNullId();
+#endif
+
+ // Close will remove the window handle from m_player, so mark
+ // it in pending changes.
m_pendingChanges |= WindowHandle;
}
-/*!
- * Returns the current playback position in microseconds from the start of the clip.
-
-*/
-
qint64 S60VideoPlayerSession::doGetPositionL() const
{
return m_player->PositionL().Int64() / qint64(1000);
}
-/*!
- Sets the current playback position to \a microSeconds from the start of the clip.
-*/
-
void S60VideoPlayerSession::doSetPositionL(qint64 microSeconds)
{
m_player->SetPositionL(TTimeIntervalMicroSeconds(microSeconds));
}
-/*!
-
- Changes the current playback volume to specified \a value.
-*/
-
void S60VideoPlayerSession::doSetVolumeL(int volume)
{
m_player->SetVolumeL(volume * m_player->MaxVolume() / 100);
}
-/*!
- * Notification to the client that the opening of the video clip has completed.
- * If successful then an \a aError will be ZERO else system wide error.
-*/
-
void S60VideoPlayerSession::MvpuoOpenComplete(TInt aError)
{
TRACE("S60VideoPlayerSession::MvpuoOpenComplete" << qtThisPtr()
<< "error" << aError);
-
setError(aError);
#ifdef HTTP_COOKIES_ENABLED
if (KErrNone == aError) {
@@ -660,26 +596,19 @@ void S60VideoPlayerSession::MvpuoOpenComplete(TInt aError)
if (KErrNone == aError)
m_player->Prepare();
#endif
- const TMMFMessageDestinationPckg dest( KUidInterfaceMMFROPController );
+ const TMMFMessageDestinationPckg dest(KUidInterfaceMMFROPController);
TRAP_IGNORE(m_player->CustomCommandSync(dest, KMMFROPControllerEnablePausedLoadingStatus, KNullDesC8, KNullDesC8));
}
-/*!
- * Notification to the client that the opening of the video clip has been preapred.
- * If successful then an \a aError will be ZERO else system wide error.
-*/
-
void S60VideoPlayerSession::MvpuoPrepareComplete(TInt aError)
{
TRACE("S60VideoPlayerSession::MvpuoPrepareComplete" << qtThisPtr()
<< "error" << aError);
-
- if (KErrNone == aError && m_stream) {
+ if (KErrNone == aError && m_stream)
emit accessPointChanged(m_accessPointId);
- }
if (KErrCouldNotConnect == aError && !(m_networkAccessControl->isLastAccessPoint())) {
load(m_source);
- return;
+ return;
}
TInt error = aError;
if (KErrNone == error || KErrMMPartialPlayback == error) {
@@ -700,16 +629,32 @@ void S60VideoPlayerSession::MvpuoPrepareComplete(TInt aError)
#endif
}
if (KErrNone == error) {
- // changes made to play without pausing in case of audio streaming use case
if (m_player->VideoFormatMimeType().Length() == 0) {
- m_isaudiostream = true;
- m_backendInitiatedPause = false;
- play();
+ m_isaudiostream = true;
+ m_backendInitiatedPause = false;
+ play();
} else {
- m_isaudiostream = false;
+ m_isaudiostream = false;
}
- applyPendingChanges(true); // force apply even though state is not Loaded
- if (KErrNone == this->error()) // applyPendingChanges() can call setError()
+#ifdef VIDEOOUTPUT_GRAPHICS_SURFACES
+ // Register for callbacks via MMMFSurfaceEventHandler
+ TRAP(error, m_player->AddDisplayL(*m_wsSession,
+ m_screenDevice->GetScreenNumber(),
+ *this));
+ if (!error)
+ // When switching from the 'direct' video rendering path (which
+ // sets the video surface as the background of a native window)
+ // to the EGL rendering path (which uses EGL endpoint to extract
+ // video frames as EGL images), the native window is first removed,
+ // then the EGL endpoint is created. In order to prevent the MMF
+ // from destroying the video surface when the window is removed,
+ // we must also provide a dummy, non-displayed window handle.
+ TRAP(error, m_player->AddDisplayWindowL(*m_wsSession, *m_screenDevice,
+ *m_dummyWindow->windowHandle(),
+ TRect(), TRect()));
+#endif
+ applyPendingChanges(true); // force apply even though state is not Loaded
+ if (KErrNone == error && KErrNone == this->error()) // applyPendingChanges() can call setError()
loaded();
}
} else {
@@ -717,30 +662,18 @@ void S60VideoPlayerSession::MvpuoPrepareComplete(TInt aError)
}
}
-/*!
- * Notification that frame requested by a call to GetFrameL is ready.
-*/
-
void S60VideoPlayerSession::MvpuoFrameReady(CFbsBitmap &aFrame, TInt aError)
{
Q_UNUSED(aFrame);
Q_UNUSED(aError);
}
-/*!
- * Notification that video playback has completed.
- * If successful then \a aError will be ZERO else system wide error.
- * This not called if playback is explicitly stopped by calling stop.
-*/
-
void S60VideoPlayerSession::MvpuoPlayComplete(TInt aError)
{
TRACE("S60VideoPlayerSession::MvpuoPlayComplete" << qtThisPtr()
<< "error" << aError);
-
if (m_stream)
- m_networkAccessControl->resetIndex();
-
+ m_networkAccessControl->resetIndex();
if (aError != KErrNone) {
setError(aError);
doClose();
@@ -749,12 +682,6 @@ void S60VideoPlayerSession::MvpuoPlayComplete(TInt aError)
}
}
-
-/*!
- * General \a event notification from controller.
- * These events are specified by the supplier of the controller.
-*/
-
void S60VideoPlayerSession::MvpuoEvent(const TMMFEvent &aEvent)
{
TRACE("S60VideoPlayerSession::MvpuoEvent" << qtThisPtr()
@@ -766,18 +693,46 @@ void S60VideoPlayerSession::MvpuoEvent(const TMMFEvent &aEvent)
}
}
-/*!
+#ifdef VIDEOOUTPUT_GRAPHICS_SURFACES
+void S60VideoPlayerSession::MmsehSurfaceCreated(TInt aDisplayId, const TSurfaceId& aId,
+ const TRect& aCropRect,
+ TVideoAspectRatio aAspectRatio)
+{
+ TRACE("S60VideoPlayerSession::MmsehSurfaceCreated" << qtThisPtr() << "id" << (void*)aId.iInternal[3]);
+ Q_UNUSED(aCropRect)
+ Q_UNUSED(aAspectRatio)
+ Q_ASSERT(m_nativeSurface.IsNull());
+ m_nativeSurface = aId;
+ emit nativeSurfaceChanged(m_nativeSurface);
+}
- Updates meta data entries in the current video clip.
-*/
+void S60VideoPlayerSession::MmsehSurfaceParametersChanged(const TSurfaceId& aId,
+ const TRect& aCropRect,
+ TVideoAspectRatio aAspectRatio)
+{
+ TRACE("S60VideoPlayerSession::MmsehSurfaceParametersChanged" << qtThisPtr() << "id" << (void*)aId.iInternal[3]);
+ Q_UNUSED(aId)
+ Q_UNUSED(aCropRect)
+ Q_UNUSED(aAspectRatio)
+}
+
+void S60VideoPlayerSession::MmsehRemoveSurface(const TSurfaceId& aId)
+{
+ TRACE("S60VideoPlayerSession::MmsehRemoveSurface" << qtThisPtr() << "id" << (void*)aId.iInternal[3]);
+ if (aId == m_nativeSurface) {
+ m_nativeSurface = TSurfaceId::CreateNullId();
+ emit nativeSurfaceChanged(m_nativeSurface);
+ }
+}
+#endif // VIDEOOUTPUT_GRAPHICS_SURFACES
void S60VideoPlayerSession::updateMetaDataEntriesL()
{
metaDataEntries().clear();
int numberOfMetaDataEntries = 0;
numberOfMetaDataEntries = m_player->NumberOfMetaDataEntriesL();
- for (int i = 0; i < numberOfMetaDataEntries; i++) {
- CMMFMetaDataEntry *entry = NULL;
+ for (int i=0; i<numberOfMetaDataEntries; ++i) {
+ CMMFMetaDataEntry *entry = 0;
entry = m_player->MetaDataEntryL(i);
metaDataEntries().insert(TDesC2QString(entry->Name()), TDesC2QString(entry->Value()));
delete entry;
@@ -785,38 +740,23 @@ void S60VideoPlayerSession::updateMetaDataEntriesL()
emit metaDataChanged();
}
-/*!
- * Apply the window changes when window handle changes.
-*/
-
void S60VideoPlayerSession::windowHandleChanged()
{
TRACE("S60VideoPlayerSession::windowHandleChanged" << qtThisPtr());
-
m_pendingChanges |= WindowHandle;
applyPendingChanges();
}
-/*!
- * Apply the window changes when display Rect changes.
-*/
-
void S60VideoPlayerSession::displayRectChanged()
{
TRACE("S60VideoPlayerSession::displayRectChanged" << qtThisPtr());
-
m_pendingChanges |= DisplayRect;
applyPendingChanges();
}
-/*!
- * Apply the window changes when aspect Ratio changes.
-*/
-
void S60VideoPlayerSession::aspectRatioChanged()
{
TRACE("S60VideoPlayerSession::aspectRatioChanged" << qtThisPtr());
-
m_pendingChanges |= ScaleFactors;
applyPendingChanges();
}
@@ -824,7 +764,6 @@ void S60VideoPlayerSession::aspectRatioChanged()
void S60VideoPlayerSession::rotationChanged()
{
TRACE("S60VideoPlayerSession::rotationChanged" << qtThisPtr());
-
m_pendingChanges |= ScaleFactors;
m_pendingChanges |= Rotation;
applyPendingChanges();
@@ -834,14 +773,12 @@ void S60VideoPlayerSession::rotationChanged()
void S60VideoPlayerSession::suspendDirectScreenAccess()
{
TRACE("S60VideoPlayerSession::suspendDirectScreenAccess" << qtThisPtr());
-
m_dsaStopped = stopDirectScreenAccess();
}
void S60VideoPlayerSession::resumeDirectScreenAccess()
{
TRACE("S60VideoPlayerSession::resumeDirectScreenAccess" << qtThisPtr());
-
if (!m_dsaStopped)
return;
startDirectScreenAccess();
@@ -851,7 +788,6 @@ void S60VideoPlayerSession::resumeDirectScreenAccess()
void S60VideoPlayerSession::startDirectScreenAccess()
{
TRACE("S60VideoPlayerSession::startDirectScreenAccess" << qtThisPtr());
-
if (m_dsaActive)
return;
TRAPD(err, m_player->StartDirectScreenAccessL());
@@ -863,7 +799,6 @@ void S60VideoPlayerSession::startDirectScreenAccess()
bool S60VideoPlayerSession::stopDirectScreenAccess()
{
TRACE("S60VideoPlayerSession::stopDirectScreenAccess" << qtThisPtr());
-
if (!m_dsaActive)
return false;
TRAPD(err, m_player->StopDirectScreenAccessL());
@@ -874,44 +809,23 @@ bool S60VideoPlayerSession::stopDirectScreenAccess()
}
#endif
-/*!
- * The percentage of the temporary buffer filling before playback begins.
-*/
-
void S60VideoPlayerSession::MvloLoadingStarted()
{
TRACE("S60VideoPlayerSession::MvloLoadingStarted" << qtThisPtr());
-
buffering();
}
-/*!
- * Buffer is filled with data and to for continuing/start playback.
-*/
-
void S60VideoPlayerSession::MvloLoadingComplete()
{
TRACE("S60VideoPlayerSession::MvloLoadingComplete" << qtThisPtr());
-
buffered();
}
-/*!
- Defiens which Audio End point to use.
-
- \a audioEndpoint audioEndpoint name.
-*/
-
void S60VideoPlayerSession::doSetAudioEndpoint(const QString& audioEndpoint)
{
m_audioEndpoint = audioEndpoint;
}
-/*!
-
- Returns audioEndpoint name.
-*/
-
QString S60VideoPlayerSession::activeEndpoint() const
{
QString outputName = m_audioEndpoint;
@@ -924,10 +838,6 @@ QString S60VideoPlayerSession::activeEndpoint() const
return outputName;
}
-/*!
- * Returns default Audio End point in use.
-*/
-
QString S60VideoPlayerSession::defaultEndpoint() const
{
QString outputName = DefaultAudioEndpoint;
@@ -940,14 +850,9 @@ QString S60VideoPlayerSession::defaultEndpoint() const
return outputName;
}
-/*!
- Sets active end \a name as an Audio End point.
-*/
-
void S60VideoPlayerSession::setActiveEndpoint(const QString& name)
{
TRACE("S60VideoPlayerSession::setActiveEndpoint" << qtThisPtr() << "name" << name);
-
#ifdef HAS_AUDIOROUTING_IN_VIDEOPLAYER
CAudioOutput::TAudioOutputPreference output = CAudioOutput::ENoPreference;
if (name == DefaultAudioEndpoint)
@@ -967,30 +872,17 @@ void S60VideoPlayerSession::setActiveEndpoint(const QString& name)
#endif
}
-/*!
- The default Audio output has been changed.
-
- \a aAudioOutput Audio Output object.
-
- \a aNewDefault is CAudioOutput::TAudioOutputPreference.
-*/
-
#ifdef HAS_AUDIOROUTING_IN_VIDEOPLAYER
-void S60VideoPlayerSession::DefaultAudioOutputChanged( CAudioOutput& aAudioOutput,
- CAudioOutput::TAudioOutputPreference aNewDefault)
+void S60VideoPlayerSession::DefaultAudioOutputChanged(CAudioOutput& aAudioOutput,
+ CAudioOutput::TAudioOutputPreference aNewDefault)
{
TRACE("S60VideoPlayerSession::DefaultAudioOutputChanged" << qtThisPtr()
<< "newDefault" << aNewDefault);
-
// Emit already implemented in setActiveEndpoint function
Q_UNUSED(aAudioOutput)
Q_UNUSED(aNewDefault)
}
-/*!
- * \return CAudioOutput::ENoOutput by converting it to QString.
-*/
-
QString S60VideoPlayerSession::qStringFromTAudioOutputPreference(CAudioOutput::TAudioOutputPreference output) const
{
if (output == CAudioOutput::ENoPreference)
@@ -1007,32 +899,24 @@ QString S60VideoPlayerSession::qStringFromTAudioOutputPreference(CAudioOutput::T
}
#endif //HAS_AUDIOROUTING_IN_VIDEOPLAYER)
-/*!
- * \return TRUE if video is Seekable else FALSE.
-*/
-
bool S60VideoPlayerSession::getIsSeekable() const
{
bool seekable = ETrue;
int numberOfMetaDataEntries = 0;
-
TRAPD(err, numberOfMetaDataEntries = m_player->NumberOfMetaDataEntriesL());
if (err)
return seekable;
-
- for (int i = 0; i < numberOfMetaDataEntries; i++) {
- CMMFMetaDataEntry *entry = NULL;
+ for (int i=0; i<numberOfMetaDataEntries; ++i) {
+ CMMFMetaDataEntry *entry = 0;
TRAP(err, entry = m_player->MetaDataEntryL(i));
-
if (err)
return seekable;
-
if (!entry->Name().Compare(KSeekable)) {
if (!entry->Value().Compare(KFalse))
seekable = EFalse;
break;
}
}
-
return seekable;
}
+
diff --git a/plugins/multimedia/symbian/mmf/mediaplayer/s60videoplayersession.h b/plugins/multimedia/symbian/mmf/mediaplayer/s60videoplayersession.h
index 79df6aabd1..c9bb7154cc 100644
--- a/plugins/multimedia/symbian/mmf/mediaplayer/s60videoplayersession.h
+++ b/plugins/multimedia/symbian/mmf/mediaplayer/s60videoplayersession.h
@@ -49,21 +49,22 @@
#ifdef VIDEOOUTPUT_GRAPHICS_SURFACES
#include <videoplayer2.h>
+#include <graphics/surface.h>
+#include <surfaceeventhandler.h>
#else
#include <videoplayer.h>
-#endif // VIDEOOUTPUT_GRAPHICS_SURFACES
+#endif
#include <QtCore/QCoreApplication>
-#include <QtGui/qwidget.h>
-#include <qvideowidget.h>
#ifdef HAS_AUDIOROUTING_IN_VIDEOPLAYER
#include <AudioOutput.h>
#include <MAudioOutputObserver.h>
-#endif // HAS_AUDIOROUTING_IN_VIDEOPLAYER
+#endif
class QTimer;
class S60MediaNetworkAccessControl;
+class S60NativeWindow;
class S60VideoDisplay;
// Helper classes to pass Symbian events from WServ to the S60VideoPlayerSession
@@ -81,8 +82,8 @@ class S60VideoPlayerEventHandler : public QObject
public:
static S60VideoPlayerEventHandler *instance();
static bool filterEvent(void *message, long *result);
- void addApplicationFocusObserver(ApplicationFocusObserver* observer);
- void removeApplicationFocusObserver(ApplicationFocusObserver* observer);
+ void addApplicationFocusObserver(ApplicationFocusObserver *observer);
+ void removeApplicationFocusObserver(ApplicationFocusObserver *observer);
private:
S60VideoPlayerEventHandler();
~S60VideoPlayerEventHandler();
@@ -95,6 +96,9 @@ private:
class S60VideoPlayerSession : public S60MediaPlayerSession
, public MVideoPlayerUtilityObserver
, public MVideoLoadingObserver
+#ifdef VIDEOOUTPUT_GRAPHICS_SURFACES
+ , public MMMFSurfaceEventHandler
+#endif
#ifdef HAS_AUDIOROUTING_IN_VIDEOPLAYER
, public MAudioOutputObserver
#endif // HAS_AUDIOROUTING_IN_VIDEOPLAYER
@@ -105,22 +109,22 @@ public:
S60VideoPlayerSession(QMediaService *service, S60MediaNetworkAccessControl *object);
~S60VideoPlayerSession();
- // From S60MediaPlayerSession
+ // S60MediaPlayerSession
bool isVideoAvailable();
bool isAudioAvailable();
void setVideoRenderer(QObject *renderer);
- // From MVideoLoadingObserver
+ // MVideoLoadingObserver
void MvloLoadingStarted();
void MvloLoadingComplete();
void setPlaybackRate(qreal rate);
#ifdef HAS_AUDIOROUTING_IN_VIDEOPLAYER
- // From MAudioOutputObserver
+ // MAudioOutputObserver
void DefaultAudioOutputChanged(CAudioOutput& aAudioOutput,
CAudioOutput::TAudioOutputPreference aNewDefault);
#endif
- // From S60MediaPlayerAudioEndpointSelector
+ // S60MediaPlayerAudioEndpointSelector
QString activeEndpoint() const;
QString defaultEndpoint() const;
@@ -129,16 +133,19 @@ public:
void applicationLostFocus();
signals:
- void nativeSizeChanged(QSize);
+ void nativeSizeChanged(QSize size);
+#ifdef VIDEOOUTPUT_GRAPHICS_SURFACES
+ void nativeSurfaceChanged(TSurfaceId surface);
+#endif
public Q_SLOTS:
- void setActiveEndpoint(const QString& name);
+ void setActiveEndpoint(const QString &name);
signals:
void accessPointChanged(int);
protected:
- // From S60MediaPlayerSession
+ // S60MediaPlayerSession
void doLoadL(const TDesC &path);
void doLoadUrlL(const TDesC &path);
void doPlay();
@@ -151,7 +158,7 @@ protected:
void updateMetaDataEntriesL();
int doGetBufferStatusL() const;
qint64 doGetDurationL() const;
- void doSetAudioEndpoint(const QString& audioEndpoint);
+ void doSetAudioEndpoint(const QString &audioEndpoint);
bool getIsSeekable() const;
private slots:
@@ -163,8 +170,8 @@ private slots:
void suspendDirectScreenAccess();
void resumeDirectScreenAccess();
#endif
-
-private:
+
+private:
void applyPendingChanges(bool force = false);
#ifndef VIDEOOUTPUT_GRAPHICS_SURFACES
void startDirectScreenAccess();
@@ -174,21 +181,34 @@ private:
QString qStringFromTAudioOutputPreference(CAudioOutput::TAudioOutputPreference output) const;
#endif
- // From MVideoPlayerUtilityObserver
+ // MVideoPlayerUtilityObserver
void MvpuoOpenComplete(TInt aError);
void MvpuoPrepareComplete(TInt aError);
void MvpuoFrameReady(CFbsBitmap &aFrame, TInt aError);
void MvpuoPlayComplete(TInt aError);
void MvpuoEvent(const TMMFEvent &aEvent);
+#ifdef VIDEOOUTPUT_GRAPHICS_SURFACES
+ // MMMFSurfaceEventHandler
+ void MmsehSurfaceCreated(TInt aDisplayId, const TSurfaceId& aId,
+ const TRect& aCropRect,
+ TVideoAspectRatio aAspectRatio);
+ void MmsehSurfaceParametersChanged(const TSurfaceId& aId,
+ const TRect& aCropRect,
+ TVideoAspectRatio aAspectRatio);
+ void MmsehRemoveSurface(const TSurfaceId& aId);
+#endif
+
private:
int m_accessPointId;
- S60MediaNetworkAccessControl* m_networkAccessControl;
+ S60MediaNetworkAccessControl *m_networkAccessControl;
RWsSession *const m_wsSession;
CWsScreenDevice *const m_screenDevice;
QMediaService *const m_service;
#ifdef VIDEOOUTPUT_GRAPHICS_SURFACES
CVideoPlayerUtility2 *m_player;
+ TSurfaceId m_nativeSurface;
+ S60NativeWindow *m_dummyWindow;
#else
CVideoPlayerUtility *m_player;
bool m_dsaActive;
@@ -216,3 +236,4 @@ private:
};
#endif
+
diff --git a/plugins/multimedia/symbian/mmf/mmf.pro b/plugins/multimedia/symbian/mmf/mmf.pro
index 4b335c194f..8543d2d094 100644
--- a/plugins/multimedia/symbian/mmf/mmf.pro
+++ b/plugins/multimedia/symbian/mmf/mmf.pro
@@ -1,7 +1,9 @@
+include (../../../../features/utils.pri)
+
TEMPLATE = lib
CONFIG += plugin
-TARGET = $$qtLibraryTarget(qtmultimediakit_mmfengine)
+TARGET = $$mobilityPluginTarget(qtmultimediakit_mmfengine)
PLUGIN_TYPE = mediaservice
include (../../../../common.pri)
qtAddLibrary(QtMultimediaKit)
@@ -42,7 +44,7 @@ contains(mmf_http_cookies_enabled, yes) {
}
load(data_caging_paths)
TARGET.EPOCALLOWDLLDATA = 1
-TARGET.UID3=0x2002AC76
+TARGET.UID3 = $$mobilityUID(0x2002AC76)
TARGET.CAPABILITY = ALL -TCB
MMP_RULES += EXPORTUNFROZEN
@@ -51,8 +53,3 @@ pluginDep.sources = $${TARGET}.dll
pluginDep.path = $${QT_PLUGINS_BASE_DIR}/$${PLUGIN_TYPE}
DEPLOYMENT += pluginDep
-#Media API spesific deployment
-QtMediaDeployment.sources = QtMultimediaKit.dll
-QtMediaDeployment.path = /sys/bin
-
-DEPLOYMENT += QtMediaDeployment
diff --git a/plugins/multimedia/symbian/mmf/radio/s60radiotunercontrol_31.cpp b/plugins/multimedia/symbian/mmf/radio/s60radiotunercontrol_31.cpp
index 595a8ba62c..972de3e923 100644
--- a/plugins/multimedia/symbian/mmf/radio/s60radiotunercontrol_31.cpp
+++ b/plugins/multimedia/symbian/mmf/radio/s60radiotunercontrol_31.cpp
@@ -43,8 +43,6 @@
#include "s60radiotunerservice.h"
#include "s60mmtrace.h"
-#include <QFile>
-
// from AudioPreference.h
const TInt KAudioPriorityFMRadio = 79;
const TUint KAudioPrefRadioAudioEvent = 0x03000001;
@@ -66,14 +64,12 @@ S60RadioTunerControl::S60RadioTunerControl(QObject *parent)
, m_vol(50)
{
TRACE("S60RadioTunerControl::S60RadioTunerControl" << qtThisPtr());
-
initRadio();
}
S60RadioTunerControl::~S60RadioTunerControl()
{
TRACE("S60RadioTunerControl::~S60RadioTunerControl" << qtThisPtr());
-
if (m_tunerUtility) {
m_tunerUtility->Close();
m_tunerUtility->CancelNotifyChange();
@@ -81,9 +77,6 @@ S60RadioTunerControl::~S60RadioTunerControl()
m_tunerUtility->CancelNotifyStereoChange();
delete m_tunerUtility;
}
- if (m_audioPlayerUtility) {
- m_audioPlayerUtility = NULL;
- }
}
bool S60RadioTunerControl::initRadio()
@@ -91,7 +84,7 @@ bool S60RadioTunerControl::initRadio()
m_available = false;
TRAPD(tunerError, m_tunerUtility = CMMTunerUtility::NewL(*this, CMMTunerUtility::ETunerBandFm, 1,
- CMMTunerUtility::ETunerAccessPriorityNormal));
+ CMMTunerUtility::ETunerAccessPriorityNormal));
if (tunerError != KErrNone) {
m_radioError = QRadioTuner::OpenError;
return m_available;
@@ -104,7 +97,7 @@ bool S60RadioTunerControl::initRadio()
}
TRAPD(initializeError, m_audioPlayerUtility->InitializeL(KAudioPriorityFMRadio,
- TMdaPriorityPreference(KAudioPrefRadioAudioEvent)));
+ TMdaPriorityPreference(KAudioPrefRadioAudioEvent)));
if (initializeError != KErrNone) {
m_radioError = QRadioTuner::OpenError;
return m_available;
@@ -125,14 +118,12 @@ bool S60RadioTunerControl::initRadio()
void S60RadioTunerControl::start()
{
TRACE("S60RadioTunerControl::start" << qtThisPtr());
-
if (!m_audioInitializationComplete) {
TFrequency freq(m_currentFreq);
m_tunerUtility->Tune(freq);
} else {
m_audioPlayerUtility->Play();
}
-
m_apiTunerState = QRadioTuner::ActiveState;
emit stateChanged(m_apiTunerState);
}
@@ -140,7 +131,6 @@ void S60RadioTunerControl::start()
void S60RadioTunerControl::stop()
{
TRACE("S60RadioTunerControl::stop" << qtThisPtr());
-
if (m_audioPlayerUtility) {
m_audioPlayerUtility->Stop();
m_apiTunerState = QRadioTuner::StoppedState;
@@ -190,7 +180,6 @@ int S60RadioTunerControl::frequency() const
void S60RadioTunerControl::setFrequency(int frequency)
{
TRACE("S60RadioTunerControl::setFrequency" << qtThisPtr() << "frequency" << frequency);
-
m_currentFreq = frequency;
TFrequency freq(m_currentFreq);
m_tunerUtility->Tune(freq);
@@ -199,7 +188,6 @@ void S60RadioTunerControl::setFrequency(int frequency)
int S60RadioTunerControl::frequencyStep(QRadioTuner::Band b) const
{
int step = 0;
-
if(b == QRadioTuner::FM)
step = 100000; // 100kHz steps
else if(b == QRadioTuner::LW)
@@ -208,7 +196,6 @@ int S60RadioTunerControl::frequencyStep(QRadioTuner::Band b) const
step = 1000; // 1kHz steps
else if(b == QRadioTuner::SW)
step = 500; // 500Hz steps
-
return step;
}
@@ -217,14 +204,11 @@ QPair<int,int> S60RadioTunerControl::frequencyRange(QRadioTuner::Band band) cons
TFrequency bottomFreq;
TFrequency topFreq;
int bandError = KErrNone;
-
if (m_tunerUtility){
bandError = m_tunerUtility->GetFrequencyBandRange(bottomFreq, topFreq);
- if (!bandError) {
+ if (!bandError)
return qMakePair<int,int>(bottomFreq.iFrequency, topFreq.iFrequency);
- }
}
-
return qMakePair<int,int>(0,0);
}
@@ -254,7 +238,6 @@ QRadioTuner::StereoMode S60RadioTunerControl::stereoMode() const
void S60RadioTunerControl::setStereoMode(QRadioTuner::StereoMode mode)
{
TRACE("S60RadioTunerControl::setStereoMode" << qtThisPtr() << "mode" << mode);
-
m_stereoMode = mode;
if (m_tunerUtility) {
if (QRadioTuner::ForceMono == mode)
@@ -281,7 +264,6 @@ int S60RadioTunerControl::signalStrength() const
}
}
}
-
return m_signal;
}
@@ -293,7 +275,6 @@ int S60RadioTunerControl::volume() const
void S60RadioTunerControl::setVolume(int volume)
{
TRACE("S60RadioTunerControl::setVolume" << qtThisPtr() << "volume" << volume);
-
if (m_audioPlayerUtility) {
m_vol = volume;
TInt error = m_audioPlayerUtility->SetVolume(volume/10);
@@ -309,7 +290,6 @@ bool S60RadioTunerControl::isMuted() const
void S60RadioTunerControl::setMuted(bool muted)
{
TRACE("S60RadioTunerControl::setMuted" << qtThisPtr() << "muted" << muted);
-
if (m_audioPlayerUtility && m_audioInitializationComplete) {
m_muted = muted;
m_audioPlayerUtility->Mute(m_muted);
@@ -333,7 +313,6 @@ bool S60RadioTunerControl::isSearching() const
void S60RadioTunerControl::cancelSearch()
{
TRACE("S60RadioTunerControl::cancelSearch" << qtThisPtr());
-
m_tunerUtility->CancelRetune();
m_scanning = false;
emit searchingChanged(false);
@@ -342,7 +321,6 @@ void S60RadioTunerControl::cancelSearch()
void S60RadioTunerControl::searchForward()
{
TRACE("S60RadioTunerControl::searchForward" << qtThisPtr());
-
m_scanning = true;
setVolume(m_vol);
m_tunerUtility->StationSeek(CMMTunerUtility::ESearchDirectionUp);
@@ -352,7 +330,6 @@ void S60RadioTunerControl::searchForward()
void S60RadioTunerControl::searchBackward()
{
TRACE("S60RadioTunerControl::searchBackward" << qtThisPtr());
-
m_scanning = true;
setVolume(m_vol);
m_tunerUtility->StationSeek(CMMTunerUtility::ESearchDirectionDown);
@@ -390,16 +367,14 @@ QString S60RadioTunerControl::errorString() const
void S60RadioTunerControl::MToTuneComplete(TInt aError)
{
TRACE("S60RadioTunerControl::MToTuneComplete" << qtThisPtr() << "error" << error);
-
if (aError == KErrNone) {
m_scanning = false;
m_audioPlayerUtility->Play();
if (!m_audioInitializationComplete) {
TRAPD(initializeError, m_audioPlayerUtility->InitializeL(KAudioPriorityFMRadio,
- TMdaPriorityPreference(KAudioPrefRadioAudioEvent)));
- if (initializeError != KErrNone) {
- m_radioError = QRadioTuner::OpenError;
- }
+ TMdaPriorityPreference(KAudioPrefRadioAudioEvent)));
+ if (initializeError != KErrNone)
+ m_radioError = QRadioTuner::OpenError;
}
}
}
@@ -408,7 +383,6 @@ void S60RadioTunerControl::MTcoFrequencyChanged(const TFrequency& aOldFrequency,
{
TRACE("S60RadioTunerControl::MTcoFrequencyChanged" << qtThisPtr()
<< "oldFreq" << aOldFrequency.iFrequency << "newFreq" << aNewFrequency.iFrequency);
-
m_currentFreq = aNewFrequency.iFrequency;
m_scanning = false;
emit frequencyChanged(m_currentFreq);
@@ -418,29 +392,23 @@ void S60RadioTunerControl::MTcoStateChanged(const TUint32& aOldState, const TUin
{
TRACE("S60RadioTunerControl::MTcoStateChanged" << qtThisPtr()
<< "oldState" << aOldState << "newState" << aNewState);
-
- if (aNewState == CMMTunerUtility::ETunerStateActive) {
+ if (aNewState == CMMTunerUtility::ETunerStateActive)
m_apiTunerState = QRadioTuner::ActiveState;
- }
- if (aNewState == CMMTunerUtility::ETunerStatePlaying) {
+ if (aNewState == CMMTunerUtility::ETunerStatePlaying)
m_apiTunerState = QRadioTuner::ActiveState;
- }
- if (aOldState != aNewState){
+ if (aOldState != aNewState)
emit stateChanged(m_apiTunerState);
- }
}
void S60RadioTunerControl::MTcoAntennaDetached()
{
TRACE("S60RadioTunerControl::MTcoAntennaDetached" << qtThisPtr());
-
// no actions
}
void S60RadioTunerControl::MTcoAntennaAttached()
{
TRACE("S60RadioTunerControl::MTcoAntennaAttached" << qtThisPtr());
-
// no actions
}
@@ -448,7 +416,6 @@ void S60RadioTunerControl::FlightModeChanged(TBool aFlightMode)
{
TRACE("S60RadioTunerControl::FlightModeChanged" << qtThisPtr()
<< "enabled" << aFlightMode);
-
// no actions
}
@@ -464,16 +431,14 @@ void S60RadioTunerControl::MTsoForcedMonoChanged(TBool aForcedMono)
{
TRACE("S60RadioTunerControl::MTsoForcedMonoChanged" << qtThisPtr()
<< "forcedMono" << aForcedMono);
- if (aForcedMono) {
+ if (aForcedMono)
m_stereoMode = QRadioTuner::ForceMono;
- }
}
void S60RadioTunerControl::MssoSignalStrengthChanged(TInt aNewSignalStrength)
{
TRACE("S60RadioTunerControl::MssoSignalStrengthChanged" << qtThisPtr()
<< "signalStrength" << aNewSignalStrength);
-
m_signal = aNewSignalStrength;
emit signalStrengthChanged(m_signal);
}
@@ -482,7 +447,6 @@ void S60RadioTunerControl::MTapoInitializeComplete(TInt aError)
{
TRACE("S60RadioTunerControl::MTapoInitializeComplete" << qtThisPtr()
<< "error" << aError);
-
if (aError == KErrNone) {
m_audioInitializationComplete = true;
m_available = true;
@@ -498,9 +462,5 @@ void S60RadioTunerControl::MTapoPlayEvent(TEventType aEvent, TInt aError, TAny*
{
TRACE("S60RadioTunerControl::MTapoPlayEvent" << qtThisPtr()
<< "event" << aEvent << "error" << aError);
-
// no actions
}
-
-
-
diff --git a/plugins/multimedia/symbian/mmf/radio/s60radiotunercontrol_31.h b/plugins/multimedia/symbian/mmf/radio/s60radiotunercontrol_31.h
index 4a1a61f11c..c6f2a0f160 100644
--- a/plugins/multimedia/symbian/mmf/radio/s60radiotunercontrol_31.h
+++ b/plugins/multimedia/symbian/mmf/radio/s60radiotunercontrol_31.h
@@ -42,7 +42,6 @@
#ifndef S60RADIOTUNERCONTROL_H
#define S60RADIOTUNERCONTROL_H
-#include <QtCore/qobject.h>
#include <qradiotunercontrol.h>
#include <qradiotuner.h>
#include <tuner.h>
@@ -103,59 +102,52 @@ public:
QRadioTuner::Error error() const;
QString errorString() const;
- //MMMTunerObserver
+ // MMMTunerObserver
void MToTuneComplete(TInt aError);
- //MMMTunerChangeObserver
+ // MMMTunerChangeObserver
void MTcoFrequencyChanged(const TFrequency& aOldFrequency, const TFrequency& aNewFrequency);
void MTcoStateChanged(const TUint32& aOldState, const TUint32& aNewState);
void MTcoAntennaDetached();
void MTcoAntennaAttached();
void FlightModeChanged(TBool aFlightMode);
- //MMMTunerStereoObserver
+ // MMMTunerStereoObserver
void MTsoStereoReceptionChanged(TBool aStereo);
void MTsoForcedMonoChanged(TBool aForcedMono);
- //MMMSignalStrengthObserver
+ // MMMSignalStrengthObserver
void MssoSignalStrengthChanged(TInt aNewSignalStrength);
- //MMMTunerAudioPlayerObserver
+ // MMMTunerAudioPlayerObserver
void MTapoInitializeComplete(TInt aError);
void MTapoPlayEvent(TEventType aEvent, TInt aError, TAny* aAdditionalInfo);
-private slots:
-
-
private:
bool initRadio();
CMMTunerUtility::TTunerBand getNativeBand(QRadioTuner::Band b) const;
+private:
mutable int m_error;
CMMTunerUtility *m_tunerUtility;
CMMTunerAudioPlayerUtility *m_audioPlayerUtility;
-
bool m_audioInitializationComplete;
bool m_muted;
bool m_isStereo;
bool m_available;
int m_step;
int m_vol;
- mutable int m_signal;
+ mutable int m_signal;
bool m_scanning;
bool forward;
QRadioTuner::Band m_currentBand;
qint64 m_currentFreq;
-
QRadioTuner::Error m_radioError;
QRadioTuner::StereoMode m_stereoMode;
QString m_errorString;
- //caps meaning what the tuner can do.
TTunerCapabilities m_currentTunerCapabilities;
long m_tunerState;
QRadioTuner::State m_apiTunerState;
-
};
#endif
-
diff --git a/plugins/multimedia/symbian/mmf/radio/s60radiotunercontrol_since32.cpp b/plugins/multimedia/symbian/mmf/radio/s60radiotunercontrol_since32.cpp
index 65381fd368..801e688a7c 100644
--- a/plugins/multimedia/symbian/mmf/radio/s60radiotunercontrol_since32.cpp
+++ b/plugins/multimedia/symbian/mmf/radio/s60radiotunercontrol_since32.cpp
@@ -48,9 +48,9 @@
S60RadioTunerControl::S60RadioTunerControl(QObject *parent)
: QRadioTunerControl(parent)
, m_error(0)
- , m_radioUtility(NULL)
- , m_fmTunerUtility(NULL)
- , m_playerUtility(NULL)
+ , m_radioUtility(0)
+ , m_fmTunerUtility(0)
+ , m_playerUtility(0)
, m_maxVolume(100)
, m_audioInitializationComplete(false)
, m_muted(false)
@@ -80,15 +80,10 @@ S60RadioTunerControl::S60RadioTunerControl(QObject *parent)
S60RadioTunerControl::~S60RadioTunerControl()
{
TRACE("S60RadioTunerControl::~S60RadioTunerControl" << qtThisPtr());
-
- if (m_fmTunerUtility) {
+ if (m_fmTunerUtility)
m_fmTunerUtility->Close();
- }
-
- if (m_playerUtility) {
+ if (m_playerUtility)
m_playerUtility->Close();
- }
-
delete m_radioUtility;
}
@@ -119,15 +114,14 @@ bool S60RadioTunerControl::isBandSupported(QRadioTuner::Band b) const
}
void S60RadioTunerControl::changeSignalStrength()
- {
-
+{
int currentSignal = signalStrength();
- if (currentSignal != m_previousSignal)
- {
+ if (currentSignal != m_previousSignal) {
m_previousSignal = currentSignal;
emit signalStrengthChanged(currentSignal);
- }
}
+}
+
void S60RadioTunerControl::setBand(QRadioTuner::Band b)
{
TRACE("S60RadioTunerControl::setBand" << qtThisPtr() << "band" << b);
@@ -136,29 +130,27 @@ void S60RadioTunerControl::setBand(QRadioTuner::Band b)
if (isBandSupported(tempBand)){
m_currentBand = b;
emit bandChanged(m_currentBand);
- }
- else {
- switch(tempBand)
- {
- case QRadioTuner::FM :
- m_errorString = QString(tr("Band FM not Supported"));
- break;
- case QRadioTuner::AM :
- m_errorString = QString(tr("Band AM not Supported"));
- break;
- case QRadioTuner::SW :
- m_errorString = QString(tr("Band SW not Supported"));
- break;
- case QRadioTuner::LW :
- m_errorString = QString(tr("Band LW not Supported"));
- break;
- case QRadioTuner::FM2 :
- m_errorString = QString(tr("Band FM2 not Supported"));
- break;
- default :
- m_errorString = QString("Band %1 not Supported").arg(tempBand);
- break;
- }
+ } else {
+ switch(tempBand) {
+ case QRadioTuner::FM :
+ m_errorString = QString(tr("Band FM not Supported"));
+ break;
+ case QRadioTuner::AM :
+ m_errorString = QString(tr("Band AM not Supported"));
+ break;
+ case QRadioTuner::SW :
+ m_errorString = QString(tr("Band SW not Supported"));
+ break;
+ case QRadioTuner::LW :
+ m_errorString = QString(tr("Band LW not Supported"));
+ break;
+ case QRadioTuner::FM2 :
+ m_errorString = QString(tr("Band FM2 not Supported"));
+ break;
+ default :
+ m_errorString = QString("Band %1 not Supported").arg(tempBand);
+ break;
+ }
emit error(QRadioTuner::OutOfRangeError);
}
}
@@ -172,10 +164,10 @@ int S60RadioTunerControl::frequency() const
void S60RadioTunerControl::setFrequency(int frequency)
{
TRACE("S60RadioTunerControl::setFrequency" << qtThisPtr() << "frequency" << frequency);
-
m_currentFreq = frequency;
m_fmTunerUtility->SetFrequency(m_currentFreq);
}
+
int S60RadioTunerControl::frequencyStep(QRadioTuner::Band b) const
{
int step = 0;
@@ -194,17 +186,12 @@ QPair<int,int> S60RadioTunerControl::frequencyRange(QRadioTuner::Band band) cons
{
int bottomFreq;
int topFreq;
-
int bandError = KErrNone;
TFmRadioFrequencyRange range;
-
- if (m_fmTunerUtility) {
+ if (m_fmTunerUtility)
bandError = m_fmTunerUtility->GetFrequencyRange(range, bottomFreq, topFreq);
- }
- if (!bandError) {
+ if (!bandError)
return qMakePair<int,int>(bottomFreq, topFreq);
- }
-
return qMakePair<int,int>(0,0);
}
@@ -221,7 +208,6 @@ QRadioTuner::StereoMode S60RadioTunerControl::stereoMode() const
void S60RadioTunerControl::setStereoMode(QRadioTuner::StereoMode mode)
{
TRACE("S60RadioTunerControl::setStereoMode" << qtThisPtr() << "mode" << mode);
-
if (m_fmTunerUtility) {
if (QRadioTuner::ForceMono == mode) {
m_fmTunerUtility->ForceMonoReception(true);
@@ -242,18 +228,15 @@ int S60RadioTunerControl::signalStrength() const
TInt maxSignalStrength;
TInt currentSignalStrength;
m_error = m_fmTunerUtility->GetMaxSignalStrength(maxSignalStrength);
-
if (m_error == KErrNone) {
m_error = m_fmTunerUtility->GetSignalStrength(currentSignalStrength);
if (m_error == KErrNone) {
- if (currentSignalStrength == 0 || maxSignalStrength == 0) {
+ if (currentSignalStrength == 0 || maxSignalStrength == 0)
return currentSignalStrength;
- }
m_signal = ((TInt64)currentSignalStrength) * 100 / maxSignalStrength;
}
}
}
-
return m_signal;
}
@@ -265,20 +248,16 @@ int S60RadioTunerControl::volume() const
void S60RadioTunerControl::setVolume(int volume)
{
TRACE("S60RadioTunerControl::setVolume" << qtThisPtr() << "volume" << volume);
-
int boundVolume = qBound(0, volume, 100);
-
if (m_vol == boundVolume )
return;
-
if (!m_muted && m_playerUtility) {
m_vol = boundVolume;
// Don't set volume until State is in Active State.
if (state() == QRadioTuner::ActiveState ) {
m_playerUtility->SetVolume(m_vol*m_volMultiplier);
-
} else {
- m_volChangeRequired = TRUE;
+ m_volChangeRequired = true;
emit volumeChanged(boundVolume);
}
}
@@ -306,7 +285,6 @@ bool S60RadioTunerControl::isSearching() const
void S60RadioTunerControl::cancelSearch()
{
TRACE("S60RadioTunerControl::cancelSearch" << qtThisPtr());
-
m_fmTunerUtility->CancelStationSeek();
m_scanning = false;
emit searchingChanged(false);
@@ -351,9 +329,7 @@ bool S60RadioTunerControl::initRadio()
m_radioError = QRadioTuner::ResourceError;
return m_available;
}
-
m_tunerControl = false;
-
m_available = true;
return m_available;
}
@@ -374,20 +350,18 @@ QtMultimediaKit::AvailabilityError S60RadioTunerControl::availabilityError() con
void S60RadioTunerControl::start()
{
TRACE("S60RadioTunerControl::start" << qtThisPtr());
- if (!m_tunerControl) {
+ if (!m_tunerControl)
m_fmTunerUtility->RequestTunerControl();
- } else {
+ else
m_playerUtility->Play();
- }
m_signalStrengthTimer->start(3000);
}
void S60RadioTunerControl::stop()
{
TRACE("S60RadioTunerControl::stop" << qtThisPtr());
- if (m_playerUtility) {
+ if (m_playerUtility)
m_playerUtility->Stop();
- }
m_signalStrengthTimer->stop();
}
@@ -410,10 +384,8 @@ void S60RadioTunerControl::MrpoStateChange(TPlayerState aState, TInt aError)
m_apiTunerState = QRadioTuner::StoppedState;
} else if (aState == ERadioPlayerPlaying) {
m_apiTunerState = QRadioTuner::ActiveState;
- //Apply pending volume changes.
- if(m_volChangeRequired){
+ if (m_volChangeRequired)
setVolume(m_vol);
- }
}
} else {
m_apiTunerState = QRadioTuner::StoppedState;
@@ -426,12 +398,10 @@ void S60RadioTunerControl::MrpoVolumeChange(TInt aVolume)
TRACE("S60RadioTunerControl::MrpoVolumeChange" << qtThisPtr()
<< "volume" << aVolume);
m_vol = (aVolume/m_volMultiplier);
- if (!m_volChangeRequired) {
+ if (!m_volChangeRequired)
emit volumeChanged(m_vol);
-
- } else {
+ else
m_volChangeRequired = false;
- }
}
void S60RadioTunerControl::MrpoMuteChange(TBool aMute)
@@ -446,7 +416,6 @@ void S60RadioTunerControl::MrpoBalanceChange(TInt aLeftPercentage, TInt aRightPe
{
TRACE("S60RadioTunerControl::MrpoBalanceChange" << qtThisPtr()
<< "left" << aLeftPercentage << "right" << aRightPercentage);
-
// no actions
}
@@ -467,7 +436,6 @@ void S60RadioTunerControl::MrftoRequestTunerControlComplete(TInt aError)
emit signalStrengthChanged(signal);
m_signal = signal;
}
-
} else if (aError == KFmRadioErrAntennaNotConnected) {
m_radioError = QRadioTuner::OpenError;
m_errorString = QString(tr("Antenna Not Connected"));
@@ -480,7 +448,7 @@ void S60RadioTunerControl::MrftoRequestTunerControlComplete(TInt aError)
m_radioError = QRadioTuner::OutOfRangeError;
m_errorString = QString(tr("Frequency out of band range"));
emit error(m_radioError);
- }else{
+ } else {
m_radioError = QRadioTuner::OpenError;
m_errorString = QString(tr("Unknown Error."));
emit error(m_radioError);
@@ -540,7 +508,6 @@ void S60RadioTunerControl::MrftoFmTransmitterStatusChange(TBool aActive)
{
TRACE("S60RadioTunerControl::MrftoFmTransmitterStatusChange" << qtThisPtr()
<< "active" << aActive);
-
//no actions
}
@@ -548,37 +515,30 @@ void S60RadioTunerControl::MrftoAntennaStatusChange(TBool aAttached)
{
TRACE("S60RadioTunerControl::MrftoAntennaStatusChange" << qtThisPtr()
<< "attached" << aAttached);
-
- if (aAttached && m_tunerControl) {
+ if (aAttached && m_tunerControl)
m_playerUtility->Play();
- }
}
void S60RadioTunerControl::MrftoOfflineModeStatusChange(TBool aOfflineMode)
{
TRACE("S60RadioTunerControl::MrftoOfflineModeStatusChange" << qtThisPtr()
<< "mode" << aOfflineMode);
-
}
void S60RadioTunerControl::MrftoFrequencyRangeChange(TFmRadioFrequencyRange aBand /*, TInt aMinFreq, TInt aMaxFreq*/)
{
TRACE("S60RadioTunerControl::MrftoFrequencyRangeChange" << qtThisPtr()
<< "band" << aBand);
-
- if (aBand == EFmRangeEuroAmerica) {
+ if (aBand == EFmRangeEuroAmerica)
setBand(QRadioTuner::FM);
- }
}
void S60RadioTunerControl::MrftoFrequencyChange(TInt aNewFrequency)
{
TRACE("S60RadioTunerControl::MrftoFrequencyChange" << qtThisPtr()
<< "frequency" << aNewFrequency);
-
m_currentFreq = aNewFrequency;
emit frequencyChanged(m_currentFreq);
-
int signal = signalStrength();
if (m_signal != signal) {
emit signalStrengthChanged(signal);
@@ -590,12 +550,10 @@ void S60RadioTunerControl::MrftoForcedMonoChange(TBool aForcedMono)
{
TRACE("S60RadioTunerControl::MrftoForcedMonoChange" << qtThisPtr()
<< "forcedMono" << aForcedMono);
-
- if (aForcedMono) {
+ if (aForcedMono)
m_stereoMode = QRadioTuner::ForceMono;
- } else {
+ else
m_stereoMode = QRadioTuner::ForceStereo;
- }
emit stereoStatusChanged(!aForcedMono);
}
@@ -603,6 +561,5 @@ void S60RadioTunerControl::MrftoSquelchChange(TBool aSquelch)
{
TRACE("S60RadioTunerControl::MrftoSquelchChange" << qtThisPtr()
<< "squelch" << aSquelch);
-
// no actions
}
diff --git a/plugins/multimedia/symbian/mmf/radio/s60radiotunercontrol_since32.h b/plugins/multimedia/symbian/mmf/radio/s60radiotunercontrol_since32.h
index 7081e5718b..9e331aa5a4 100644
--- a/plugins/multimedia/symbian/mmf/radio/s60radiotunercontrol_since32.h
+++ b/plugins/multimedia/symbian/mmf/radio/s60radiotunercontrol_since32.h
@@ -255,17 +255,22 @@ public:
*/
void MrftoSquelchChange(TBool aSquelch);
+Q_SIGNALS:
+ void error(QRadioTuner::Error) const;
+
+protected slots:
+ void changeSignalStrength();
+
private:
bool initRadio();
+private:
mutable int m_error;
-
CRadioUtility* m_radioUtility;
CRadioFmTunerUtility* m_fmTunerUtility;
CRadioPlayerUtility* m_playerUtility;
TInt m_maxVolume;
TReal m_volMultiplier;
-
bool m_tunerControl;
bool m_audioInitializationComplete;
bool m_muted;
@@ -278,18 +283,11 @@ private:
bool m_scanning;
QRadioTuner::Band m_currentBand;
qint64 m_currentFreq;
-
QRadioTuner::Error m_radioError;
QRadioTuner::StereoMode m_stereoMode;
QString m_errorString;
QRadioTuner::State m_apiTunerState;
QTimer *m_signalStrengthTimer;
-
-Q_SIGNALS:
- void error(QRadioTuner::Error) const;
-
-protected slots:
- void changeSignalStrength();
};
#endif
diff --git a/plugins/multimedia/symbian/mmf/radio/s60radiotunerservice.cpp b/plugins/multimedia/symbian/mmf/radio/s60radiotunerservice.cpp
index 87859b8f22..43e11010af 100644
--- a/plugins/multimedia/symbian/mmf/radio/s60radiotunerservice.cpp
+++ b/plugins/multimedia/symbian/mmf/radio/s60radiotunerservice.cpp
@@ -42,19 +42,16 @@
#include "s60radiotunerservice.h"
#include "s60mmtrace.h"
-
S60RadioTunerService::S60RadioTunerService(QObject *parent)
: QMediaService(parent)
{
TRACE("S60RadioTunerService::S60RadioTunerService" << qtThisPtr());
-
m_playerControl = new S60RadioTunerControl(this);
}
S60RadioTunerService::~S60RadioTunerService()
{
TRACE("S60RadioTunerService::~S60RadioTunerService" << qtThisPtr());
-
delete m_playerControl;
}
@@ -72,6 +69,5 @@ void S60RadioTunerService::releaseControl(QMediaControl *control)
{
TRACE("S60RadioTunerService::releaseControl" << qtThisPtr()
<< "control" << control);
-
Q_UNUSED(control);
}
diff --git a/plugins/multimedia/symbian/mmf/radio/s60radiotunerservice.h b/plugins/multimedia/symbian/mmf/radio/s60radiotunerservice.h
index bdc3e82749..331fb05e8c 100644
--- a/plugins/multimedia/symbian/mmf/radio/s60radiotunerservice.h
+++ b/plugins/multimedia/symbian/mmf/radio/s60radiotunerservice.h
@@ -42,8 +42,6 @@
#ifndef S60RADIOTUNERSERVICE_H
#define S60RADIOTUNERSERVICE_H
-#include <QtCore/qobject.h>
-
#include <qmediaservice.h>
#ifdef TUNERLIBUSED
diff --git a/plugins/multimedia/symbian/mmf/s60formatsupported.cpp b/plugins/multimedia/symbian/mmf/s60formatsupported.cpp
index 5287649f81..f36746fd63 100644
--- a/plugins/multimedia/symbian/mmf/s60formatsupported.cpp
+++ b/plugins/multimedia/symbian/mmf/s60formatsupported.cpp
@@ -39,66 +39,45 @@
**
****************************************************************************/
-
#include "s60formatsupported.h"
-
-
S60FormatSupported::S60FormatSupported()
-{}
+{
+
+}
S60FormatSupported::~S60FormatSupported()
{
- if (m_controllerparam) {
- delete m_controllerparam;
- m_controllerparam = NULL;
- }
+ delete m_controllerparam;
}
QStringList S60FormatSupported::supportedPlayMimeTypesL()
{
-
RArray<TUid> mediaIds; //search for both audio and video
-
RMMFControllerImplInfoArray iControllers;
-
m_controllerparam = CMMFControllerPluginSelectionParameters::NewL();
-
m_playformatparam = CMMFFormatSelectionParameters::NewL();
-
mediaIds.Append(KUidMediaTypeAudio);
-
mediaIds.Append(KUidMediaTypeVideo);
-
m_controllerparam->SetMediaIdsL(mediaIds, CMMFPluginSelectionParameters::EAllowOtherMediaIds);
-
m_controllerparam->SetRequiredPlayFormatSupportL(*m_playformatparam);
-
m_controllerparam->ListImplementationsL(iControllers);
-
CDesC8ArrayFlat* controllerArray = new (ELeave) CDesC8ArrayFlat(1);
-
for (TInt i = 0; i < iControllers.Count(); i++) {
for (TInt j = 0; j < (iControllers[i]->PlayFormats()).Count(); j++) {
const CDesC8Array& iarr = (iControllers[i]->PlayFormats()[j]->SupportedMimeTypes());
-
TInt count = iarr.Count();
-
for (TInt k = 0; k < count; k++) {
TPtrC8 ptr = iarr.MdcaPoint(k);
-
HBufC8* n = HBufC8::NewL(ptr.Length());
-
TPtr8 ptr1 = n->Des();
-
ptr1.Copy((TUint8*) ptr.Ptr(), ptr.Length());
-
controllerArray->AppendL(ptr1);
}
}
}
-// converting CDesC8Array to QStringList
+ // converting CDesC8Array to QStringList
for (TInt x = 0; x < controllerArray->Count(); x++) {
m_supportedplaymime.append(QString::fromUtf8(
(const char*) (controllerArray->MdcaPoint(x).Ptr()),
@@ -110,12 +89,9 @@ QStringList S60FormatSupported::supportedPlayMimeTypesL()
QStringList tempvideo = m_supportedplaymime.filter(QString("video"));
m_supportedplaymime.clear();
-
m_supportedplaymime = tempaudio + tempvideo;
-
mediaIds.Close();
delete controllerArray;
iControllers.ResetAndDestroy();
-
return m_supportedplaymime;
}
diff --git a/plugins/multimedia/symbian/mmf/s60formatsupported.h b/plugins/multimedia/symbian/mmf/s60formatsupported.h
index 89aa8639b0..4e1f588606 100644
--- a/plugins/multimedia/symbian/mmf/s60formatsupported.h
+++ b/plugins/multimedia/symbian/mmf/s60formatsupported.h
@@ -39,8 +39,8 @@
**
****************************************************************************/
-#ifndef S60FORMATSUPPORTED_H_
-#define S60FORMATSUPPORTED_H_
+#ifndef S60FORMATSUPPORTED_H
+#define S60FORMATSUPPORTED_H
#include <mmf/common/mmfcontrollerpluginresolver.h>
#include <mmf/server/mmfdatasourcesink.hrh>
@@ -57,9 +57,9 @@ public:
QStringList supportedPlayMimeTypesL();
private:
-
CMMFFormatSelectionParameters* m_playformatparam;
CMMFControllerPluginSelectionParameters* m_controllerparam;
QStringList m_supportedplaymime;
};
-#endif /* S60FORMATSUPPORTED_H_ */
+
+#endif // S60FORMATSUPPORTED_H
diff --git a/plugins/multimedia/symbian/mmf/s60mediaserviceplugin.cpp b/plugins/multimedia/symbian/mmf/s60mediaserviceplugin.cpp
index 6074a6e5f0..21d084f22e 100644
--- a/plugins/multimedia/symbian/mmf/s60mediaserviceplugin.cpp
+++ b/plugins/multimedia/symbian/mmf/s60mediaserviceplugin.cpp
@@ -51,7 +51,7 @@
#endif
#ifdef AUDIOSOURCEUSED
#include "s60audiocaptureservice.h"
-#endif /* AUDIOSOURCEUSED */
+#endif
QStringList S60MediaServicePlugin::keys() const
{
@@ -65,7 +65,7 @@ QStringList S60MediaServicePlugin::keys() const
#endif
#ifdef AUDIOSOURCEUSED
list << QLatin1String(Q_MEDIASERVICE_AUDIOSOURCE);
-#endif /* AUDIOSOURCEUSED */
+#endif
return list;
}
@@ -78,12 +78,11 @@ QMediaService* S60MediaServicePlugin::create(QString const& key)
#ifdef AUDIOSOURCEUSED
if (key == QLatin1String(Q_MEDIASERVICE_AUDIOSOURCE))
return new S60AudioCaptureService;
-#endif /* AUDIOSOURCEUSED */
+#endif
#if defined(TUNERLIBUSED) || defined(RADIOUTILITYLIBUSED)
if (key == QLatin1String(Q_MEDIASERVICE_RADIO))
return new S60RadioTunerService;
#endif
-
return 0;
}
diff --git a/plugins/multimedia/symbian/mmf/s60mediaserviceplugin.h b/plugins/multimedia/symbian/mmf/s60mediaserviceplugin.h
index d0f203a7dc..b58fe29fdf 100644
--- a/plugins/multimedia/symbian/mmf/s60mediaserviceplugin.h
+++ b/plugins/multimedia/symbian/mmf/s60mediaserviceplugin.h
@@ -39,11 +39,9 @@
**
****************************************************************************/
-
#ifndef S60SERVICEPLUGIN_H
#define S60SERVICEPLUGIN_H
-#include <QtCore/qobject.h>
#include <qmediaservice.h>
#include <qmediaserviceproviderplugin.h>
#include "s60formatsupported.h"
@@ -62,6 +60,7 @@ public:
QtMultimediaKit::SupportEstimate hasSupport(const QString &mimeType, const QStringList& codecs) const;
QStringList supportedMimeTypes() const;
+
private:
mutable QStringList m_supportedmimetypes;
};
diff --git a/plugins/multimedia/symbian/openmaxal/openmaxal.pro b/plugins/multimedia/symbian/openmaxal/openmaxal.pro
index 0565536a4e..9986ff1a9c 100644
--- a/plugins/multimedia/symbian/openmaxal/openmaxal.pro
+++ b/plugins/multimedia/symbian/openmaxal/openmaxal.pro
@@ -1,7 +1,9 @@
+include (../../../../features/utils.pri)
+
TEMPLATE = lib
CONFIG += plugin
-TARGET = $$qtLibraryTarget(qtmultimediakit_openmaxalengine)
+TARGET = $$mobilityPluginTarget(qtmultimediakit_openmaxalengine)
PLUGIN_TYPE = mediaservice
include (../../../../common.pri)
qtAddLibrary(QtMultimediaKit)
@@ -26,7 +28,7 @@ SYMBIAN_PLATFORMS = DEFAULT
# Input parameters for the generated mmp file
# -------------------------------------------
load(data_caging_paths)
-TARGET.UID3 = 0x10207CA1
+TARGET.UID3 = $$mobilityUID(0x10207CA1)
TARGET.CAPABILITY = ALL -TCB
TARGET.EPOCALLOWDLLDATA = 1
MMP_RULES += EXPORTUNFROZEN
diff --git a/plugins/multimedia/symbian/videooutput/s60eglendpoint.cpp b/plugins/multimedia/symbian/videooutput/s60eglendpoint.cpp
new file mode 100644
index 0000000000..7a5f010f53
--- /dev/null
+++ b/plugins/multimedia/symbian/videooutput/s60eglendpoint.cpp
@@ -0,0 +1,250 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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, Nokia gives you certain additional
+** rights. These rights are described in the Nokia 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.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "s60eglendpoint.h"
+#include "s60eglextensions.h"
+#include "s60mmtrace.h"
+#include <e32base.h>
+#include <egl/egl.h>
+#include <graphics/surface.h>
+#include <QtCore/QDebug>
+#include <QtCore/QTime>
+
+//-----------------------------------------------------------------------------
+// S60EglEndpointEventHandler
+//-----------------------------------------------------------------------------
+
+class S60EglEndpointEventHandler : public CActive
+{
+public:
+ static S60EglEndpointEventHandler *NewL(S60EglEndpoint *parent);
+ ~S60EglEndpointEventHandler();
+ void request();
+
+private:
+ S60EglEndpointEventHandler(S60EglEndpoint *parent);
+ void RunL();
+ void DoCancel();
+
+private:
+ S60EglEndpoint *const m_parent;
+};
+
+S60EglEndpointEventHandler *S60EglEndpointEventHandler::NewL(S60EglEndpoint *parent)
+{
+ S60EglEndpointEventHandler *self = new (ELeave) S60EglEndpointEventHandler(parent);
+ CActiveScheduler::Add(self);
+ return self;
+}
+
+S60EglEndpointEventHandler::S60EglEndpointEventHandler(S60EglEndpoint *parent)
+ : CActive(EPriorityStandard)
+ , m_parent(parent)
+{
+
+}
+
+S60EglEndpointEventHandler::~S60EglEndpointEventHandler()
+{
+ Cancel();
+}
+
+void S60EglEndpointEventHandler::request()
+{
+ TRACE("S60EglEndpointEventHandler::request" << qtThisPtr());
+ Q_ASSERT(!IsActive());
+ iStatus = KRequestPending;
+ EGLTRequestStatusNOK eglStatus = reinterpret_cast<EGLTRequestStatusNOK>(&iStatus);
+ const EGLBoolean ret = m_parent->m_extensions->endpointRequestNotification(m_parent->m_display,
+ m_parent->m_endpoint,
+ eglStatus);
+ if (ret) {
+ VERBOSE_TRACE("S60EglEndpointEventHandler::request" << qtThisPtr() << "endpointRequestNotification OK");
+ SetActive();
+ } else {
+ qWarning() << "S60EglEndpointEventHandler::request" << qtThisPtr() << "endpointRequestNotification failed";
+ }
+}
+
+void S60EglEndpointEventHandler::RunL()
+{
+ VERBOSE_TRACE("S60EglEndpointEventHandler::RunL" << qtThisPtr());
+ m_parent->endpointEvent();
+}
+
+void S60EglEndpointEventHandler::DoCancel()
+{
+ TRACE("S60EglEndpointEventHandler::DoCancel" << qtThisPtr());
+ m_parent->m_extensions->endpointCancelNotification(m_parent->m_display,
+ m_parent->m_endpoint);
+}
+
+//-----------------------------------------------------------------------------
+// S60EglEndpoint
+//-----------------------------------------------------------------------------
+
+S60EglEndpoint::S60EglEndpoint(const TSurfaceId &surface,
+ S60EglExtensions *extensions,
+ QObject *parent)
+ : QObject(parent)
+ , m_extensions(extensions)
+ , m_context(eglGetCurrentContext())
+ , m_api(0)
+ , m_display(eglGetCurrentDisplay())
+ , m_endpoint(EGL_NO_ENDPOINT_NOK)
+ , m_state(Null)
+{
+ TRACE("S60EglEndpoint::S60EglEndpoint" << qtThisPtr()
+ << "surface" << (void*)surface.iInternal[3]
+ << "context" << m_context << "display" << m_display);
+ Q_ASSERT(m_extensions);
+ bool ok = false;
+ if (m_context) {
+ m_api = eglQueryAPI();
+ if (m_api) {
+ m_display = eglGetCurrentDisplay();
+ if (EGL_NO_DISPLAY != m_display) {
+ ok = true;
+ } else {
+ qWarning() << "S60EglEndpoint::S60EglEndpoint" << qtThisPtr() << "failed to get valid EGL display";
+ }
+ } else {
+ qWarning() << "S60EglEndpoint::S60EglEndpoint" << qtThisPtr() << "failed to get valid rendering API";
+ }
+ } else {
+ qWarning() << "S60EglEndpoint::S60EglEndpoint" << qtThisPtr() << "failed to get valid EGL context";
+ }
+ if (ok) {
+ static const EGLenum type = EGL_ENDPOINT_TYPE_CONSUMER_NOK;
+ static const EGLenum sourceType = EGL_TSURFACEID_NOK;
+ TSurfaceId localSurface = surface;
+ EGLEndpointSourceNOK source = reinterpret_cast<EGLEndpointSourceNOK>(&localSurface);
+ static const EGLint *attributes = 0;
+ m_endpoint = m_extensions->createEndpoint(m_display, type, sourceType, source, attributes);
+ const EGLint error = eglGetError();
+ if (EGL_SUCCESS == error) {
+ TRACE("S60EglEndpoint::S60EglEndpoint" << qtThisPtr()
+ << "endpoint" << m_endpoint);
+ if (EGL_NO_ENDPOINT_NOK == m_endpoint) {
+ qWarning() << "S60EglEndpoint::S60EglEndpoint" << qtThisPtr() << "failed to create EGL endpoint";
+ } else {
+ TRAPD(err, m_eventHandler.reset(S60EglEndpointEventHandler::NewL(this)));
+ if (err) {
+ qWarning() << "S60EglEndpoint::S60EglEndpoint" << qtThisPtr() << "failed to create EGL endpoint event handler: error" << err;
+ } else {
+ m_state = Created;
+ EGLBoolean ready = m_extensions->getEndpointAttrib(m_display, m_endpoint, EGL_ENDPOINT_READY_NOK);
+ TRACE("S60EglEndpoint::S60EglEndpoint" << qtThisPtr() << "ready" << ready);
+ if (ready) {
+ // Producer has already submitted content to the source surface
+ m_state = Active;
+ m_eventHandler->request();
+ } else {
+ // Request notification when producer has submitted content
+ m_eventHandler->request();
+ }
+ }
+ }
+ } else {
+ qWarning() << "S60EglEndpoint::S60EglEndpoint" << qtThisPtr() << "failed to create EGL endpoint: error" << error;
+ }
+ }
+}
+
+S60EglEndpoint::~S60EglEndpoint()
+{
+ TRACE("S60EglEndpoint::~S60EglEndpoint" << qtThisPtr());
+ if (EGL_NO_ENDPOINT_NOK != m_endpoint)
+ m_extensions->destroyEndpoint(m_display, m_endpoint);
+}
+
+void S60EglEndpoint::endpointEvent()
+{
+ const EGLBoolean ready = m_extensions->getEndpointAttrib(m_display, m_endpoint, EGL_ENDPOINT_READY_NOK);
+ VERBOSE_TRACE("S60EglEndpoint::endpointEvent" << qtThisPtr() << "state" << m_state << "ready" << ready);
+ switch (m_state) {
+ case Created:
+ m_state = Active;
+ case Active:
+ emit imageAvailable();
+ break;
+ case Null:
+ default:
+ Q_ASSERT(false);
+ break;
+ }
+}
+
+bool S60EglEndpoint::isValid() const
+{
+ return (m_state != Null);
+}
+
+void S60EglEndpoint::setDelay(qint64 delay)
+{
+ VERBOSE_TRACE("S60EglEndpoint::setDelay" << qtThisPtr() << "delay" << delay);
+ m_extensions->setEndpointAttrib(m_display, m_endpoint, EGL_DELAY_NOK, delay);
+}
+
+EGLImageKHR S60EglEndpoint::acquireImage()
+{
+ Q_ASSERT(EGL_NO_IMAGE_KHR == m_image);
+ m_image = m_extensions->acquireImage(m_display, m_endpoint);
+ VERBOSE_TRACE("S60EglEndpoint::acquireImage" << qtThisPtr() << "image" << m_image);
+ if (EGL_NO_IMAGE_KHR == m_image) {
+ qWarning() << "S60EglEndpoint::endpointEvent" << qtThisPtr() << "null image";
+ if (!m_eventHandler->IsActive())
+ m_eventHandler->request();
+ }
+ return m_image;
+}
+
+void S60EglEndpoint::releaseImage()
+{
+ if (EGL_NO_IMAGE_KHR != m_image) {
+ VERBOSE_TRACE("S60EglEndpoint::releaseImage" << qtThisPtr() << "image" << m_image);
+ m_extensions->releaseImage(m_display, m_endpoint, m_image, m_api);
+ m_image = EGL_NO_IMAGE_KHR;
+ if (!m_eventHandler->IsActive())
+ m_eventHandler->request();
+ }
+}
+
diff --git a/plugins/multimedia/symbian/videooutput/s60eglendpoint.h b/plugins/multimedia/symbian/videooutput/s60eglendpoint.h
new file mode 100644
index 0000000000..39faa8a84d
--- /dev/null
+++ b/plugins/multimedia/symbian/videooutput/s60eglendpoint.h
@@ -0,0 +1,93 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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, Nokia gives you certain additional
+** rights. These rights are described in the Nokia 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.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef S60EGLENDPOINT_H
+#define S60EGLENDPOINT_H
+
+#include <QtCore/QObject>
+#include <egl/eglext.h>
+
+QT_USE_NAMESPACE
+
+class QTime;
+class S60EglEndpointEventHandler;
+class S60EglExtensions;
+class TSurfaceId;
+
+class S60EglEndpoint : public QObject
+{
+ Q_OBJECT
+
+public:
+ S60EglEndpoint(const TSurfaceId &surface, S60EglExtensions *extensions,
+ QObject *parent);
+ ~S60EglEndpoint();
+
+ bool isValid() const;
+ void setDelay(qint64 delay);
+ EGLImageKHR acquireImage();
+ void releaseImage();
+
+signals:
+ void imageAvailable();
+
+private:
+ void requestImage();
+ void endpointEvent();
+
+private:
+ friend class S60EglEndpointEventHandler;
+ S60EglExtensions *m_extensions;
+ EGLContext m_context;
+ EGLenum m_api;
+ EGLDisplay m_display;
+ EGLEndpointNOK m_endpoint;
+ QScopedPointer<S60EglEndpointEventHandler> m_eventHandler;
+ enum State {
+ Null,
+ Created,
+ Active
+ } m_state;
+ EGLImageKHR m_image;
+};
+
+#endif // S60EGLENDPOINT_H
+
diff --git a/plugins/multimedia/symbian/videooutput/s60eglextensions.cpp b/plugins/multimedia/symbian/videooutput/s60eglextensions.cpp
new file mode 100644
index 0000000000..bf60957d33
--- /dev/null
+++ b/plugins/multimedia/symbian/videooutput/s60eglextensions.cpp
@@ -0,0 +1,188 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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, Nokia gives you certain additional
+** rights. These rights are described in the Nokia 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.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "s60eglextensions.h"
+#include "s60mmtrace.h"
+#include <e32base.h>
+#include <egl/egl.h>
+#include <graphics/surface.h>
+#include <QtCore/QDebug>
+#include <QtCore/QTime>
+
+S60EglExtensions *S60EglExtensions::create(QObject *parent)
+{
+ S60EglExtensions *self = new S60EglExtensions(parent);
+ if (!self->initialize()) {
+ delete self;
+ self = 0;
+ }
+ return self;
+}
+
+S60EglExtensions::S60EglExtensions(QObject *parent)
+ : QObject(parent)
+ , m_eglCreateEndpointNOK(0)
+ , m_eglDestroyEndpointNOK(0)
+ , m_eglGetEndpointAttribNOK(0)
+ , m_eglSetEndpointAttribNOK(0)
+ , m_eglAcquireImageNOK(0)
+ , m_eglReleaseImageNOK(0)
+ , m_eglGetEndpointDirtyAreaNOK(0)
+ , m_eglEndpointRequestNotificationNOK(0)
+ , m_eglEndpointCancelNotificationNOK(0)
+ , m_eglDestroyImageKHR(0)
+#ifndef QT_NO_OPENGL
+ , m_glEGLImageTargetTexture2DOES(0)
+#endif
+#ifndef QT_NO_OPENVG
+ , m_vgCreateEGLImageTargetKHR(0)
+#endif
+{
+
+}
+
+S60EglExtensions::~S60EglExtensions()
+{
+
+}
+
+bool S60EglExtensions::initialize()
+{
+ const bool endpoint =
+ getProcAddress("eglCreateEndpointNOK", m_eglCreateEndpointNOK)
+ && getProcAddress("eglDestroyEndpointNOK", m_eglDestroyEndpointNOK)
+ && getProcAddress("eglGetEndpointAttribNOK", m_eglGetEndpointAttribNOK)
+ && getProcAddress("eglSetEndpointAttribNOK", m_eglSetEndpointAttribNOK)
+ && getProcAddress("eglAcquireImageNOK", m_eglAcquireImageNOK)
+ && getProcAddress("eglReleaseImageNOK", m_eglReleaseImageNOK)
+ && getProcAddress("eglGetEndpointDirtyAreaNOK", m_eglGetEndpointDirtyAreaNOK)
+ && getProcAddress("eglEndpointRequestNotificationNOK", m_eglEndpointRequestNotificationNOK)
+ && getProcAddress("eglEndpointCancelNotificationNOK", m_eglEndpointCancelNotificationNOK)
+ && getProcAddress("eglDestroyImageKHR", m_eglDestroyImageKHR);
+
+ bool gl = true;
+#ifndef QT_NO_OPENGL
+ gl = getProcAddress("glEGLImageTargetTexture2DOES", m_glEGLImageTargetTexture2DOES);
+#endif
+
+ bool vg = true;
+#ifndef QT_NO_OPENVG
+ vg = getProcAddress("vgCreateEGLImageTargetKHR", m_vgCreateEGLImageTargetKHR);
+#endif
+
+ return (endpoint && gl && vg);
+}
+
+template <typename FuncPtr>
+bool S60EglExtensions::getProcAddress(const char *procName, FuncPtr &funcPtr)
+{
+ funcPtr = reinterpret_cast<FuncPtr>(eglGetProcAddress(procName));
+ if (!funcPtr)
+ qWarning() << "S60EglEndpointFunctions::getProcAddress" << procName << "not found";
+ return (funcPtr != 0);
+}
+
+EGLEndpointNOK S60EglExtensions::createEndpoint(EGLDisplay dpy, EGLenum type, EGLenum source_type,
+ EGLEndpointSourceNOK source, const EGLint *attrib_list) const
+{
+ return m_eglCreateEndpointNOK(dpy, type, source_type, source, attrib_list);
+}
+
+EGLBoolean S60EglExtensions::destroyEndpoint(EGLDisplay dpy, EGLEndpointNOK endpoint) const
+{
+ return m_eglDestroyEndpointNOK(dpy, endpoint);
+}
+
+EGLint S60EglExtensions::getEndpointAttrib(EGLDisplay dpy, EGLEndpointNOK endpoint, EGLint attrib) const
+{
+ return m_eglGetEndpointAttribNOK(dpy, endpoint, attrib);
+}
+
+EGLBoolean S60EglExtensions::setEndpointAttrib(EGLDisplay dpy, EGLEndpointNOK endpoint, EGLint attrib, EGLint value) const
+{
+ return m_eglSetEndpointAttribNOK(dpy, endpoint, attrib, value);
+}
+
+EGLImageKHR S60EglExtensions::acquireImage(EGLDisplay dpy, EGLEndpointNOK endpoint) const
+{
+ return m_eglAcquireImageNOK(dpy, endpoint);
+}
+
+EGLBoolean S60EglExtensions::releaseImage(EGLDisplay dpy, EGLEndpointNOK endpoint, EGLImageKHR image, EGLenum api) const
+{
+ return m_eglReleaseImageNOK(dpy, endpoint, image, api);
+}
+
+EGLint S60EglExtensions::getEndpointDirtyArea(EGLDisplay dpy, EGLEndpointNOK endpoint, EGLint* rects,
+ EGLint start_rect, EGLint max_rects, EGLBoolean collapse) const
+{
+ return m_eglGetEndpointDirtyAreaNOK(dpy, endpoint, rects, start_rect, max_rects, collapse);
+}
+
+EGLBoolean S60EglExtensions::endpointRequestNotification(EGLDisplay dpy, EGLEndpointNOK endpoint, EGLTRequestStatusNOK sync) const
+{
+ return m_eglEndpointRequestNotificationNOK(dpy, endpoint, sync);
+}
+
+EGLBoolean S60EglExtensions::endpointCancelNotification(EGLDisplay dpy, EGLEndpointNOK endpoint) const
+{
+ return m_eglEndpointCancelNotificationNOK(dpy, endpoint);
+}
+
+EGLBoolean S60EglExtensions::destroyImage(EGLDisplay dpy, EGLImageKHR image) const
+{
+ return m_eglDestroyImageKHR(dpy, image);
+}
+
+#ifndef QT_NO_OPENGL
+void S60EglExtensions::glEglImageTargetTexture(GLenum target, GLeglImageOES image)
+{
+ return m_glEGLImageTargetTexture2DOES(target, image);
+}
+#endif
+
+#ifndef QT_NO_OPENVG
+VGImage S60EglExtensions::vgCreateEglImageTarget(EGLImageKHR image)
+{
+ return m_vgCreateEGLImageTargetKHR(image);
+}
+#endif // !QT_NO_OPENVG
+
diff --git a/plugins/multimedia/symbian/videooutput/s60eglextensions.h b/plugins/multimedia/symbian/videooutput/s60eglextensions.h
new file mode 100644
index 0000000000..85dd8db92b
--- /dev/null
+++ b/plugins/multimedia/symbian/videooutput/s60eglextensions.h
@@ -0,0 +1,118 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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, Nokia gives you certain additional
+** rights. These rights are described in the Nokia 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.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef S60EGLEXTENSIONS_H
+#define S60EGLEXTENSIONS_H
+
+#include <QtCore/QObject>
+#include <egl/eglext.h>
+
+#ifndef QT_NO_OPENGL
+#include <QtOpenGL/qgl.h>
+#include <GLES/glext.h>
+#endif
+
+#ifndef QT_NO_OPENVG
+#include <QtOpenVG/qvg.h>
+#endif
+
+QT_USE_NAMESPACE
+
+class S60EglExtensions : public QObject
+ {
+public:
+ static S60EglExtensions *create(QObject *parent = 0);
+ ~S60EglExtensions();
+
+ // EGL_NOK_image_endpoint
+ EGLEndpointNOK createEndpoint(EGLDisplay dpy, EGLenum type, EGLenum source_type, EGLEndpointSourceNOK source, const EGLint *attrib_list) const;
+ EGLBoolean destroyEndpoint(EGLDisplay dpy, EGLEndpointNOK endpoint) const;
+ EGLint getEndpointAttrib(EGLDisplay dpy, EGLEndpointNOK endpoint, EGLint attrib) const;
+ EGLBoolean setEndpointAttrib(EGLDisplay dpy, EGLEndpointNOK endpoint, EGLint attrib, EGLint value) const;
+ EGLImageKHR acquireImage(EGLDisplay dpy, EGLEndpointNOK endpoint) const;
+ EGLBoolean releaseImage(EGLDisplay dpy, EGLEndpointNOK endpoint, EGLImageKHR image, EGLenum api) const;
+ EGLint getEndpointDirtyArea(EGLDisplay dpy, EGLEndpointNOK endpoint, EGLint *rects, EGLint start_rect, EGLint max_rects, EGLBoolean collapse) const;
+ EGLBoolean endpointRequestNotification(EGLDisplay dpy, EGLEndpointNOK endpoint, EGLTRequestStatusNOK sync) const;
+ EGLBoolean endpointCancelNotification(EGLDisplay dpy, EGLEndpointNOK endpoint) const;
+ EGLBoolean destroyImage(EGLDisplay dpy, EGLImageKHR image) const;
+
+#ifndef QT_NO_OPENGL
+ // EGL_KHR_gl_texture_2D_image
+ void glEglImageTargetTexture(GLenum target, GLeglImageOES image);
+#endif // !QT_NO_OPENGL
+
+#ifndef QT_NO_OPENVG
+ // EGL_KHR_vg_parent_image
+ VGImage vgCreateEglImageTarget(EGLImageKHR image);
+#endif // !QT_NO_OPENVG
+
+private:
+ S60EglExtensions(QObject *parent = 0);
+ bool initialize();
+ template <typename FuncPtr> static bool getProcAddress(const char *procName, FuncPtr &funcPtr);
+
+private:
+ // EGL_NOK_image_endpoint
+ PFNEGLCREATEENDPOINTNOKPROC m_eglCreateEndpointNOK;
+ PFNEGLDESTROYENDPOINTNOKPROC m_eglDestroyEndpointNOK;
+ PFNEGLGETENDPOINTATTRIBNOKPROC m_eglGetEndpointAttribNOK;
+ PFNEGLSETENDPOINTATTRIBNOKPROC m_eglSetEndpointAttribNOK;
+ PFNEGLACQUIREIMAGENOKPROC m_eglAcquireImageNOK;
+ PFNEGLRELEASEIMAGENOKPROC m_eglReleaseImageNOK;
+ PFNEGLGETENDPOINTDIRTYAREANOKPROC m_eglGetEndpointDirtyAreaNOK;
+ PFNEGLENDPOINTREQUESTNOTIFICATIONNOKPROC m_eglEndpointRequestNotificationNOK;
+ PFNEGLENDPOINTCANCELNOTIFICATIONNOKPROC m_eglEndpointCancelNotificationNOK;
+ PFNEGLDESTROYIMAGEKHRPROC m_eglDestroyImageKHR;
+
+#ifndef QT_NO_OPENGL
+ // EGL_KHR_gl_texture_2D_image
+ PFNGLEGLIMAGETARGETTEXTURE2DOESPROC m_glEGLImageTargetTexture2DOES;
+#endif // !QT_NO_OPENGL
+
+#ifndef QT_NO_OPENVG
+ // EGL_KHR_vg_parent_image
+ typedef VGImage (*PFNCREATEEGLIMAGETARGETKHRPROC)(EGLImageKHR);
+ PFNCREATEEGLIMAGETARGETKHRPROC m_vgCreateEGLImageTargetKHR;
+#endif // !QT_NO_OPENVG
+ };
+
+#endif // S60EGLEXTENSIONS_H
+
diff --git a/plugins/multimedia/symbian/videooutput/s60nativewindow.cpp b/plugins/multimedia/symbian/videooutput/s60nativewindow.cpp
new file mode 100644
index 0000000000..d1aeb22ffa
--- /dev/null
+++ b/plugins/multimedia/symbian/videooutput/s60nativewindow.cpp
@@ -0,0 +1,115 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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, Nokia gives you certain additional
+** rights. These rights are described in the Nokia 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.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "s60mmtrace.h"
+#include "s60nativewindow.h"
+#include <coemain.h>
+#include <w32std.h>
+#include <graphics/surfaceconfiguration.h>
+
+static const int WindowWidth = 320;
+static const int WindowHeight = 240;
+
+S60NativeWindow::S60NativeWindow(QObject *parent)
+ : QObject(parent)
+ , m_window(0)
+ , m_surface(TSurfaceId::CreateNullId())
+{
+ TRACE("S60NativeWindow::S60NativeWindow" << qtThisPtr());
+ RWsSession &session = CCoeEnv::Static()->WsSession();
+ RWindowGroup &windowGroup = CCoeEnv::Static()->RootWin();
+ m_window = q_check_ptr(new RWindow(session));
+ const int err = m_window->Construct(windowGroup, reinterpret_cast<quint32>(this));
+ if (err) {
+ delete m_window;
+ m_window = 0;
+ } else {
+ m_window->SetExtent(TPoint(0, 0), TSize(WindowWidth, WindowHeight));
+ }
+}
+
+S60NativeWindow::~S60NativeWindow()
+{
+ TRACE("S60NativeWindow::~S60NativeWindow" << qtThisPtr());
+ if (m_window)
+ m_window->Close();
+ delete m_window;
+}
+
+RWindow *S60NativeWindow::windowHandle() const
+{
+ return m_window;
+}
+
+void S60NativeWindow::setNativeSurface(const TSurfaceId &surface)
+{
+ getSurface();
+ if (surface != m_surface) {
+ TRACE("S60NativeWindow::setNativeSurface" << (void*)surface.iInternal[3]);
+ if (RWindow *const window = windowHandle())
+ window->SetBackgroundSurface(surface);
+ }
+}
+
+TSurfaceId S60NativeWindow::nativeSurface()
+{
+ getSurface();
+ return m_surface;
+}
+
+void S60NativeWindow::getSurface()
+{
+ TSurfaceId surface = TSurfaceId::CreateNullId();
+ int err = 0;
+ RWindow *const window = windowHandle();
+ if (window) {
+ TSurfaceConfiguration config;
+ err = window->GetBackgroundSurface(config);
+ if (!err)
+ config.GetSurfaceId(surface);
+ }
+ if (!err) {
+ m_surface = surface;
+ if (!m_surface.IsNull())
+ window->RemoveBackgroundSurface(ETrue);
+ }
+}
+
diff --git a/plugins/multimedia/symbian/videooutput/s60nativewindow.h b/plugins/multimedia/symbian/videooutput/s60nativewindow.h
new file mode 100644
index 0000000000..7a359ad5e6
--- /dev/null
+++ b/plugins/multimedia/symbian/videooutput/s60nativewindow.h
@@ -0,0 +1,73 @@
+/**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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, Nokia gives you certain additional
+** rights. These rights are described in the Nokia 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.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef S60NATIVEWINDOW_H
+#define S60NATIVEWINDOW_H
+
+#include <QtCore/QObject>
+#include <graphics/surface.h>
+
+class RWindow;
+class RWindowGroup;
+
+QT_USE_NAMESPACE
+
+class S60NativeWindow : public QObject
+{
+ Q_OBJECT
+public:
+ S60NativeWindow(QObject *parent);
+ ~S60NativeWindow();
+
+ RWindow *windowHandle() const;
+ TSurfaceId nativeSurface();
+
+public slots:
+ void setNativeSurface(const TSurfaceId &surface);
+
+private:
+ void getSurface();
+
+private:
+ RWindow *m_window;
+ TSurfaceId m_surface;
+};
+
+#endif // S60NATIVEWINDOW_H
diff --git a/plugins/multimedia/symbian/videooutput/s60videobuffer.cpp b/plugins/multimedia/symbian/videooutput/s60videobuffer.cpp
new file mode 100644
index 0000000000..45611ec793
--- /dev/null
+++ b/plugins/multimedia/symbian/videooutput/s60videobuffer.cpp
@@ -0,0 +1,253 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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, Nokia gives you certain additional
+** rights. These rights are described in the Nokia 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.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "s60eglextensions.h"
+#include "s60mmtrace.h"
+#include "s60videoeglrenderercontrol.h"
+#include "s60videobuffer.h"
+#include <QtCore/QElapsedTimer>
+#include <QtCore/QVariant>
+
+#ifndef QT_NO_OPENGL
+#include <GLES/glext.h>
+#endif
+
+// TODO: get rid of these magic numbers
+const QAbstractVideoBuffer::HandleType EGLImageTextureHandle =
+ QAbstractVideoBuffer::HandleType(QAbstractVideoBuffer::UserHandle + 128);
+#ifndef QT_NO_OPENVG
+const QAbstractVideoBuffer::HandleType VGImageTextureHandle =
+ QAbstractVideoBuffer::HandleType(QAbstractVideoBuffer::UserHandle + 129);
+#endif // !QT_NO_OPENVG
+
+// Dummy pointer returned by map() - see comments below
+static uchar* const DummyMapReturnValue = reinterpret_cast<uchar *>(1);
+
+//-----------------------------------------------------------------------------
+// S60EglImageVideoBuffer
+//-----------------------------------------------------------------------------
+
+S60EglImageVideoBuffer::S60EglImageVideoBuffer(S60VideoEglRendererControl *control,
+ S60EglEndpoint *endpoint)
+ : QAbstractVideoBuffer(EGLImageTextureHandle)
+ , m_timer(new QElapsedTimer)
+ , m_control(control)
+ , m_endpoint(endpoint)
+ , m_delay(0)
+{
+ VERBOSE_TRACE("S60EglImageVideoBuffer::S60EglImageVideoBuffer" << qtThisPtr());
+}
+
+S60EglImageVideoBuffer::S60EglImageVideoBuffer(S60VideoEglRendererControl *control,
+ S60EglEndpoint *endpoint,
+ QAbstractVideoBuffer::HandleType type)
+ : QAbstractVideoBuffer(type)
+ , m_timer(new QElapsedTimer)
+ , m_control(control)
+ , m_endpoint(endpoint)
+ , m_delay(0)
+{
+
+}
+
+S60EglImageVideoBuffer::~S60EglImageVideoBuffer()
+{
+ VERBOSE_TRACE("S60EglImageVideoBuffer::~S60EglImageVideoBuffer" << qtThisPtr());
+ unmap();
+}
+
+QAbstractVideoBuffer::MapMode S60EglImageVideoBuffer::mapMode() const
+{
+ return NotMapped;
+}
+
+// Note: the use of map/unmap to indicate when the frame has been displayed
+// by QGraphicsVideoItem is something of a hack, but in QtMobility 1.2,
+// there is no suitable QVideoFrame API, so we must do it this way.
+
+uchar *S60EglImageVideoBuffer::map(MapMode mode, int *numBytes, int *bytesPerLine)
+{
+ Q_UNUSED(mode);
+ Q_UNUSED(numBytes);
+ Q_UNUSED(bytesPerLine);
+ VERBOSE_TRACE("S60EglImageVideoBuffer::map" << qtThisPtr());
+ acquireEglImage();
+ return DummyMapReturnValue;
+}
+
+void S60EglImageVideoBuffer::unmap()
+{
+ VERBOSE_TRACE("S60EglImageVideoBuffer::unmap" << qtThisPtr());
+ releaseEglImage();
+}
+
+QVariant S60EglImageVideoBuffer::handle() const
+{
+ return m_eglImage;
+}
+
+void S60EglImageVideoBuffer::acquireEglImage()
+{
+ Q_ASSERT(EGL_NO_IMAGE_KHR == m_eglImage);
+ m_timer->start();
+ m_eglImage = m_control->acquireEglImage(m_endpoint);
+}
+
+void S60EglImageVideoBuffer::releaseEglImage()
+{
+ if (EGL_NO_IMAGE_KHR != m_eglImage) {
+ VERBOSE_TRACE("S60EglImageVideoBuffer::releaseEglImage" << qtThisPtr());
+ // Here we need to calculate the time interval between acquiring an image
+ // from the endpoint, and that image being rendered. This is passed back
+ // to the producer, which may use it to correct AV sync.
+ // We assume that unmap() was called by the client shortly after rendering
+ // the image.
+ m_delay = 1000 * m_timer->elapsed();
+ m_control->releaseEglImage(m_endpoint, m_delay);
+ m_eglImage = EGL_NO_IMAGE_KHR;
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+// S60GlTextureVideoBuffer
+//-----------------------------------------------------------------------------
+
+#ifndef QT_NO_OPENGL
+
+S60GlTextureVideoBuffer::S60GlTextureVideoBuffer(S60VideoEglRendererControl *control,
+ S60EglEndpoint *endpoint,
+ S60EglExtensions *extensions)
+ : S60EglImageVideoBuffer(control, endpoint, QAbstractVideoBuffer::GLTextureHandle)
+ , m_extensions(extensions)
+ , m_texture(0)
+{
+
+}
+
+S60GlTextureVideoBuffer::~S60GlTextureVideoBuffer()
+{
+ VERBOSE_TRACE("S60GlTextureVideoBuffer::~S60GlTextureVideoBuffer" << qtThisPtr());
+ unmap();
+}
+
+uchar *S60GlTextureVideoBuffer::map(MapMode mode, int *numBytes, int *bytesPerLine)
+{
+ Q_UNUSED(mode);
+ Q_UNUSED(numBytes);
+ Q_UNUSED(bytesPerLine);
+ VERBOSE_TRACE("S60GlTextureVideoBuffer::map" << qtThisPtr());
+ acquireEglImage();
+ glGenTextures(1, &m_texture);
+ glBindTexture(GL_TEXTURE_2D, m_texture);
+ const GLeglImageOES glImage = reinterpret_cast<GLeglImageOES>(m_eglImage);
+ m_extensions->glEglImageTargetTexture(GL_TEXTURE_2D, glImage);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ glBindTexture(GL_TEXTURE_2D, 0);
+ return DummyMapReturnValue;
+}
+
+void S60GlTextureVideoBuffer::unmap()
+{
+ VERBOSE_TRACE("S60GlTextureVideoBuffer::unmap" << qtThisPtr());
+ if (m_texture)
+ glDeleteTextures(1, &m_texture);
+ releaseEglImage();
+}
+
+QVariant S60GlTextureVideoBuffer::handle() const
+{
+ return m_texture;
+}
+
+#endif // !QT_NO_OPENGL
+
+
+//-----------------------------------------------------------------------------
+// S60VGImageVideoBuffer
+//-----------------------------------------------------------------------------
+
+#ifndef QT_NO_OPENVG
+
+S60VgImageVideoBuffer::S60VgImageVideoBuffer(S60VideoEglRendererControl *control,
+ S60EglEndpoint *endpoint,
+ S60EglExtensions *extensions)
+ : S60EglImageVideoBuffer(control, endpoint, VGImageTextureHandle)
+ , m_extensions(extensions)
+{
+ VERBOSE_TRACE("S60VgImageVideoBuffer::S60VgImageVideoBuffer" << qtThisPtr());
+}
+
+S60VgImageVideoBuffer::~S60VgImageVideoBuffer()
+{
+ VERBOSE_TRACE("S60VgImageVideoBuffer::~S60VgImageVideoBuffer" << qtThisPtr());
+ unmap();
+}
+
+uchar *S60VgImageVideoBuffer::map(MapMode mode, int *numBytes, int *bytesPerLine)
+{
+ Q_UNUSED(mode);
+ Q_UNUSED(numBytes);
+ Q_UNUSED(bytesPerLine);
+ VERBOSE_TRACE("S60GlTextureVideoBuffer::map" << qtThisPtr());
+ acquireEglImage();
+ m_vgImage = m_extensions->vgCreateEglImageTarget(m_eglImage);
+ return DummyMapReturnValue;
+}
+
+void S60VgImageVideoBuffer::unmap()
+{
+ VERBOSE_TRACE("S60VgImageVideoBuffer::unmap" << qtThisPtr());
+ if (VG_INVALID_HANDLE != m_vgImage)
+ vgDestroyImage(m_vgImage);
+ releaseEglImage();
+}
+
+QVariant S60VgImageVideoBuffer::handle() const
+{
+ return static_cast<quint32>(m_vgImage);
+}
+
+#endif // !QT_NO_OPENVG
+
diff --git a/plugins/multimedia/symbian/videooutput/s60videobuffer.h b/plugins/multimedia/symbian/videooutput/s60videobuffer.h
new file mode 100644
index 0000000000..032809b419
--- /dev/null
+++ b/plugins/multimedia/symbian/videooutput/s60videobuffer.h
@@ -0,0 +1,134 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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, Nokia gives you certain additional
+** rights. These rights are described in the Nokia 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.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef S60VIDEOBUFFER_H
+#define S60VIDEOBUFFER_H
+
+#include <QtMultimediaKit/QAbstractVideoBuffer>
+#include <egl/eglext.h>
+
+#ifndef QT_NO_OPENGL
+#include <QtOpenGL/qgl.h>
+#endif
+
+#ifndef QT_NO_OPENVG
+#include <QtOpenVG/qvg.h>
+#endif
+
+QT_USE_NAMESPACE
+
+class QElapsedTimer;
+class S60EglEndpoint;
+class S60EglExtensions;
+class S60VideoEglRendererControl;
+
+class S60EglImageVideoBuffer : public QAbstractVideoBuffer
+{
+public:
+ S60EglImageVideoBuffer(S60VideoEglRendererControl *control,
+ S60EglEndpoint *endpoint);
+ ~S60EglImageVideoBuffer();
+
+ // QAbstractVideoBuffer
+ MapMode mapMode() const;
+ uchar *map(MapMode mode, int *numBytes, int *bytesPerLine);
+ void unmap();
+ QVariant handle() const;
+
+protected:
+ S60EglImageVideoBuffer(S60VideoEglRendererControl *control,
+ S60EglEndpoint *endpoint,
+ QAbstractVideoBuffer::HandleType type);
+ void acquireEglImage();
+ void releaseEglImage();
+
+protected:
+ EGLImageKHR m_eglImage;
+
+private:
+ QScopedPointer<QElapsedTimer> m_timer;
+ S60VideoEglRendererControl *m_control;
+ S60EglEndpoint *m_endpoint;
+ qint64 m_delay;
+};
+
+#ifndef QT_NO_OPENGL
+class S60GlTextureVideoBuffer : public S60EglImageVideoBuffer
+{
+public:
+ S60GlTextureVideoBuffer(S60VideoEglRendererControl *control,
+ S60EglEndpoint *endpoint,
+ S60EglExtensions *extensions);
+ ~S60GlTextureVideoBuffer();
+
+ // QAbstractVideoBuffer
+ uchar *map(MapMode mode, int *numBytes, int *bytesPerLine);
+ void unmap();
+ QVariant handle() const;
+
+private:
+ S60EglExtensions *m_extensions;
+ GLuint m_texture;
+};
+#endif // !QT_NO_OPENGL
+
+#ifndef QT_NO_OPENVG
+class S60VgImageVideoBuffer : public S60EglImageVideoBuffer
+{
+public:
+ S60VgImageVideoBuffer(S60VideoEglRendererControl *control,
+ S60EglEndpoint *endpoint,
+ S60EglExtensions *extensions);
+ ~S60VgImageVideoBuffer();
+
+ // QAbstractVideoBuffer
+ uchar *map(MapMode mode, int *numBytes, int *bytesPerLine);
+ void unmap();
+ QVariant handle() const;
+
+private:
+ S60EglExtensions *m_extensions;
+ VGImage m_vgImage;
+};
+#endif // !QT_NO_OPENVG
+
+#endif // S60VIDEOBUFFER_H
+
diff --git a/plugins/multimedia/symbian/videooutput/s60videodisplay.cpp b/plugins/multimedia/symbian/videooutput/s60videodisplay.cpp
index f3a2197f72..8c54c267fb 100644
--- a/plugins/multimedia/symbian/videooutput/s60videodisplay.cpp
+++ b/plugins/multimedia/symbian/videooutput/s60videodisplay.cpp
@@ -46,13 +46,13 @@
#include <w32std.h>
S60VideoDisplay::S60VideoDisplay(QObject *parent)
-: QObject(parent)
-, m_fullScreen(false)
-, m_visible(true)
-, m_aspectRatioMode(Qt::KeepAspectRatio)
-, m_paintingEnabled(false)
-, m_rotation(0.0f)
-, m_hasContent(false)
+ : QObject(parent)
+ , m_fullScreen(false)
+ , m_visible(true)
+ , m_aspectRatioMode(Qt::KeepAspectRatio)
+ , m_paintingEnabled(false)
+ , m_rotation(0.0f)
+ , m_hasContent(false)
{
connect(this, SIGNAL(displayRectChanged(QRect, QRect)),
this, SLOT(updateContentRect()));
diff --git a/plugins/multimedia/symbian/videooutput/s60videoeglrenderercontrol.cpp b/plugins/multimedia/symbian/videooutput/s60videoeglrenderercontrol.cpp
new file mode 100644
index 0000000000..29f3ef39c2
--- /dev/null
+++ b/plugins/multimedia/symbian/videooutput/s60videoeglrenderercontrol.cpp
@@ -0,0 +1,223 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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, Nokia gives you certain additional
+** rights. These rights are described in the Nokia 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.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "s60eglendpoint.h"
+#include "s60mmtrace.h"
+#include "s60videobuffer.h"
+#include "s60videoeglrenderercontrol.h"
+#include <EGL/egl.h>
+#include <QtMultimediaKit/QAbstractVideoSurface>
+#include <QtMultimediaKit/QVideoFrame>
+#include <QtMultimediaKit/QVideoSurfaceFormat>
+
+#ifdef VIDEOOUTPUT_MEASURE_FRAMERATE
+#include "s60videoframerate.h"
+#endif
+
+S60VideoEglRendererControl::S60VideoEglRendererControl(S60EglExtensions *extensions, QObject *parent)
+ : QVideoRendererControl(parent)
+ , m_nativeSurface(TSurfaceId::CreateNullId())
+ , m_doesProduceEglImages(false)
+ , m_surface(0)
+ , m_eglExtensions(extensions)
+ , m_eglEndpoint(0)
+ , m_buffer(0)
+ , m_frameRate(0)
+{
+ TRACE("S60VideoEglRendererControl::S60VideoEglRendererControl" << qtThisPtr());
+ Q_ASSERT(m_eglExtensions);
+#ifdef VIDEOOUTPUT_MEASURE_FRAMERATE
+ m_frameRate = new S60VideoFrameRate(this);
+#endif
+}
+
+S60VideoEglRendererControl::~S60VideoEglRendererControl()
+{
+ TRACE("S60VideoEglRendererControl::~S60VideoEglRendererControl" << qtThisPtr());
+}
+
+QAbstractVideoSurface *S60VideoEglRendererControl::surface() const
+{
+ return m_surface;
+}
+
+void S60VideoEglRendererControl::setSurface(QAbstractVideoSurface *surface)
+{
+ if (surface != m_surface) {
+ TRACE("S60VideoEglRendererControl::setSurface" << qtThisPtr()
+ << "surface" << surface);
+ m_surface = surface;
+ if (!m_surface)
+ destroyEndpoint();
+ else if (!m_nativeSurface.IsNull())
+ createEndpoint();
+ emit surfaceChanged();
+ }
+}
+
+void S60VideoEglRendererControl::setNativeSurface(TSurfaceId surface)
+{
+ if (surface != m_nativeSurface) {
+ TRACE("S60VideoEglRendererControl::setNativeSurface" << qtThisPtr()
+ << "surface" << (void*)surface.iInternal[3]);
+ m_nativeSurface = surface;
+ if (m_nativeSurface.IsNull())
+ destroyEndpoint();
+ else if (m_surface)
+ createEndpoint();
+ }
+}
+
+const QSize &S60VideoEglRendererControl::nativeSize() const
+{
+ return m_nativeSize;
+}
+
+bool S60VideoEglRendererControl::doesProduceEglImages() const
+{
+ return m_doesProduceEglImages;
+}
+
+void S60VideoEglRendererControl::setNativeSize(QSize size)
+{
+ if (size != m_nativeSize) {
+ TRACE("S60VideoEglRendererControl::setNativeSize" << qtThisPtr()
+ << "size" << size);
+ m_nativeSize = size;
+ emit nativeSizeChanged();
+ }
+}
+
+void S60VideoEglRendererControl::setDoesProduceEglImages(bool enabled)
+{
+ if (enabled != m_doesProduceEglImages) {
+ TRACE("S60VideoEglRendererControl::setDoesProduceEglImages" << qtThisPtr()
+ << "enabled" << enabled);
+ m_doesProduceEglImages = enabled;
+ }
+}
+
+// Helper function
+EGLenum currentEglApi()
+{
+ EGLenum api = 0;
+ if (EGL_NO_CONTEXT != eglGetCurrentContext())
+ api = eglQueryAPI();
+ return api;
+}
+
+void S60VideoEglRendererControl::imageAvailable()
+{
+ const EGLenum api = currentEglApi();
+ VERBOSE_TRACE("S60VideoEglRendererControl::imageAvailable" << qtThisPtr()
+ << "api" << api);
+ Q_ASSERT(!m_buffer);
+ if (m_doesProduceEglImages) {
+ m_buffer = new S60EglImageVideoBuffer(this, m_eglEndpoint);
+ } else {
+ switch (api) {
+#ifndef QT_NO_OPENGL
+ case EGL_OPENGL_ES_API:
+ m_buffer = new S60GlTextureVideoBuffer(this, m_eglEndpoint, m_eglExtensions);
+ break;
+#endif
+#ifndef QT_NO_OPENVG
+ case EGL_OPENVG_API:
+ m_buffer = new S60VgImageVideoBuffer(this, m_eglEndpoint, m_eglExtensions);
+ break;
+#endif
+ }
+ }
+ Q_ASSERT(m_buffer);
+ QVideoSurfaceFormat format(m_nativeSize,
+ QVideoFrame::Format_RGB32,
+ m_buffer->handleType());
+ format.setScanLineDirection(QVideoSurfaceFormat::BottomToTop);
+ if (!m_surface->isActive())
+ m_surface->start(format);
+ const QVideoFrame frame(m_buffer, format.frameSize(), format.pixelFormat());
+ m_surface->present(frame);
+#ifdef VIDEOOUTPUT_MEASURE_FRAMERATE
+ m_frameRate->notify();
+#endif
+}
+
+EGLImageKHR S60VideoEglRendererControl::acquireEglImage(S60EglEndpoint *endpoint) const
+{
+ VERBOSE_TRACE("S60VideoEglRendererControl::acquireEglImage" << qtThisPtr());
+ EGLImageKHR image = EGL_NO_IMAGE_KHR;
+ if (m_eglEndpoint == endpoint)
+ image = m_eglEndpoint->acquireImage();
+ return image;
+}
+
+void S60VideoEglRendererControl::releaseEglImage(S60EglEndpoint *endpoint, qint64 delay)
+{
+ VERBOSE_TRACE("S60VideoEglRendererControl::releaseEglImage" << qtThisPtr()
+ << "delay" << delay);
+ if (m_eglEndpoint == endpoint) {
+ if (delay)
+ m_eglEndpoint->setDelay(delay);
+ m_eglEndpoint->releaseImage();
+ }
+ m_buffer = 0;
+}
+
+void S60VideoEglRendererControl::destroyEndpoint()
+{
+ if (m_eglEndpoint) {
+ delete m_eglEndpoint;
+ m_eglEndpoint = 0;
+ }
+}
+
+void S60VideoEglRendererControl::createEndpoint()
+{
+ Q_ASSERT(m_surface);
+ Q_ASSERT(!m_nativeSurface.IsNull());
+ Q_ASSERT(!m_eglEndpoint);
+ m_eglEndpoint = new S60EglEndpoint(m_nativeSurface, m_eglExtensions, this);
+ if (m_eglEndpoint->isValid())
+ connect(m_eglEndpoint, SIGNAL(imageAvailable()),
+ this, SLOT(imageAvailable()));
+ else
+ emit error();
+}
diff --git a/plugins/multimedia/symbian/videooutput/s60videoeglrenderercontrol.h b/plugins/multimedia/symbian/videooutput/s60videoeglrenderercontrol.h
new file mode 100644
index 0000000000..3cfc20414a
--- /dev/null
+++ b/plugins/multimedia/symbian/videooutput/s60videoeglrenderercontrol.h
@@ -0,0 +1,121 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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, Nokia gives you certain additional
+** rights. These rights are described in the Nokia 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.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef S60VIDEOEGLRENDERERCONTROL_H
+#define S60VIDEOEGLRENDERERCONTROL_H
+
+#include <QtCore/QSize>
+#include <QtMultimediaKit/QVideoRendererControl>
+#include <egl/eglext.h>
+#include <graphics/surface.h>
+
+QT_USE_NAMESPACE
+
+class QTime;
+class QVideoFrame;
+class S60EglEndpoint;
+class S60EglExtensions;
+class S60EglImageVideoBuffer;
+class S60VideoFrameRate;
+
+class S60VideoEglRendererControl : public QVideoRendererControl
+{
+ Q_OBJECT
+ Q_PROPERTY(QSize nativeSize READ nativeSize WRITE setNativeSize NOTIFY nativeSizeChanged)
+
+ /**
+ * If set, the returned QVideoFrame handle type is EGLImageKHR.
+ * If not set, the returned handle type depends on the current EGL rendering
+ * API:
+ * for OpenGLES, GL texture handles
+ * for OpenVG, VG image handles
+ * The default value is false.
+ */
+ Q_PROPERTY(bool doesProduceEglImages READ doesProduceEglImages WRITE setDoesProduceEglImages)
+
+public:
+ S60VideoEglRendererControl(S60EglExtensions *extensions, QObject *parent);
+ ~S60VideoEglRendererControl();
+
+public:
+ // QVideoRendererControl
+ QAbstractVideoSurface *surface() const;
+ void setSurface(QAbstractVideoSurface *surface);
+
+ const QSize &nativeSize() const;
+ bool doesProduceEglImages() const;
+
+public slots:
+ void setNativeSurface(TSurfaceId surface);
+ void setNativeSize(QSize size);
+ void setDoesProduceEglImages(bool enabled);
+
+signals:
+ void surfaceChanged();
+ void nativeSizeChanged();
+ void error();
+
+private slots:
+ void imageAvailable();
+
+private:
+ void destroyEndpoint();
+ void createEndpoint();
+
+private:
+ // Called by S60EglImageVideoBuffer
+ EGLImageKHR acquireEglImage(S60EglEndpoint *endpoint) const;
+ void releaseEglImage(S60EglEndpoint *endpoint, qint64 delay);
+
+private:
+ friend class S60EglImageVideoBuffer;
+ TSurfaceId m_nativeSurface;
+ QSize m_nativeSize;
+ bool m_doesProduceEglImages;
+ QAbstractVideoSurface *m_surface;
+ S60EglExtensions *m_eglExtensions;
+ S60EglEndpoint *m_eglEndpoint;
+ S60EglImageVideoBuffer *m_buffer;
+ S60VideoFrameRate *m_frameRate;
+};
+
+#endif // S60VIDEOEGLRENDERERCONTROL_H
+
diff --git a/plugins/multimedia/symbian/videooutput/s60videoframerate.cpp b/plugins/multimedia/symbian/videooutput/s60videoframerate.cpp
new file mode 100644
index 0000000000..936052bf0f
--- /dev/null
+++ b/plugins/multimedia/symbian/videooutput/s60videoframerate.cpp
@@ -0,0 +1,101 @@
+/**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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, Nokia gives you certain additional
+** rights. These rights are described in the Nokia 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.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "s60videoframerate.h"
+#include <QtCore/QDebug>
+#include <QtCore/QTimer>
+
+static const int HistoryLength = 5;
+static const int SamplingInterval = 100;
+static const int TraceInterval = 2000;
+
+S60VideoFrameRate::S60VideoFrameRate(QObject *parent)
+ : QObject(parent)
+ , m_sampleTimer(new QTimer(this))
+ , m_traceTimer(new QTimer(this))
+ , m_elapsedTimer(new QElapsedTimer)
+ , m_count(0)
+ , m_history(HistoryLength, 0.0)
+ , m_historyIndex(0)
+ , m_historyCount(0)
+ , m_frequency(0.0)
+ , m_frequencySum(0.0)
+{
+ connect(m_sampleTimer, SIGNAL(timeout()), this, SLOT(sample()));
+ m_sampleTimer->start(SamplingInterval);
+ connect(m_traceTimer, SIGNAL(timeout()), this, SLOT(trace()));
+ m_traceTimer->start(TraceInterval);
+ m_elapsedTimer->start();
+}
+
+S60VideoFrameRate::~S60VideoFrameRate()
+{
+
+}
+
+qreal S60VideoFrameRate::frequency() const
+{
+ return m_frequency;
+}
+
+void S60VideoFrameRate::notify()
+{
+ ++m_count;
+}
+
+void S60VideoFrameRate::sample()
+{
+ const int ms = m_elapsedTimer->restart();
+ const qreal freq = qreal(m_count * 1000) / ms;
+ m_frequencySum -= m_history[m_historyIndex];
+ m_frequencySum += freq;
+ m_history[m_historyIndex] = freq;
+ m_historyIndex = (m_historyIndex + 1) % m_history.count();
+ if (m_historyCount < m_history.count())
+ ++m_historyCount;
+ m_frequency = m_frequencySum / m_historyCount;
+ emit frequencyChanged(m_frequency);
+ m_count = 0;
+}
+
+void S60VideoFrameRate::trace()
+{
+ qDebug() << "S60VideoFrameRate" << m_frequency << "fps";
+}
diff --git a/plugins/multimedia/symbian/videooutput/s60videoframerate.h b/plugins/multimedia/symbian/videooutput/s60videoframerate.h
new file mode 100644
index 0000000000..e501483ce5
--- /dev/null
+++ b/plugins/multimedia/symbian/videooutput/s60videoframerate.h
@@ -0,0 +1,89 @@
+/**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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, Nokia gives you certain additional
+** rights. These rights are described in the Nokia 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.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef S60VIDEOFRAMERATE_H
+#define S60VIDEOFRAMERATE_H
+
+#include <QtCore/QObject>
+#include <QtCore/QString>
+#include <QtCore/QVector>
+
+class QElapsedTimer;
+class QTimer;
+
+/**
+ * Class for measuring video frame rate
+ *
+ * Delivery of a new video frame is notified by the client via the notify() slot.
+ * This class performs regular sampling of the event frequency and calculates a
+ * rolling average which is published via the frequency property.
+ */
+class S60VideoFrameRate : public QObject
+{
+ Q_OBJECT
+
+public:
+ S60VideoFrameRate(QObject *parent = 0);
+ ~S60VideoFrameRate();
+ qreal frequency() const;
+
+signals:
+ void frequencyChanged(qreal freq) const;
+
+public slots:
+ void notify();
+
+private slots:
+ void sample();
+ void trace();
+
+private:
+ QTimer *m_sampleTimer;
+ QTimer *m_traceTimer;
+ QScopedPointer<QElapsedTimer> m_elapsedTimer;
+ int m_count;
+ QVector<qreal> m_history;
+ int m_historyIndex;
+ int m_historyCount;
+ qreal m_frequencySum;
+ qreal m_frequency;
+};
+
+#endif // S60VIDEOFRAMERATE_H
diff --git a/plugins/multimedia/symbian/videooutput/s60videooutputfactory.cpp b/plugins/multimedia/symbian/videooutput/s60videooutputfactory.cpp
new file mode 100644
index 0000000000..cf77ade0cf
--- /dev/null
+++ b/plugins/multimedia/symbian/videooutput/s60videooutputfactory.cpp
@@ -0,0 +1,116 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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, Nokia gives you certain additional
+** rights. These rights are described in the Nokia 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.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "s60mmtrace.h"
+#include "s60videooutputfactory.h"
+#include "s60videowidgetcontrol.h"
+#include "s60videowindowcontrol.h"
+#ifdef VIDEOOUTPUT_GRAPHICS_SURFACES
+#include "s60eglextensions.h"
+#include "s60videoeglrenderercontrol.h"
+#endif
+#include <QtCore/QVariant>
+
+S60VideoOutputFactory::S60VideoOutputFactory(QObject *parent)
+ : QObject(parent)
+ , m_eglExtensions(0)
+{
+ TRACE("S60VideoOutputFactory::S60VideoOutputFactory" << qtThisPtr());
+#ifdef VIDEOOUTPUT_GRAPHICS_SURFACES
+ m_eglExtensions = S60EglExtensions::create(this);
+#endif
+}
+
+S60VideoOutputFactory::~S60VideoOutputFactory()
+{
+ TRACE("S60VideoOutputFactory::~S60VideoOutputFactory" << qtThisPtr());
+ foreach (ControlData d, m_data)
+ delete d.control;
+}
+
+QMediaControl *S60VideoOutputFactory::requestControl(const char *name)
+{
+ TRACE("S60VideoOutputFactory::requestControl" << qtThisPtr() << "name" << name);
+ QMediaControl *control = 0;
+ for (int i=0; i<m_data.count(); ++i) {
+ ControlData &d = m_data[i];
+ if (d.name == name) {
+ control = d.control;
+ // TODO: protect against multithreaded usage, if QMediaService is
+ // required to be thread-safe
+ ++d.refCount;
+ }
+ }
+ if (!control) {
+#ifdef VIDEOOUTPUT_GRAPHICS_SURFACES
+ if (qstrcmp(name, QVideoRendererControl_iid) == 0) {
+ if (m_eglExtensions)
+ control = new S60VideoEglRendererControl(m_eglExtensions, this);
+ } else
+#endif
+ if (qstrcmp(name, QVideoWidgetControl_iid) == 0) {
+ control = new S60VideoWidgetControl(this);
+ } else if (qstrcmp(name, QVideoWindowControl_iid) == 0) {
+ control = new S60VideoWindowControl(this);
+ }
+ if (control) {
+ ControlData d;
+ d.control = control;
+ d.name = name;
+ d.refCount = 1;
+ m_data += d;
+ }
+ }
+ return control;
+}
+
+void S60VideoOutputFactory::releaseControl(QMediaControl *control)
+{
+ TRACE("S60VideoOutputFactory::requestControl" << qtThisPtr() << "control" << control);
+ int index = -1;
+ for (int i=0; index == -1 && i<m_data.count(); ++i)
+ if (m_data.at(i).control == control)
+ index = i;
+ if (index != -1 && --m_data[index].refCount == 0) {
+ delete control;
+ m_data.remove(index);
+ }
+}
diff --git a/plugins/multimedia/symbian/videooutput/s60videooutputfactory.h b/plugins/multimedia/symbian/videooutput/s60videooutputfactory.h
new file mode 100644
index 0000000000..2d0a5681ea
--- /dev/null
+++ b/plugins/multimedia/symbian/videooutput/s60videooutputfactory.h
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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, Nokia gives you certain additional
+** rights. These rights are described in the Nokia 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.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef S60VIDEOOUTPUTFACTORY_H
+#define S60VIDEOOUTPUTFACTORY_H
+
+#include <qmediacontrol.h>
+#include <QtCore/QVector>
+
+QT_USE_NAMESPACE
+
+class S60EglExtensions;
+
+class S60VideoOutputFactory : public QObject
+{
+public:
+ S60VideoOutputFactory(QObject *parent = 0);
+ ~S60VideoOutputFactory();
+
+ QMediaControl *requestControl(const char *name);
+ void releaseControl(QMediaControl *control);
+
+private:
+ struct ControlData
+ {
+ QString name;
+ QMediaControl *control;
+ int refCount;
+ };
+ QVector<ControlData> m_data;
+ S60EglExtensions *m_eglExtensions;
+};
+
+#endif // S60VIDEOOUTPUTFACTORY_H
+
diff --git a/plugins/multimedia/symbian/videooutput/s60videooutpututils.cpp b/plugins/multimedia/symbian/videooutput/s60videooutpututils.cpp
index 2604b1091f..09cff69100 100644
--- a/plugins/multimedia/symbian/videooutput/s60videooutpututils.cpp
+++ b/plugins/multimedia/symbian/videooutput/s60videooutpututils.cpp
@@ -40,32 +40,76 @@
****************************************************************************/
#include "s60videooutpututils.h"
+#include <QtCore/QDebug>
-#ifdef PRIVATE_QTGUI_HEADERS_AVAILABLE
-#if QT_VERSION >= 0x040601 && !defined(__WINSCW__)
-#include <QtGui/private/qt_s60_p.h>
-#include <QtGui/private/qwidget_p.h>
-#define USE_PRIVATE_QTGUI_APIS
-#endif // QT_VERSION >= 0x040601 && !defined(__WINSCW__)
-#endif // PRIVATE_QTGUI_HEADERS_AVAILABLE
+#ifdef QSYMBIANGRAPHICSSYSTEMHELPER_AVAILABLE
+# include <QtGui/qgraphicssystemhelper_symbian.h>
+#else
+# ifdef PRIVATE_QTGUI_HEADERS_AVAILABLE
+# if QT_VERSION >= 0x040601 && !defined(__WINSCW__)
+# include <QtGui/private/qt_s60_p.h>
+# include <QtGui/private/qwidget_p.h>
+# define USE_PRIVATE_QTGUI_APIS
+# endif
+# else
+# define QTGUI_SUPPORT_UNAVAILABLE
+# endif
+#endif
namespace S60VideoOutputUtils
{
+// Helper function
+void warnQtGuiSupportUnavailable()
+{
+ qWarning() << "QtMobility was compiled against Qt which lacked some extension functions";
+ qWarning() << "Video and viewfinder may not render correctly";
+}
+
+#ifdef QSYMBIANGRAPHICSSYSTEMHELPER_AVAILABLE
+QSymbianGraphicsSystemHelper::NativePaintMode helperNativePaintMode(NativePaintMode mode)
+{
+ QSymbianGraphicsSystemHelper::NativePaintMode result =
+ QSymbianGraphicsSystemHelper::NativePaintModeDefault;
+ switch (mode) {
+ case Default:
+ break;
+ case ZeroFill:
+ result = QSymbianGraphicsSystemHelper::NativePaintModeZeroFill;
+ break;
+ case BlitWriteAlpha:
+ result = QSymbianGraphicsSystemHelper::NativePaintModeWriteAlpha;
+ break;
+ case Disable:
+ result = QSymbianGraphicsSystemHelper::NativePaintModeDisable;
+ break;
+ }
+ return result;
+}
+#endif
+
void setIgnoreFocusChanged(QWidget *widget)
{
+#ifdef QSYMBIANGRAPHICSSYSTEMHELPER_AVAILABLE
+ QSymbianGraphicsSystemHelper::setIgnoreFocusChanged(widget, true);
+#endif
#ifdef USE_PRIVATE_QTGUI_APIS
// Warning: if this flag is not set, the application may crash due to
// CGraphicsContext being called from within the context of
// QGraphicsVideoItem::paint(), when the video widget is shown.
static_cast<QSymbianControl *>(widget->winId())->setIgnoreFocusChanged(true);
-#else
+#endif
+#ifdef QTGUI_SUPPORT_UNAVAILABLE
Q_UNUSED(widget)
+ warnQtGuiSupportUnavailable();
#endif
}
void setNativePaintMode(QWidget *widget, NativePaintMode mode)
{
+#ifdef QSYMBIANGRAPHICSSYSTEMHELPER_AVAILABLE
+ QSymbianGraphicsSystemHelper::setNativePaintMode(widget, helperNativePaintMode(mode));
+#endif
#ifdef USE_PRIVATE_QTGUI_APIS
QWidgetPrivate *widgetPrivate = qt_widget_private(widget->window());
widgetPrivate->createExtra();
@@ -77,41 +121,53 @@ void setNativePaintMode(QWidget *widget, NativePaintMode mode)
widgetMode = QWExtra::ZeroFill;
break;
case BlitWriteAlpha:
-#if QT_VERSION >= 0x040704
+# if QT_VERSION >= 0x040704
widgetMode = QWExtra::BlitWriteAlpha;
-#endif
+# endif
break;
case Disable:
widgetMode = QWExtra::Disable;
break;
}
widgetPrivate->extraData()->nativePaintMode = widgetMode;
-#else
+#endif
+#ifdef QTGUI_SUPPORT_UNAVAILABLE
Q_UNUSED(widget)
Q_UNUSED(mode)
+ warnQtGuiSupportUnavailable();
#endif
}
void setNativePaintMode(WId wid, NativePaintMode mode)
{
+#ifdef QSYMBIANGRAPHICSSYSTEMHELPER_AVAILABLE
+ QSymbianGraphicsSystemHelper::setNativePaintMode(wid, helperNativePaintMode(mode));
+#endif
#ifdef USE_PRIVATE_QTGUI_APIS
QWidget *window = static_cast<QSymbianControl *>(wid)->widget()->window();
setNativePaintMode(window, mode);
-#else
+#endif
+#ifdef QTGUI_SUPPORT_UNAVAILABLE
Q_UNUSED(wid)
Q_UNUSED(mode)
+ warnQtGuiSupportUnavailable();
#endif
}
void setReceiveNativePaintEvents(QWidget *widget, bool enabled)
{
+#ifdef QSYMBIANGRAPHICSSYSTEMHELPER_AVAILABLE
+ QSymbianGraphicsSystemHelper::setReceiveNativePaintEvents(widget, enabled);
+#endif
#ifdef USE_PRIVATE_QTGUI_APIS
QWidgetPrivate *widgetPrivate = qt_widget_private(widget);
widgetPrivate->createExtra();
widgetPrivate->extraData()->receiveNativePaintEvents = enabled;
-#else
+#endif
+#ifdef QTGUI_SUPPORT_UNAVAILABLE
Q_UNUSED(widget)
Q_UNUSED(enabled)
+ warnQtGuiSupportUnavailable();
#endif
}
diff --git a/plugins/multimedia/symbian/videooutput/s60videooutpututils.h b/plugins/multimedia/symbian/videooutput/s60videooutpututils.h
index 0eeb714017..8a0cec71e3 100644
--- a/plugins/multimedia/symbian/videooutput/s60videooutpututils.h
+++ b/plugins/multimedia/symbian/videooutput/s60videooutpututils.h
@@ -52,6 +52,8 @@ QT_FORWARD_DECLARE_CLASS(QWidget)
namespace S60VideoOutputUtils
{
+void setIgnoreFocusChanged(QWidget *widget);
+
enum NativePaintMode
{
Default,
@@ -60,7 +62,6 @@ enum NativePaintMode
Disable
};
-void setIgnoreFocusChanged(QWidget *widget);
void setNativePaintMode(QWidget *widget, NativePaintMode mode);
void setNativePaintMode(WId wid, NativePaintMode mode);
void setReceiveNativePaintEvents(QWidget *widget, bool enabled);
diff --git a/plugins/multimedia/symbian/videooutput/s60videowidget.cpp b/plugins/multimedia/symbian/videooutput/s60videowidget.cpp
index 3804204e2c..a824a4594b 100644
--- a/plugins/multimedia/symbian/videooutput/s60videowidget.cpp
+++ b/plugins/multimedia/symbian/videooutput/s60videowidget.cpp
@@ -56,11 +56,11 @@ using namespace S60VideoOutputUtils;
const int NullOrdinalPosition = -1;
S60VideoWidget::S60VideoWidget(QWidget *parent)
-: QWidget(parent)
-, m_pixmap(NULL)
-, m_paintingEnabled(false)
-, m_topWinId(0)
-, m_ordinalPosition(NullOrdinalPosition)
+ : QWidget(parent)
+ , m_pixmap(0)
+ , m_paintingEnabled(false)
+ , m_topWinId(0)
+ , m_ordinalPosition(NullOrdinalPosition)
{
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
setPalette(QPalette(Qt::black));
diff --git a/plugins/multimedia/symbian/videooutput/s60videowidgetcontrol.cpp b/plugins/multimedia/symbian/videooutput/s60videowidgetcontrol.cpp
index 37c35b773a..d5d045f667 100644
--- a/plugins/multimedia/symbian/videooutput/s60videowidgetcontrol.cpp
+++ b/plugins/multimedia/symbian/videooutput/s60videowidgetcontrol.cpp
@@ -43,8 +43,8 @@
#include "s60videowidgetdisplay.h"
S60VideoWidgetControl::S60VideoWidgetControl(QObject *parent)
-: QVideoWidgetControl(parent)
-, m_display(new S60VideoWidgetDisplay(this))
+ : QVideoWidgetControl(parent)
+ , m_display(new S60VideoWidgetDisplay(this))
{
connect(m_display, SIGNAL(nativeSizeChanged(QSize)),
this, SIGNAL(nativeSizeChanged()));
diff --git a/plugins/multimedia/symbian/videooutput/s60videowidgetdisplay.cpp b/plugins/multimedia/symbian/videooutput/s60videowidgetdisplay.cpp
index 0208d546b7..dacdde9498 100644
--- a/plugins/multimedia/symbian/videooutput/s60videowidgetdisplay.cpp
+++ b/plugins/multimedia/symbian/videooutput/s60videowidgetdisplay.cpp
@@ -47,8 +47,8 @@
#include <w32std.h>
S60VideoWidgetDisplay::S60VideoWidgetDisplay(QObject *parent)
-: S60VideoDisplay(parent)
-, m_widget(new S60VideoWidget)
+ : S60VideoDisplay(parent)
+ , m_widget(new S60VideoWidget)
{
connect(this, SIGNAL(paintingEnabledChanged(bool)), m_widget, SLOT(setPaintingEnabled(bool)));
connect(this, SIGNAL(fullScreenChanged(bool)), m_widget, SLOT(setFullScreen(bool)));
diff --git a/plugins/multimedia/symbian/videooutput/s60videowindowcontrol.cpp b/plugins/multimedia/symbian/videooutput/s60videowindowcontrol.cpp
index 0cc6e8ac4b..afd4366e41 100644
--- a/plugins/multimedia/symbian/videooutput/s60videowindowcontrol.cpp
+++ b/plugins/multimedia/symbian/videooutput/s60videowindowcontrol.cpp
@@ -43,8 +43,8 @@
#include "s60videowindowdisplay.h"
S60VideoWindowControl::S60VideoWindowControl(QObject *parent)
-: QVideoWindowControl(parent)
-, m_display(new S60VideoWindowDisplay(this))
+ : QVideoWindowControl(parent)
+ , m_display(new S60VideoWindowDisplay(this))
{
connect(m_display, SIGNAL(nativeSizeChanged(QSize)),
this, SIGNAL(nativeSizeChanged()));
diff --git a/plugins/multimedia/symbian/videooutput/s60videowindowdisplay.cpp b/plugins/multimedia/symbian/videooutput/s60videowindowdisplay.cpp
index ccdc8c1d34..c6feddce5f 100644
--- a/plugins/multimedia/symbian/videooutput/s60videowindowdisplay.cpp
+++ b/plugins/multimedia/symbian/videooutput/s60videowindowdisplay.cpp
@@ -48,9 +48,9 @@
using namespace S60VideoOutputUtils;
S60VideoWindowDisplay::S60VideoWindowDisplay(QObject *parent)
-: S60VideoDisplay(parent)
-, m_winId(0)
-, m_bitmap(0)
+ : S60VideoDisplay(parent)
+ , m_winId(0)
+ , m_bitmap(0)
{
parent->setProperty("colorKey", Qt::transparent);
}
diff --git a/plugins/multimedia/symbian/videooutput/videooutput.pri b/plugins/multimedia/symbian/videooutput/videooutput.pri
index 13aa7a0fc7..17792935e5 100644
--- a/plugins/multimedia/symbian/videooutput/videooutput.pri
+++ b/plugins/multimedia/symbian/videooutput/videooutput.pri
@@ -1,37 +1,74 @@
INCLUDEPATH += $$PWD
-message("VideoOutput: using common implementation")
+include(../trace/trace.pri)
+
+HEADERS += $$PWD/s60videodisplay.h \
+ $$PWD/s60videooutpututils.h \
+ $$PWD/s60videooutputfactory.h \
+ $$PWD/s60videowidget.h \
+ $$PWD/s60videowidgetcontrol.h \
+ $$PWD/s60videowidgetdisplay.h \
+ $$PWD/s60videowindowcontrol.h \
+ $$PWD/s60videowindowdisplay.h
+
+SOURCES += $$PWD/s60videodisplay.cpp \
+ $$PWD/s60videooutpututils.cpp \
+ $$PWD/s60videooutputfactory.cpp \
+ $$PWD/s60videowidget.cpp \
+ $$PWD/s60videowidgetcontrol.cpp \
+ $$PWD/s60videowidgetdisplay.cpp \
+ $$PWD/s60videowindowcontrol.cpp \
+ $$PWD/s60videowindowdisplay.cpp
+
+LIBS *= -lcone
+LIBS *= -lws32
+
+# Uncomment this to enable frame rate measurement
+#videooutput_measure_framerate = yes
contains(surfaces_s60_enabled, yes) {
message("VideoOutput: graphics surface rendering supported")
DEFINES += VIDEOOUTPUT_GRAPHICS_SURFACES
+ HEADERS += $$PWD/s60eglendpoint.h \
+ $$PWD/s60eglextensions.h \
+ $$PWD/s60nativewindow.h \
+ $$PWD/s60videobuffer.h \
+ $$PWD/s60videoeglrenderercontrol.h
+ SOURCES += $$PWD/s60eglendpoint.cpp \
+ $$PWD/s60eglextensions.cpp \
+ $$PWD/s60nativewindow.cpp \
+ $$PWD/s60videobuffer.cpp \
+ $$PWD/s60videoeglrenderercontrol.cpp
+ DEFINES += VIDEOOUTPUT_EGL_RENDERER
+ LIBS += -llibegl
+ contains(QT_CONFIG, opengl) | contains(QT_CONFIG, opengles2) {
+ QT += opengl
+ } else {
+ DEFINES += QT_NO_OPENGL
+ }
+ contains(QT_CONFIG, openvg) {
+ LIBS += -llibopenvg
+ } else {
+ DEFINES += QT_NO_OPENVG
+ }
+ contains(videooutput_measure_framerate, yes) {
+ HEADERS += $$PWD/s60videoframerate.h
+ SOURCES += $$PWD/s60videoframerate.cpp
+ DEFINES += VIDEOOUTPUT_MEASURE_FRAMERATE
+ }
} else {
message("VideoOutput: no graphics surface rendering support - DSA only")
}
-exists($$[QT_INSTALL_HEADERS]/QtGui/private/qwidget_p.h) {
- DEFINES += PRIVATE_QTGUI_HEADERS_AVAILABLE
- message("VideoOutput: private QtGui headers are available")
+exists($$[QT_INSTALL_HEADERS]/QtGui/qgraphicssystemhelper_symbian.h) {
+ message("VideoOutput: QSymbianGraphicsSystemHelper is available")
+ DEFINES += QSYMBIANGRAPHICSSYSTEMHELPER_AVAILABLE
} else {
- message("VideoOutput: private QtGui headers not available - video and viewfinder may not be rendered correctly")
+ exists($$[QT_INSTALL_HEADERS]/QtGui/private/qwidget_p.h) {
+ DEFINES += PRIVATE_QTGUI_HEADERS_AVAILABLE
+ message("VideoOutput: private QtGui headers are available")
+ } else {
+ message("VideoOutput: neither QSymbianGraphicsSystemHelper nor private QtGui headers not available - video and viewfinder may not be rendered correctly")
+ }
}
-HEADERS += $$PWD/s60videodisplay.h \
- $$PWD/s60videooutpututils.h \
- $$PWD/s60videowidget.h \
- $$PWD/s60videowidgetcontrol.h \
- $$PWD/s60videowidgetdisplay.h \
- $$PWD/s60videowindowcontrol.h \
- $$PWD/s60videowindowdisplay.h
-
-SOURCES += $$PWD/s60videodisplay.cpp \
- $$PWD/s60videooutpututils.cpp \
- $$PWD/s60videowidget.cpp \
- $$PWD/s60videowidgetcontrol.cpp \
- $$PWD/s60videowidgetdisplay.cpp \
- $$PWD/s60videowindowcontrol.cpp \
- $$PWD/s60videowindowdisplay.cpp
-
-LIBS *= -lcone
-LIBS *= -lws32
-
diff --git a/plugins/organizer/symbian/symbian.pro b/plugins/organizer/symbian/symbian.pro
index eceee11de2..4edae26e9f 100644
--- a/plugins/organizer/symbian/symbian.pro
+++ b/plugins/organizer/symbian/symbian.pro
@@ -1,6 +1,8 @@
+include(../../../features/utils.pri)
+
TEMPLATE = lib
CONFIG += plugin
-TARGET = $$qtLibraryTarget(qtorganizer_symbian)
+TARGET = $$mobilityPluginTarget(qtorganizer_symbian)
PLUGIN_TYPE=organizer
# support for S^4-specific types
@@ -24,7 +26,7 @@ symbian: {
TARGET.CAPABILITY = ALL -TCB
TARGET.EPOCALLOWDLLDATA = 1
- TARGET.UID3 = 0x2002BFC9
+ TARGET.UID3 = $$mobilityUID(0x2002BFC9)
INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE
diff --git a/plugins/sensors/generic/generic.pro b/plugins/sensors/generic/generic.pro
index d4745e6858..5ebac60bcb 100644
--- a/plugins/sensors/generic/generic.pro
+++ b/plugins/sensors/generic/generic.pro
@@ -1,17 +1,19 @@
+include(../../../features/utils.pri)
+
INCLUDEPATH+=../../../src/sensors
PLUGIN_TYPE = sensors
TEMPLATE = lib
CONFIG += plugin
-TARGET = $$qtLibraryTarget(qtsensors_generic)
+TARGET = $$mobilityPluginTarget(qtsensors_generic)
include(generic.pri)
include(../../../common.pri)
symbian {
TARGET.EPOCALLOWDLLDATA = 1
- TARGET.UID3 = 0x2002BFC3
+ TARGET.UID3 = $$mobilityUID(0x2002BFC3)
TARGET.CAPABILITY = ALL -TCB
pluginDep.sources = $${TARGET}.dll
diff --git a/plugins/sensors/s60_sensor_api/s60_sensor_api.pro b/plugins/sensors/s60_sensor_api/s60_sensor_api.pro
index 06b94377c7..d7788fd161 100644
--- a/plugins/sensors/s60_sensor_api/s60_sensor_api.pro
+++ b/plugins/sensors/s60_sensor_api/s60_sensor_api.pro
@@ -10,7 +10,7 @@ include(s60_sensor_api.pri)
TARGET = $$qtLibraryTarget(qtsensors_sym)
TARGET.EPOCALLOWDLLDATA = 1
-TARGET.UID3 = 0x2002BFC1
+TARGET.UID3 = $$mobilityUID(0x2002BFC1)
TARGET.CAPABILITY = ALL -TCB
QT=core
diff --git a/plugins/sensors/symbian/symbian.pro b/plugins/sensors/symbian/symbian.pro
index b4a8da6322..2300dfb45d 100644
--- a/plugins/sensors/symbian/symbian.pro
+++ b/plugins/sensors/symbian/symbian.pro
@@ -1,10 +1,12 @@
+include(../../../features/utils.pri)
+
INCLUDEPATH+=$$(EPOCROOT)epoc32/include/osextensions
PLUGIN_TYPE = sensors
TEMPLATE = lib
CONFIG += plugin
-TARGET = $$qtLibraryTarget(qtsensors_sym)
+TARGET = $$mobilityPluginTarget(qtsensors_sym)
include(../../../common.pri)
@@ -44,7 +46,7 @@ MOBILITY+=sensors
symbian {
TARGET.EPOCALLOWDLLDATA = 1
- TARGET.UID3 = 0x2002BFC8
+ TARGET.UID3 = $$mobilityUID(0x2002BFC8)
TARGET.CAPABILITY = ALL -TCB
LIBS += -lsensrvclient
LIBS += -lsensrvutil
diff --git a/plugins/versit/backuphandler/backuphandler.pro b/plugins/versit/backuphandler/backuphandler.pro
index 7e7e067444..270016cd76 100644
--- a/plugins/versit/backuphandler/backuphandler.pro
+++ b/plugins/versit/backuphandler/backuphandler.pro
@@ -1,6 +1,8 @@
+include(../../../features/utils.pri)
+
TEMPLATE = lib
CONFIG += plugin
-TARGET = $$qtLibraryTarget(qtversit_backuphandler)
+TARGET = $$mobilityPluginTarget(qtversit_backuphandler)
PLUGIN_TYPE=versit
include(../../../common.pri)
@@ -20,7 +22,7 @@ MOBILITY = versit contacts
symbian {
TARGET.EPOCALLOWDLLDATA = 1
TARGET.CAPABILITY = ALL -Tcb
- TARGET.UID3 = 0x20031600
+ TARGET.UID3 = $$mobilityUID(0x20031600)
target.path = /sys/bin
INSTALLS += target
diff --git a/plugins/versit/symbian/versitplugins/cntversitfavoriteplugin/cntversitfavoriteplugin.pro b/plugins/versit/symbian/versitplugins/cntversitfavoriteplugin/cntversitfavoriteplugin.pro
index 665e9be52e..c65390900c 100644
--- a/plugins/versit/symbian/versitplugins/cntversitfavoriteplugin/cntversitfavoriteplugin.pro
+++ b/plugins/versit/symbian/versitplugins/cntversitfavoriteplugin/cntversitfavoriteplugin.pro
@@ -1,6 +1,8 @@
+include(../../../../../features/utils.pri)
+
TEMPLATE = lib
CONFIG += plugin
-TARGET = $$qtLibraryTarget(cntversitfavoriteplugin)
+TARGET = $$mobilityPluginTarget(cntversitfavoriteplugin)
PLUGIN_TYPE = versit
include(../../../../../common.pri)
@@ -25,7 +27,7 @@ MOBILITY = versit contacts
symbian {
TARGET.EPOCALLOWDLLDATA = 1
- TARGET.UID3 = 0x20034590
+ TARGET.UID3 = $$mobilityUID(0x20034590)
TARGET.CAPABILITY = ALL -TCB
pluginDep.sources = $${TARGET}.dll
diff --git a/plugins/versit/symbian/versitplugins/cntversitlandlineplugin/cntversitlandlineplugin.pro b/plugins/versit/symbian/versitplugins/cntversitlandlineplugin/cntversitlandlineplugin.pro
index 29bfa69153..573515b7dd 100644
--- a/plugins/versit/symbian/versitplugins/cntversitlandlineplugin/cntversitlandlineplugin.pro
+++ b/plugins/versit/symbian/versitplugins/cntversitlandlineplugin/cntversitlandlineplugin.pro
@@ -1,6 +1,8 @@
+include(../../../../../features/utils.pri)
+
TEMPLATE = lib
CONFIG += plugin
-TARGET = $$qtLibraryTarget(cntversitlandlineplugin)
+TARGET = $$mobilityPluginTarget(cntversitlandlineplugin)
PLUGIN_TYPE = versit
include(../../../../../common.pri)
@@ -27,7 +29,7 @@ MOBILITY = versit \
symbian {
TARGET.EPOCALLOWDLLDATA = 1
- TARGET.UID3 = 0x2003458F
+ TARGET.UID3 = $$mobilityUID(0x2003458F)
TARGET.CAPABILITY = ALL -TCB
pluginDep.sources = $${TARGET}.dll
diff --git a/plugins/versit/symbian/versitplugins/cntversitmycardplugin/cntversitmycardplugin.pro b/plugins/versit/symbian/versitplugins/cntversitmycardplugin/cntversitmycardplugin.pro
index c616446997..50152ab7bd 100644
--- a/plugins/versit/symbian/versitplugins/cntversitmycardplugin/cntversitmycardplugin.pro
+++ b/plugins/versit/symbian/versitplugins/cntversitmycardplugin/cntversitmycardplugin.pro
@@ -1,6 +1,8 @@
+include(../../../../../features/utils.pri)
+
TEMPLATE = lib
CONFIG += plugin
-TARGET = $$qtLibraryTarget(cntversitmycardplugin)
+TARGET = $$mobilityPluginTarget(cntversitmycardplugin)
PLUGIN_TYPE = versit
include(../../../../../common.pri)
@@ -28,7 +30,7 @@ MOBILITY = versit \
symbian {
TARGET.EPOCALLOWDLLDATA = 1
- TARGET.UID3 = 0x20034591
+ TARGET.UID3 = $$mobilityUID(0x20034591)
TARGET.CAPABILITY = ALL -TCB
pluginDep.sources = $${TARGET}.dll
diff --git a/plugins/versit/symbian/versitplugins/cntversitprefplugin/cntversitprefplugin.pro b/plugins/versit/symbian/versitplugins/cntversitprefplugin/cntversitprefplugin.pro
index e9f006c123..8f377c53fd 100644
--- a/plugins/versit/symbian/versitplugins/cntversitprefplugin/cntversitprefplugin.pro
+++ b/plugins/versit/symbian/versitplugins/cntversitprefplugin/cntversitprefplugin.pro
@@ -1,6 +1,8 @@
+include(../../../../../features/utils.pri)
+
TEMPLATE = lib
CONFIG += plugin
-TARGET = $$qtLibraryTarget(cntversitprefplugin)
+TARGET = $$mobilityPluginTarget(cntversitprefplugin)
PLUGIN_TYPE = versit
include(../../../../../common.pri)
@@ -26,7 +28,7 @@ MOBILITY = versit contacts
symbian {
TARGET.EPOCALLOWDLLDATA = 1
- TARGET.UID3 = 0x2003458E
+ TARGET.UID3 = $$mobilityUID(0x2003458E)
TARGET.CAPABILITY = ALL -TCB
pluginDep.sources = $${TARGET}.dll
diff --git a/plugins/versit/vcardpreserver/vcardpreserver.pro b/plugins/versit/vcardpreserver/vcardpreserver.pro
index 41e7efea68..023d4aa52e 100644
--- a/plugins/versit/vcardpreserver/vcardpreserver.pro
+++ b/plugins/versit/vcardpreserver/vcardpreserver.pro
@@ -1,6 +1,8 @@
+include(../../../features/utils.pri)
+
TEMPLATE = lib
CONFIG += plugin
-TARGET = $$qtLibraryTarget(qtversit_vcardpreserver)
+TARGET = $$mobilityPluginTarget(qtversit_vcardpreserver)
PLUGIN_TYPE=versit
include(../../../common.pri)
@@ -20,7 +22,7 @@ MOBILITY = versit contacts
symbian {
TARGET.EPOCALLOWDLLDATA = 1
TARGET.CAPABILITY = ALL -Tcb
- TARGET.UID3 = 0x20031602
+ TARGET.UID3 = $$mobilityUID(0x20031602)
target.path = /sys/bin
INSTALLS += target