Merge remote-tracking branch 'origin/stable' into dev

Change-Id: I24ffb71c4cc2e262394797deb8a22b2cf9a80c3c
This commit is contained in:
Frederik Gladhorn
2013-05-23 13:15:45 +02:00
70 changed files with 277 additions and 246 deletions

View File

@@ -2,6 +2,8 @@ import QtQuick.tooling 1.1
// This file describes the plugin-supplied types contained in the library.
// It is used for QML tooling purposes only.
//
// This file was auto-generated with the command 'qmlplugindump -notrelocatable QtAudioEngine 1.0'.
Module {
Component {
@@ -12,27 +14,30 @@ Module {
Component {
name: "QDeclarativeAttenuationModelInverse"
prototype: "QDeclarativeAttenuationModel"
exports: ["AttenuationModelInverse 1.0"]
Property { name: "start"; type: "qreal" }
Property { name: "end"; type: "qreal" }
Property { name: "rolloff"; type: "qreal" }
exports: ["QtAudioEngine/AttenuationModelInverse 1.0"]
exportMetaObjectRevisions: [0]
Property { name: "start"; type: "double" }
Property { name: "end"; type: "double" }
Property { name: "rolloff"; type: "double" }
}
Component {
name: "QDeclarativeAttenuationModelLinear"
prototype: "QDeclarativeAttenuationModel"
exports: ["AttenuationModelLinear 1.0"]
Property { name: "start"; type: "qreal" }
Property { name: "end"; type: "qreal" }
exports: ["QtAudioEngine/AttenuationModelLinear 1.0"]
exportMetaObjectRevisions: [0]
Property { name: "start"; type: "double" }
Property { name: "end"; type: "double" }
}
Component {
name: "QDeclarativeAudioCategory"
prototype: "QObject"
exports: ["AudioCategory 1.0"]
Property { name: "volume"; type: "qreal" }
exports: ["QtAudioEngine/AudioCategory 1.0"]
exportMetaObjectRevisions: [0]
Property { name: "volume"; type: "double" }
Property { name: "name"; type: "string" }
Signal {
name: "volumeChanged"
Parameter { name: "newVolume"; type: "qreal" }
Parameter { name: "newVolume"; type: "double" }
}
Signal { name: "stopped" }
Signal { name: "paused" }
@@ -45,7 +50,8 @@ Module {
name: "QDeclarativeAudioEngine"
defaultProperty: "bank"
prototype: "QObject"
exports: ["AudioEngine 1.0"]
exports: ["QtAudioEngine/AudioEngine 1.0"]
exportMetaObjectRevisions: [0]
Property { name: "bank"; type: "QObject"; isList: true; isReadonly: true }
Property { name: "categories"; type: "QObject"; isReadonly: true; isPointer: true }
Property { name: "samples"; type: "QObject"; isReadonly: true; isPointer: true }
@@ -58,8 +64,8 @@ Module {
isReadonly: true
isPointer: true
}
Property { name: "dopplerFactor"; type: "qreal" }
Property { name: "speedOfSound"; type: "qreal" }
Property { name: "dopplerFactor"; type: "double" }
Property { name: "speedOfSound"; type: "double" }
Signal { name: "ready" }
Signal { name: "liveInstanceCountChanged" }
Signal { name: "isLoadingChanged" }
@@ -68,18 +74,20 @@ Module {
Component {
name: "QDeclarativeAudioListener"
prototype: "QObject"
exports: ["AudioListener 1.0"]
exports: ["QtAudioEngine/AudioListener 1.0"]
exportMetaObjectRevisions: [0]
Property { name: "engine"; type: "QDeclarativeAudioEngine"; isPointer: true }
Property { name: "position"; type: "QVector3D" }
Property { name: "direction"; type: "QVector3D" }
Property { name: "velocity"; type: "QVector3D" }
Property { name: "up"; type: "QVector3D" }
Property { name: "gain"; type: "qreal" }
Property { name: "gain"; type: "double" }
}
Component {
name: "QDeclarativeAudioSample"
prototype: "QObject"
exports: ["AudioSample 1.0"]
exports: ["QtAudioEngine/AudioSample 1.0"]
exportMetaObjectRevisions: [0]
Property { name: "name"; type: "string" }
Property { name: "source"; type: "QUrl" }
Property { name: "preloaded"; type: "bool" }
@@ -90,19 +98,21 @@ Module {
Component {
name: "QDeclarativePlayVariation"
prototype: "QObject"
exports: ["PlayVariation 1.0"]
exports: ["QtAudioEngine/PlayVariation 1.0"]
exportMetaObjectRevisions: [0]
Property { name: "sample"; type: "string" }
Property { name: "looping"; type: "bool" }
Property { name: "maxGain"; type: "qreal" }
Property { name: "minGain"; type: "qreal" }
Property { name: "maxPitch"; type: "qreal" }
Property { name: "minPitch"; type: "qreal" }
Property { name: "maxGain"; type: "double" }
Property { name: "minGain"; type: "double" }
Property { name: "maxPitch"; type: "double" }
Property { name: "minPitch"; type: "double" }
}
Component {
name: "QDeclarativeSound"
defaultProperty: "playVariationlist"
prototype: "QObject"
exports: ["Sound 1.0"]
exports: ["QtAudioEngine/Sound 1.0"]
exportMetaObjectRevisions: [0]
Enum {
name: "PlayType"
values: {
@@ -124,12 +134,12 @@ Module {
Method { name: "play" }
Method {
name: "play"
Parameter { name: "gain"; type: "qreal" }
Parameter { name: "gain"; type: "double" }
}
Method {
name: "play"
Parameter { name: "gain"; type: "qreal" }
Parameter { name: "pitch"; type: "qreal" }
Parameter { name: "gain"; type: "double" }
Parameter { name: "pitch"; type: "double" }
}
Method {
name: "play"
@@ -149,60 +159,60 @@ Module {
Method {
name: "play"
Parameter { name: "position"; type: "QVector3D" }
Parameter { name: "gain"; type: "qreal" }
Parameter { name: "gain"; type: "double" }
}
Method {
name: "play"
Parameter { name: "position"; type: "QVector3D" }
Parameter { name: "velocity"; type: "QVector3D" }
Parameter { name: "gain"; type: "qreal" }
Parameter { name: "gain"; type: "double" }
}
Method {
name: "play"
Parameter { name: "position"; type: "QVector3D" }
Parameter { name: "velocity"; type: "QVector3D" }
Parameter { name: "direction"; type: "QVector3D" }
Parameter { name: "gain"; type: "qreal" }
Parameter { name: "gain"; type: "double" }
}
Method {
name: "play"
Parameter { name: "position"; type: "QVector3D" }
Parameter { name: "gain"; type: "qreal" }
Parameter { name: "pitch"; type: "qreal" }
Parameter { name: "gain"; type: "double" }
Parameter { name: "pitch"; type: "double" }
}
Method {
name: "play"
Parameter { name: "position"; type: "QVector3D" }
Parameter { name: "velocity"; type: "QVector3D" }
Parameter { name: "gain"; type: "qreal" }
Parameter { name: "pitch"; type: "qreal" }
Parameter { name: "gain"; type: "double" }
Parameter { name: "pitch"; type: "double" }
}
Method {
name: "play"
Parameter { name: "position"; type: "QVector3D" }
Parameter { name: "velocity"; type: "QVector3D" }
Parameter { name: "direction"; type: "QVector3D" }
Parameter { name: "gain"; type: "qreal" }
Parameter { name: "pitch"; type: "qreal" }
Parameter { name: "gain"; type: "double" }
Parameter { name: "pitch"; type: "double" }
}
Method { name: "newInstance"; type: "QDeclarativeSoundInstance*" }
}
Component {
name: "QDeclarativeSoundCone"
prototype: "QObject"
exports: [" 1.0"]
Property { name: "innerAngle"; type: "qreal" }
Property { name: "outerAngle"; type: "qreal" }
Property { name: "outerGain"; type: "qreal" }
Property { name: "innerAngle"; type: "double" }
Property { name: "outerAngle"; type: "double" }
Property { name: "outerGain"; type: "double" }
}
Component {
name: "QDeclarativeSoundInstance"
prototype: "QObject"
exports: ["SoundInstance 1.0"]
exports: ["QtAudioEngine/SoundInstance 1.0"]
exportMetaObjectRevisions: [0]
Enum {
name: "State"
values: {
"StopppedState": 0,
"StoppedState": 0,
"PlayingState": 1,
"PausedState": 2
}
@@ -213,14 +223,14 @@ Module {
Property { name: "position"; type: "QVector3D" }
Property { name: "direction"; type: "QVector3D" }
Property { name: "velocity"; type: "QVector3D" }
Property { name: "gain"; type: "qreal" }
Property { name: "pitch"; type: "qreal" }
Property { name: "gain"; type: "double" }
Property { name: "pitch"; type: "double" }
Method { name: "play" }
Method { name: "stop" }
Method { name: "pause" }
Method {
name: "updatePosition"
Parameter { name: "deltaTime"; type: "qreal" }
Parameter { name: "deltaTime"; type: "double" }
}
}
Component {

View File

@@ -186,14 +186,14 @@ Item {
This property holds the error state of the video. It can be one of:
\list
\li NoError - there is no current error.
\li ResourceError - the video cannot be played due to a problem
\li MediaPlayer.NoError - there is no current error.
\li MediaPlayer.ResourceError - the video cannot be played due to a problem
allocating resources.
\li FormatError - the video format is not supported.
\li NetworkError - the video cannot be played due to network issues.
\li AccessDenied - the video cannot be played due to insufficient
\li MediaPlayer.FormatError - the video format is not supported.
\li MediaPlayer.NetworkError - the video cannot be played due to network issues.
\li MediaPlayer.AccessDenied - the video cannot be played due to insufficient
permissions.
\li ServiceMissing - the video cannot be played because the media
\li MediaPlayer.ServiceMissing - the video cannot be played because the media
service could not be
instantiated.
\endlist
@@ -295,15 +295,15 @@ Item {
This property holds the status of media loading. It can be one of:
\list
\li NoMedia - no media has been set.
\li Loading - the media is currently being loaded.
\li Loaded - the media has been loaded.
\li Buffering - the media is buffering data.
\li Stalled - playback has been interrupted while the media is buffering data.
\li Buffered - the media has buffered data.
\li EndOfMedia - the media has played to the end.
\li InvalidMedia - the media cannot be played.
\li UnknownStatus - the status of the media cannot be determined.
\li MediaPlayer.NoMedia - no media has been set.
\li MediaPlayer.Loading - the media is currently being loaded.
\li MediaPlayer.Loaded - the media has been loaded.
\li MediaPlayer.Buffering - the media is buffering data.
\li MediaPlayer.Stalled - playback has been interrupted while the media is buffering data.
\li MediaPlayer.Buffered - the media has buffered data.
\li MediaPlayer.EndOfMedia - the media has played to the end.
\li MediaPlayer.InvalidMedia - the media cannot be played.
\li MediaPlayer.UnknownStatus - the status of the media cannot be determined.
\endlist
*/
property alias status: player.status

View File

@@ -179,7 +179,10 @@ bool QDeclarativeCameraFocus::isFocusModeSupported(QDeclarativeCamera::FocusMode
void QDeclarativeCameraFocus::setFocusMode(QDeclarativeCamera::FocusMode mode)
{
m_focus->setFocusMode(QCameraFocus::FocusModes(int(mode)));
if (mode != focusMode()) {
m_focus->setFocusMode(QCameraFocus::FocusModes(int(mode)));
emit focusModeChanged(focusMode());
}
}
/*!
\property QDeclarativeCameraFocus::focusPointMode

View File

@@ -54,6 +54,7 @@
//
#include <QtQml/qqml.h>
#include <QtMultimedia/qmediametadata.h>
#include "qmediaobject.h"
QT_BEGIN_NAMESPACE

View File

@@ -484,13 +484,18 @@ QRectF QDeclarativeVideoOutput::contentRect() const
This property holds the area of the source video
content that is considered for rendering. The
values are in source pixel coordinates.
values are in source pixel coordinates, adjusted for
the source's pixel aspect ratio.
Note that typically the top left corner of this rectangle
will be \c {0,0} while the width and height will be the
width and height of the input content.
width and height of the input content. Only when the video
source has a viewport set, these values will differ.
The orientation setting does not affect this rectangle.
\sa QVideoSurfaceFormat::pixelAspectRatio()
\sa QVideoSurfaceFormat::viewport()
*/
QRectF QDeclarativeVideoOutput::sourceRect() const
{
@@ -499,7 +504,19 @@ QRectF QDeclarativeVideoOutput::sourceRect() const
if (!qIsDefaultAspect(m_orientation)) {
size.transpose();
}
return QRectF(QPointF(), size); // XXX ignores viewport
// No backend? Just assume no viewport.
if (!m_nativeSize.isValid() || !m_backend) {
return QRectF(QPointF(), size);
}
// Take the viewport into account for the top left position.
// m_nativeSize is already adjusted to the viewport, as it originats
// from QVideoSurfaceFormat::sizeHint(), which includes pixel aspect
// ratio and viewport.
const QRectF viewport = m_backend->adjustedViewport();
Q_ASSERT(viewport.size() == size);
return QRectF(viewport.topLeft(), size);
}
/*!

View File

@@ -74,6 +74,9 @@ public:
virtual QSGNode *updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *data) = 0;
virtual QAbstractVideoSurface *videoSurface() const = 0;
// The viewport, adjusted for the pixel aspect ratio
virtual QRectF adjustedViewport() const = 0;
protected:
QDeclarativeVideoOutput *q;
QPointer<QMediaService> m_service;

View File

@@ -133,30 +133,45 @@ QSize QDeclarativeVideoRendererBackend::nativeSize() const
void QDeclarativeVideoRendererBackend::updateGeometry()
{
const QRectF viewport = videoSurface()->surfaceFormat().viewport();
const QSizeF frameSize = videoSurface()->surfaceFormat().frameSize();
const QRectF normalizedViewport(viewport.x() / frameSize.width(),
viewport.y() / frameSize.height(),
viewport.width() / frameSize.width(),
viewport.height() / frameSize.height());
const QRectF rect(0, 0, q->width(), q->height());
if (nativeSize().isEmpty()) {
m_renderedRect = rect;
m_sourceTextureRect = QRectF(0, 0, 1, 1);
m_sourceTextureRect = normalizedViewport;
} else if (q->fillMode() == QDeclarativeVideoOutput::Stretch) {
m_renderedRect = rect;
m_sourceTextureRect = QRectF(0, 0, 1, 1);
m_sourceTextureRect = normalizedViewport;
} else if (q->fillMode() == QDeclarativeVideoOutput::PreserveAspectFit) {
m_sourceTextureRect = QRectF(0, 0, 1, 1);
m_sourceTextureRect = normalizedViewport;
m_renderedRect = q->contentRect();
} else if (q->fillMode() == QDeclarativeVideoOutput::PreserveAspectCrop) {
m_renderedRect = rect;
const qreal contentHeight = q->contentRect().height();
const qreal contentWidth = q->contentRect().width();
// Calculate the size of the source rectangle without taking the viewport into account
const qreal relativeOffsetLeft = -q->contentRect().left() / contentWidth;
const qreal relativeOffsetTop = -q->contentRect().top() / contentHeight;
const qreal relativeWidth = rect.width() / contentWidth;
const qreal relativeHeight = rect.height() / contentHeight;
// Now take the viewport size into account
const qreal totalOffsetLeft = normalizedViewport.x() + relativeOffsetLeft * normalizedViewport.width();
const qreal totalOffsetTop = normalizedViewport.y() + relativeOffsetTop * normalizedViewport.height();
const qreal totalWidth = normalizedViewport.width() * relativeWidth;
const qreal totalHeight = normalizedViewport.height() * relativeHeight;
if (qIsDefaultAspect(q->orientation())) {
m_sourceTextureRect = QRectF(-q->contentRect().left() / contentWidth,
-q->contentRect().top() / contentHeight,
rect.width() / contentWidth,
rect.height() / contentHeight);
m_sourceTextureRect = QRectF(totalOffsetLeft, totalOffsetTop,
totalWidth, totalHeight);
} else {
m_sourceTextureRect = QRectF(-q->contentRect().top() / contentHeight,
-q->contentRect().left() / contentWidth,
rect.height() / contentHeight,
rect.width() / contentWidth);
m_sourceTextureRect = QRectF(totalOffsetTop, totalOffsetLeft,
totalHeight, totalWidth);
}
}
}
@@ -223,6 +238,22 @@ QAbstractVideoSurface *QDeclarativeVideoRendererBackend::videoSurface() const
return m_surface;
}
QRectF QDeclarativeVideoRendererBackend::adjustedViewport() const
{
const QRectF viewport = m_surface->surfaceFormat().viewport();
const QSize pixelAspectRatio = m_surface->surfaceFormat().pixelAspectRatio();
if (pixelAspectRatio.height() != 0) {
const qreal ratio = pixelAspectRatio.width() / pixelAspectRatio.height();
QRectF result = viewport;
result.setX(result.x() * ratio);
result.setWidth(result.width() * ratio);
return result;
}
return viewport;
}
QOpenGLContext *QDeclarativeVideoRendererBackend::glContext() const
{
return m_glContext;

View File

@@ -71,6 +71,7 @@ public:
void updateGeometry();
QSGNode *updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *data);
QAbstractVideoSurface *videoSurface() const;
QRectF adjustedViewport() const Q_DECL_OVERRIDE;
QOpenGLContext *glContext() const;
friend class QSGVideoItemSurface;

View File

@@ -143,4 +143,11 @@ QAbstractVideoSurface *QDeclarativeVideoWindowBackend::videoSurface() const
return 0;
}
QRectF QDeclarativeVideoWindowBackend::adjustedViewport() const
{
// No viewport supported by QVideoWindowControl, so make the viewport the same size
// as the source
return QRectF(QPointF(0, 0), nativeSize());
}
QT_END_NAMESPACE

View File

@@ -62,6 +62,7 @@ public:
void updateGeometry();
QSGNode *updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *data);
QAbstractVideoSurface *videoSurface() const;
QRectF adjustedViewport() const Q_DECL_OVERRIDE;
private:
QPointer<QVideoWindowControl> m_videoWindowControl;

View File

@@ -32,6 +32,9 @@ qhp.QtMultimedia.subprojects.qmltypes.sortPages = true
exampledirs += ../../../examples/multimedia \
snippets
# Specify example install dir under QT_INSTALL_EXAMPLES
examplesinstallpath = multimedia
headerdirs += ../..
imagedirs += src/images \

View File

@@ -83,52 +83,52 @@ For some quick recipes, look at the overviews above and consult this table:
\li QSoundEffect
\row
\li Playing low latency audio
\li \l{multimedia/audiooutput}{audioinput},
\l{multimedia/spectrum}{spectrum}
\li \l{audioinput},
\l{spectrum}
\li
\li QAudioOutput
\row
\li Playing encoded audio (MP3, AAC etc)
\li \l{multimediawidgets/player}{player}
\li \l{player}
\li \l Audio, \l {MediaPlayer}
\li QMediaPlayer
\row
\li Accessing raw audio input data
\li \l{multimedia/spectrum}{spectrum},
\l {multimedia/audioinput}{audioinput}
\li \l{spectrum},
\l{audioinput}
\li
\li QAudioInput
\row
\li Recording encoded audio data
\li \l {multimedia/audiorecorder}{audiorecorder}
\li \l{audiorecorder}
\li
\li QAudioRecorder
\row
\li Discovering raw audio devices
\li \l {multimedia/audiodevices}{audiodevices}
\li \l{audiodevices}
\li
\li QAudioDeviceInfo
\row
\li Video Playback
\li \l {multimediawidgets/player}{player},
\l {multimedia/video/qmlvideo}{qmlvideo},
\l{multimedia/video/qmlvideofx}{qmlvideofx}
\li \l{player},
\l{video/qmlvideo}{qmlvideo},
\l{video/qmlvideofx}{qmlvideofx}
\li \l MediaPlayer, \l VideoOutput, \l Video
\li QMediaPlayer, QVideoWidget, QGraphicsVideoItem
\row
\li Video Processing
\li \l {multimedia/video/qmlvideofx}{qmlvideofx}
\li \l {video/qmlvideofx}{qmlvideofx}
\li \l {MediaPlayer}, \l VideoOutput
\li QMediaPlayer, QAbstractVideoSurface, QVideoFrame
\row
\li Listening to the radio
\li \l {multimedia/declarative-radio}{declarative-radio}
\li \l {declarative-radio}
\li \l Radio, \l RadioData
\li QRadioTuner, QRadioData
\row
\li Accessing camera viewfinder
\li \l {Camera Example}{camera},
\l {multimediawidgets/declarative-camera}{declarative-camera}
\l {declarative-camera}
\li \l Camera, \l VideoOutput
\li QCamera, QVideoWidget, QGraphicsVideoItem
\row
@@ -139,13 +139,13 @@ For some quick recipes, look at the overviews above and consult this table:
\row
\li Capturing photos
\li \l {Camera Example}{camera},
\l {multimediawidgets/declarative-camera}{declarative-camera}
\l {declarative-camera}
\li \l Camera
\li QCamera, QCameraImageCapture
\row
\li Capturing movies
\li \l {Camera Example}{camera},
\l {multimediawidgets/declarative-camera}{declarative-camera}
\l {declarative-camera}
\li \l Camera
\li QCamera, QMediaRecorder
\row

View File

@@ -51,10 +51,14 @@ include(radio/radio.pri)
include(recording/recording.pri)
include(video/video.pri)
ANDROID_BUNDLED_JAR_DEPENDENCIES = \
jar/QtMultimedia-bundled.jar:org.qtproject.qt5.android.multimedia.QtAndroidMediaPlayer
ANDROID_JAR_DEPENDENCIES = \
jar/QtMultimedia.jar:org.qtproject.qt5.android.multimedia.QtAndroidMediaPlayer
ANDROID_LIB_DEPENDENCIES = \
plugins/mediaservice/libandroidmediaplayer.so
MODULE_PLUGIN_TYPES = \
mediaservice
mac {
LIBS += -framework AppKit -framework QuartzCore -framework QTKit

View File

@@ -43,7 +43,7 @@
#include <qfileinfo.h>
#include <QtNetwork/QNetworkReply>
#include "qmediaobject_p.h"
#include "qmultimedia.h"
#include "qmediametadata.h"
QT_BEGIN_NAMESPACE

View File

@@ -47,7 +47,6 @@
#include <QtCore/qstring.h>
#include <QtMultimedia/qtmultimediadefs.h>
#include <QtMultimedia/qmediametadata.h>
QT_BEGIN_NAMESPACE

View File

@@ -28,6 +28,9 @@ qhp.QtMultimediaWidgets.subprojects.classes.sortPages = true
exampledirs += ../../../examples/multimediawidgets \
snippets
# Specify example install dir under QT_INSTALL_EXAMPLES
examplesinstallpath = multimediawidgets
headerdirs += ../
imagedirs += \

View File

@@ -0,0 +1,3 @@
TARGET = QtMultimedia-bundled
CONFIG += bundled_jar_file
include(jar.pri)

View File

@@ -0,0 +1,2 @@
TARGET = QtMultimedia
include(jar.pri)

View File

@@ -0,0 +1,14 @@
load(qt_build_paths)
CONFIG += java
DESTDIR = $$MODULE_BASE_OUTDIR/jar
API_VERSION = android-11
JAVACLASSPATH += $$PWD/src
JAVASOURCES += $$PWD/src/org/qtproject/qt5/android/multimedia/QtAndroidMediaPlayer.java \
$$PWD/src/org/qtproject/qt5/android/multimedia/QtSurfaceTexture.java \
$$PWD/src/org/qtproject/qt5/android/multimedia/QtSurfaceTextureHolder.java
# install
target.path = $$[QT_INSTALL_PREFIX]/jar
INSTALLS += target

View File

@@ -1,15 +1,3 @@
load(qt_build_paths)
CONFIG += java
TARGET = QtMultimedia
DESTDIR = $$MODULE_BASE_OUTDIR/jar
API_VERSION = android-11
TEMPLATE=subdirs
SUBDIRS += distributedjar.pro bundledjar.pro
JAVACLASSPATH += $$PWD/src
JAVASOURCES += $$PWD/src/org/qtproject/qt5/android/multimedia/QtAndroidMediaPlayer.java \
$$PWD/src/org/qtproject/qt5/android/multimedia/QtSurfaceTexture.java \
$$PWD/src/org/qtproject/qt5/android/multimedia/QtSurfaceTextureHolder.java
# install
target.path = $$[QT_INSTALL_PREFIX]/jar
INSTALLS += target

View File

@@ -42,6 +42,7 @@
#include "qandroidmetadatareadercontrol.h"
#include "jmediametadataretriever.h"
#include <QtMultimedia/qmediametadata.h>
#include <qsize.h>
#include <QDate>

View File

@@ -182,7 +182,8 @@ void QAndroidVideoRendererControl::setSurface(QAbstractVideoSurface *surface)
m_surface = surface;
m_useImage = !m_surface->supportedPixelFormats(QAbstractVideoBuffer::GLTextureHandle).contains(QVideoFrame::Format_BGR32);
if (m_surface)
m_useImage = !m_surface->supportedPixelFormats(QAbstractVideoBuffer::GLTextureHandle).contains(QVideoFrame::Format_BGR32);
}
jobject QAndroidVideoRendererControl::surfaceHolder()

View File

@@ -42,7 +42,7 @@
#include "avfmediaplayermetadatacontrol.h"
#include "avfmediaplayersession.h"
#include <QtMultimedia/qmultimedia.h>
#include <QtMultimedia/qmediametadata.h>
#import <AVFoundation/AVFoundation.h>

View File

@@ -39,6 +39,7 @@
**
****************************************************************************/
#include "bbmetadatareadercontrol.h"
#include <QtMultimedia/qmediametadata.h>
QT_BEGIN_NAMESPACE

View File

@@ -656,6 +656,10 @@ HRESULT DSCameraSession::getPin(IBaseFilter *pFilter, PIN_DIRECTION PinDir, IPin
bool DSCameraSession::createFilterGraph()
{
// Previously containered in <qedit.h>.
static const IID iID_ISampleGrabber = { 0x6B652FFF, 0x11FE, 0x4fce, { 0x92, 0xAD, 0x02, 0x66, 0xB5, 0xD7, 0xC7, 0x8F } };
static const CLSID cLSID_SampleGrabber = { 0xC1F400A0, 0x3F08, 0x11d3, { 0x9F, 0x0B, 0x00, 0x60, 0x08, 0x03, 0x9E, 0x37 } };
HRESULT hr;
IMoniker* pMoniker = NULL;
ICreateDevEnum* pDevEnum = NULL;
@@ -752,14 +756,14 @@ bool DSCameraSession::createFilterGraph()
}
// Sample grabber filter
hr = CoCreateInstance(CLSID_SampleGrabber, NULL,CLSCTX_INPROC,
hr = CoCreateInstance(cLSID_SampleGrabber, NULL,CLSCTX_INPROC,
IID_IBaseFilter, (void**)&pSG_Filter);
if (FAILED(hr)) {
qWarning() << "failed to create sample grabber";
return false;
}
hr = pSG_Filter->QueryInterface(IID_ISampleGrabber, (void**)&pSG);
hr = pSG_Filter->QueryInterface(iID_ISampleGrabber, (void**)&pSG);
if (FAILED(hr)) {
qWarning() << "failed to get sample grabber";
return false;

View File

@@ -69,7 +69,6 @@
#define __IDxtAlphaSetter_INTERFACE_DEFINED__
#define __IDxtJpeg_INTERFACE_DEFINED__
#define __IDxtKey_INTERFACE_DEFINED__
#include <qedit.h>
struct ICaptureGraphBuilder2;
struct ISampleGrabber;

View File

@@ -24,4 +24,5 @@ win32-g++ {
include(camera/camera.pri)
OTHER_FILES += \
directshow.json
directshow.json \
directshow_camera.json

View File

@@ -0,0 +1,3 @@
{
"Keys": ["org.qt-project.qt.camera"]
}

View File

@@ -54,7 +54,13 @@ class DSServicePlugin
Q_OBJECT
Q_INTERFACES(QMediaServiceSupportedDevicesInterface)
Q_INTERFACES(QMediaServiceFeaturesInterface)
// The player service provided by the WMF-plugin should preferably be used.
// DirectShow should then only provide the camera (see QTBUG-29172, QTBUG-29175).
#ifdef QMEDIA_DIRECTSHOW_PLAYER
Q_PLUGIN_METADATA(IID "org.qt-project.qt.mediaserviceproviderfactory/5.0" FILE "directshow.json")
#else
Q_PLUGIN_METADATA(IID "org.qt-project.qt.mediaserviceproviderfactory/5.0" FILE "directshow_camera.json")
#endif
public:
QMediaService* create(QString const& key);

View File

@@ -44,9 +44,9 @@
#include <qnetwork.h>
#include "directshowmetadatacontrol.h"
#include "directshowplayerservice.h"
#include <QtMultimedia/qmediametadata.h>
#include <QtCore/qcoreapplication.h>
#ifndef QT_NO_WMSDK

View File

@@ -46,6 +46,7 @@
#include <private/qgstvideobuffer_p.h>
#include <private/qvideosurfacegstsink_p.h>
#include <private/qgstutils_p.h>
#include <QtMultimedia/qmediametadata.h>
#include <QtCore/qdebug.h>
#include <QtCore/qbuffer.h>
#include <QtGui/qimagereader.h>

View File

@@ -41,6 +41,8 @@
#include "camerabinmetadata.h"
#include <QtMultimedia/qmediametadata.h>
#include <gst/gst.h>
#include <gst/gstversion.h>

View File

@@ -41,6 +41,8 @@
#include "qgstreamercapturemetadatacontrol.h"
#include <QtMultimedia/qmediametadata.h>
#include <gst/gst.h>
#include <gst/gstversion.h>

View File

@@ -42,6 +42,7 @@
#include "qgstreamermetadataprovider.h"
#include "qgstreamerplayersession.h"
#include <QDebug>
#include <QtMultimedia/qmediametadata.h>
#include <gst/gstversion.h>

View File

@@ -52,6 +52,7 @@
#include <gst/gstvalue.h>
#include <gst/base/gstbasesrc.h>
#include <QtMultimedia/qmediametadata.h>
#include <QtCore/qdatetime.h>
#include <QtCore/qdebug.h>
#include <QtCore/qsize.h>

View File

@@ -43,6 +43,7 @@
#include "qt7playermetadata.h"
#include "qt7playersession.h"
#include <QtCore/qvarlengtharray.h>
#include <QtMultimedia/qmediametadata.h>
#import <QTKit/QTMovie.h>

View File

@@ -39,6 +39,7 @@
**
****************************************************************************/
#include <qmediametadata.h>
#include <qdatetime.h>
#include <qimage.h>