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

@@ -0,0 +1,4 @@
CONFIG += java
API_VERSION = android-11
JAVASOURCES += main.java

View File

@@ -0,0 +1,6 @@
import android.graphics.SurfaceTexture;
class BuildTest
{
public static void main(String [] args) { }
}

View File

@@ -43,13 +43,6 @@
#include <d3d9.h>
#include <vmr9.h>
#pragma include_alias("dxtrans.h","qedit.h")
#define __IDxtCompositor_INTERFACE_DEFINED__
#define __IDxtAlphaSetter_INTERFACE_DEFINED__
#define __IDxtJpeg_INTERFACE_DEFINED__
#define __IDxtKey_INTERFACE_DEFINED__
#include <qedit.h>
int main(int, char**)
{
return 0;

View File

@@ -26,7 +26,7 @@
****************************************************************************/
/*!
\example multimedia/audiodevices
\example audiodevices
\title Audio Devices Example
\ingroup multimedia_examples
\brief The Audio Devices example shows the application of the audio devices APIs

View File

@@ -26,7 +26,7 @@
****************************************************************************/
/*!
\example multimedia/audioengine
\example audioengine
\title AudioEngine Example
\ingroup multimedia_examples
\brief The Audio Engine example demonstrates 3D sound control using

View File

@@ -26,7 +26,7 @@
****************************************************************************/
/*!
\example multimedia/audioinput
\example audioinput
\title Audio Input Example
\ingroup multimedia_examples
\brief The Audio Input Example shows the use of the QAudioInput class.

View File

@@ -26,7 +26,7 @@
****************************************************************************/
/*!
\example multimedia/audiooutput
\example audiooutput
\title Audio Output Example
\ingroup multimedia_examples
\brief The Audio Output Example show the use of the QAudioOutput API.

View File

@@ -26,7 +26,7 @@
****************************************************************************/
/*!
\example multimedia/audiorecorder
\example audiorecorder
\title Audio Recorder Example
\ingroup multimedia_examples
\brief The Audio Recorder Example shows how to create a simple audio recorder.

View File

@@ -26,7 +26,7 @@
****************************************************************************/
/*!
\example multimedia/declarative-radio
\example declarative-radio
\title Declarative Radio Example
\brief Demonstrates the radio functionality
\ingroup multimedia_examples

View File

@@ -26,7 +26,7 @@
****************************************************************************/
/*!
\example multimedia/spectrum
\example spectrum
\title Spectrum Example
\ingroup multimedia_examples
\brief The Spectrum Example uses a combination multimedia APIs to process microphone input.

View File

@@ -26,7 +26,7 @@
****************************************************************************/
/*!
\example multimedia/video/qmlvideo
\example video/qmlvideo
\title QML Video Example
\ingroup multimedia_examples

View File

@@ -26,7 +26,7 @@
****************************************************************************/
/*!
\example multimedia/video/qmlvideofx
\example video/qmlvideofx
\title QML Video Shader Effects Example
\ingroup multimedia_examples

View File

@@ -67,7 +67,9 @@ int main(int argc, char *argv[])
QString source1, source2;
qreal volume = 0.5;
QStringList args = app.arguments();
#ifdef PERFORMANCEMONITOR_SUPPORT
PerformanceMonitor::State performanceMonitorState;
#endif
bool sourceIsUrl = false;
for (int i = 1; i < args.size(); ++i) {
const QByteArray arg = args.at(i).toUtf8();

View File

@@ -46,6 +46,7 @@
#include <QMediaService>
#include <QMediaRecorder>
#include <QCameraViewfinder>
#include <QMediaMetaData>
#include <QMessageBox>
#include <QPalette>

View File

@@ -29,7 +29,7 @@
/*!
\example multimediawidgets/camera
\example camera
\title Camera Example
\ingroup multimedia_examples
\brief The Camera Example shows how to use the API to capture a still image

View File

@@ -26,7 +26,7 @@
****************************************************************************/
/*!
\example multimediawidgets/declarative-camera
\example declarative-camera
\title QML Camera Example
\ingroup multimedia_examples
\brief The Camera Example shows how to use the API to capture a still image

View File

@@ -26,7 +26,7 @@
****************************************************************************/
/*!
\example multimediawidgets/player
\example player
\title Media Player Example
\ingroup multimedia_examples
\brief Demonstrates the audio and video playback functionality

View File

@@ -47,9 +47,9 @@
#include <QMediaService>
#include <QMediaPlaylist>
#include <QVideoProbe>
#include <QMediaMetaData>
#include <QtWidgets>
Player::Player(QWidget *parent)
: QWidget(parent)
, videoWidget(0)

View File

@@ -26,7 +26,7 @@
****************************************************************************/
/*!
\example multimediawidgets/videographicsitem
\example videographicsitem
\title Video Graphics Item Example
\ingroup multimedia_examples
\brief This example demonstrates how to stream video on a graphics scene.

View File

@@ -26,7 +26,7 @@
****************************************************************************/
/*!
\example multimediawidgets/videowidget
\example videowidget
\title Video Widget Example
\ingroup multimedia_examples
\brief This example is a simple video player

View File

@@ -8,6 +8,8 @@ win32 {
qtCompileTest(evr)
} else:mac {
qtCompileTest(avfoundation)
} else:android {
!qtCompileTest(android):error("QtMultimedia for Android requires API level 11")
} else {
qtCompileTest(alsa)
qtCompileTest(pulseaudio)

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>

View File

@@ -4798,40 +4798,15 @@ QScreenOrientationChangeEvent (0x7f96f31b8958) 0
QEvent (0x7f96f31b90c0) 0
primary-for QScreenOrientationChangeEvent (0x7f96f31b8958)
Class QAccessible::QPrivateSignal
size=1 align=1
base size=0 base align=1
QAccessible::QPrivateSignal (0x7f96f31b9180) 0 empty
Class QAccessible::State
size=8 align=8
base size=5 base align=8
QAccessible::State (0x7f96f31b91e0) 0
Vtable for QAccessible
QAccessible::_ZTV11QAccessible: 14u entries
0 (int (*)(...))0
8 (int (*)(...))(& _ZTI11QAccessible)
16 (int (*)(...))QAccessible::metaObject
24 (int (*)(...))QAccessible::qt_metacast
32 (int (*)(...))QAccessible::qt_metacall
40 (int (*)(...))QAccessible::~QAccessible
48 (int (*)(...))QAccessible::~QAccessible
56 (int (*)(...))QObject::event
64 (int (*)(...))QObject::eventFilter
72 (int (*)(...))QObject::timerEvent
80 (int (*)(...))QObject::childEvent
88 (int (*)(...))QObject::customEvent
96 (int (*)(...))QObject::connectNotify
104 (int (*)(...))QObject::disconnectNotify
Class QAccessible
size=16 align=8
base size=16 base align=8
QAccessible (0x7f96f31b8af8) 0
vptr=((& QAccessible::_ZTV11QAccessible) + 16u)
QObject (0x7f96f31b9120) 0
primary-for QAccessible (0x7f96f31b8af8)
size=1 align=1
base size=0 base align=1
QAccessible (0x7f96f31b8af8) 0 empty
Vtable for QAccessibleInterface
QAccessibleInterface::_ZTV20QAccessibleInterface: 23u entries

View File

@@ -4798,40 +4798,15 @@ QScreenOrientationChangeEvent (0xb377712c) 0
QEvent (0xb35aa770) 0
primary-for QScreenOrientationChangeEvent (0xb377712c)
Class QAccessible::QPrivateSignal
size=1 align=1
base size=0 base align=1
QAccessible::QPrivateSignal (0xb35aa930) 0 empty
Class QAccessible::State
size=8 align=4
base size=5 base align=4
QAccessible::State (0xb35aa968) 0
Vtable for QAccessible
QAccessible::_ZTV11QAccessible: 14u entries
0 (int (*)(...))0
4 (int (*)(...))(& _ZTI11QAccessible)
8 (int (*)(...))QAccessible::metaObject
12 (int (*)(...))QAccessible::qt_metacast
16 (int (*)(...))QAccessible::qt_metacall
20 (int (*)(...))QAccessible::~QAccessible
24 (int (*)(...))QAccessible::~QAccessible
28 (int (*)(...))QObject::event
32 (int (*)(...))QObject::eventFilter
36 (int (*)(...))QObject::timerEvent
40 (int (*)(...))QObject::childEvent
44 (int (*)(...))QObject::customEvent
48 (int (*)(...))QObject::connectNotify
52 (int (*)(...))QObject::disconnectNotify
Class QAccessible
size=8 align=4
base size=8 base align=4
QAccessible (0xb3777168) 0
vptr=((& QAccessible::_ZTV11QAccessible) + 8u)
QObject (0xb35aa850) 0
primary-for QAccessible (0xb3777168)
size=1 align=1
base size=0 base align=1
QAccessible (0xb3777168) 0 empty
Vtable for QAccessibleInterface
QAccessibleInterface::_ZTV20QAccessibleInterface: 23u entries

View File

@@ -3986,40 +3986,15 @@ QScreenOrientationChangeEvent (0x7f51f085d2d8) 0
QEvent (0x7f51f08540c0) 0
primary-for QScreenOrientationChangeEvent (0x7f51f085d2d8)
Class QAccessible::QPrivateSignal
size=1 align=1
base size=0 base align=1
QAccessible::QPrivateSignal (0x7f51f0854180) 0 empty
Class QAccessible::State
size=8 align=8
base size=5 base align=8
QAccessible::State (0x7f51f08541e0) 0
Vtable for QAccessible
QAccessible::_ZTV11QAccessible: 14u entries
0 (int (*)(...))0
8 (int (*)(...))(& _ZTI11QAccessible)
16 (int (*)(...))QAccessible::metaObject
24 (int (*)(...))QAccessible::qt_metacast
32 (int (*)(...))QAccessible::qt_metacall
40 (int (*)(...))QAccessible::~QAccessible
48 (int (*)(...))QAccessible::~QAccessible
56 (int (*)(...))QObject::event
64 (int (*)(...))QObject::eventFilter
72 (int (*)(...))QObject::timerEvent
80 (int (*)(...))QObject::childEvent
88 (int (*)(...))QObject::customEvent
96 (int (*)(...))QObject::connectNotify
104 (int (*)(...))QObject::disconnectNotify
Class QAccessible
size=16 align=8
base size=16 base align=8
QAccessible (0x7f51f085d478) 0
vptr=((& QAccessible::_ZTV11QAccessible) + 16u)
QObject (0x7f51f0854120) 0
primary-for QAccessible (0x7f51f085d478)
size=1 align=1
base size=0 base align=1
QAccessible (0x7f51f085d478) 0 empty
Vtable for QAccessibleInterface
QAccessibleInterface::_ZTV20QAccessibleInterface: 23u entries

View File

@@ -3986,40 +3986,15 @@ QScreenOrientationChangeEvent (0xb39638e8) 0
QEvent (0xb3a2ff50) 0
primary-for QScreenOrientationChangeEvent (0xb39638e8)
Class QAccessible::QPrivateSignal
size=1 align=1
base size=0 base align=1
QAccessible::QPrivateSignal (0xb3a48070) 0 empty
Class QAccessible::State
size=8 align=4
base size=5 base align=4
QAccessible::State (0xb3a480a8) 0
Vtable for QAccessible
QAccessible::_ZTV11QAccessible: 14u entries
0 (int (*)(...))0
4 (int (*)(...))(& _ZTI11QAccessible)
8 (int (*)(...))QAccessible::metaObject
12 (int (*)(...))QAccessible::qt_metacast
16 (int (*)(...))QAccessible::qt_metacall
20 (int (*)(...))QAccessible::~QAccessible
24 (int (*)(...))QAccessible::~QAccessible
28 (int (*)(...))QObject::event
32 (int (*)(...))QObject::eventFilter
36 (int (*)(...))QObject::timerEvent
40 (int (*)(...))QObject::childEvent
44 (int (*)(...))QObject::customEvent
48 (int (*)(...))QObject::connectNotify
52 (int (*)(...))QObject::disconnectNotify
Class QAccessible
size=8 align=4
base size=8 base align=4
QAccessible (0xb3963924) 0
vptr=((& QAccessible::_ZTV11QAccessible) + 8u)
QObject (0xb3a2fb60) 0
primary-for QAccessible (0xb3963924)
size=1 align=1
base size=0 base align=1
QAccessible (0xb3963924) 0 empty
Vtable for QAccessibleInterface
QAccessibleInterface::_ZTV20QAccessibleInterface: 23u entries

View File

@@ -12,3 +12,4 @@ SUBDIRS += \
qsoundeffect \
qsound
!qtHaveModule(widgets): SUBDIRS -= qcamerabackend

View File

@@ -1,6 +1,7 @@
TARGET = tst_qcamerabackend
QT += multimedia-private testlib
# DirectShow plugin requires widgets.
QT += multimedia-private widgets testlib
# This is more of a system test
CONFIG += testcase

View File

@@ -46,6 +46,7 @@
#include "qdeclarativeaudio_p.h"
#include "qdeclarativemediametadata_p.h"
#include <QtMultimedia/qmediametadata.h>
#include <qmediaplayercontrol.h>
#include <qmediaservice.h>
#include <private/qmediaserviceprovider_p.h>

View File

@@ -45,6 +45,7 @@
#include <QtCore/qtimer.h>
#include <QtMultimedia/qmediametadata.h>
#include <qmediaobject.h>
#include <qmediaservice.h>
#include <qmetadatareadercontrol.h>

View File

@@ -43,6 +43,7 @@
#include <QtTest/QtTest>
#include <QDebug>
#include <QtMultimedia/qmediametadata.h>
#include <qmediaobject.h>
#include <qmediacontrol.h>
#include <qmediaservice.h>

View File

@@ -41,6 +41,7 @@
#include <QtCore/QString>
#include <QtTest/QtTest>
#include <QtCore/QCoreApplication>
#include <QtMultimedia/qmediametadata.h>
#include "mockmetadatareadercontrol.h"

View File

@@ -41,6 +41,7 @@
#include <QtCore/QString>
#include <QtTest/QtTest>
#include <QtCore/QCoreApplication>
#include <QtMultimedia/qmediametadata.h>
#include "qmetadatawritercontrol.h"
#include "mockmetadatawritercontrol.h"

View File

@@ -44,6 +44,7 @@
#include <QDateTime>
#include <QTimer>
#include <QtMultimedia/qmediametadata.h>
#include "qcameraimagecapturecontrol.h"
#include "qcameracontrol.h"