Merge remote-tracking branch 'origin/stable' into dev
Change-Id: I48a140d1bbe82ab65e54683d77aea8c97c06ec80
This commit is contained in:
38
dist/changes-5.1.0
vendored
Normal file
38
dist/changes-5.1.0
vendored
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
Qt 5.1 introduces many new features and improvements as well as bugfixes
|
||||||
|
over the 5.0.x series. For more details, refer to the online documentation
|
||||||
|
included in this distribution. The documentation is also available online:
|
||||||
|
|
||||||
|
http://qt-project.org/doc/qt-5.1
|
||||||
|
|
||||||
|
The Qt version 5.1 series is binary compatible with the 5.0.x series.
|
||||||
|
Applications compiled for 5.0 will continue to run with 5.1.
|
||||||
|
|
||||||
|
Some of the changes listed in this file include issue tracking numbers
|
||||||
|
corresponding to tasks in the Qt Bug Tracker:
|
||||||
|
|
||||||
|
http://bugreports.qt-project.org/
|
||||||
|
|
||||||
|
Each of these identifiers can be entered in the bug tracker to obtain more
|
||||||
|
information about a particular change.
|
||||||
|
|
||||||
|
****************************************************************************
|
||||||
|
* General *
|
||||||
|
****************************************************************************
|
||||||
|
|
||||||
|
- Fixed signal not being emitted in QDeclarativeCameraFocus.
|
||||||
|
- Decouple qmediametadata.h from qmultimedia.h
|
||||||
|
- Reset VideoSurface pointer when deleted
|
||||||
|
- Fix crash on idle status change with 64 bit architectures.
|
||||||
|
- Add support for m3u8 playlist formats
|
||||||
|
- Fix calculation bug in QWaveDecoder.
|
||||||
|
|
||||||
|
- [QTBUG-28047] Make directshow-plugin available.
|
||||||
|
- [QTBUG-28589] Add error handling in image capturing in camera
|
||||||
|
- [QTBUG-30411] AVFoundation: Emit error when media fails to load
|
||||||
|
|
||||||
|
Qt for Android
|
||||||
|
--------------
|
||||||
|
|
||||||
|
- Add libQt5MultimediaQuick_p to the list of dependencies.
|
||||||
|
- Fixed crash when resetting the video surface.
|
||||||
|
- Add MediaPlayer support for Android
|
||||||
@@ -132,10 +132,10 @@ int main(int argc, char *argv[])
|
|||||||
QUrl videoPath;
|
QUrl videoPath;
|
||||||
const QStringList moviesLocation = QStandardPaths::standardLocations(QStandardPaths::MoviesLocation);
|
const QStringList moviesLocation = QStandardPaths::standardLocations(QStandardPaths::MoviesLocation);
|
||||||
if (moviesLocation.isEmpty()) {
|
if (moviesLocation.isEmpty()) {
|
||||||
QUrl appPath(QString("file:///%1").arg(app.applicationDirPath()));
|
QUrl appPath(QString("file://%1").arg(app.applicationDirPath()));
|
||||||
videoPath = appPath.resolved(QUrl("./"));
|
videoPath = appPath.resolved(QUrl("./"));
|
||||||
} else
|
} else
|
||||||
videoPath = QString("file:///%1").arg(moviesLocation.first());
|
videoPath = QString("file://%1").arg(moviesLocation.first());
|
||||||
viewer.rootContext()->setContextProperty("videoPath", videoPath);
|
viewer.rootContext()->setContextProperty("videoPath", videoPath);
|
||||||
|
|
||||||
QMetaObject::invokeMethod(rootObject, "init");
|
QMetaObject::invokeMethod(rootObject, "init");
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ Rectangle {
|
|||||||
Rectangle {
|
Rectangle {
|
||||||
id: wrapper
|
id: wrapper
|
||||||
function launch() {
|
function launch() {
|
||||||
var path = "file:///" + filePath;
|
var path = "file://" + filePath;
|
||||||
if (folders.isFolder(index))
|
if (folders.isFolder(index))
|
||||||
down(path);
|
down(path);
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
TEMPLATE = app
|
TEMPLATE = app
|
||||||
TARGET = qmlvideo
|
TARGET = qmlvideo
|
||||||
|
|
||||||
QT += quick
|
QT += quick multimedia
|
||||||
|
|
||||||
LOCAL_SOURCES = main.cpp
|
LOCAL_SOURCES = main.cpp
|
||||||
LOCAL_HEADERS = trace.h
|
LOCAL_HEADERS = trace.h
|
||||||
|
|||||||
@@ -116,13 +116,13 @@ int main(int argc, char *argv[])
|
|||||||
FileReader fileReader;
|
FileReader fileReader;
|
||||||
viewer.rootContext()->setContextProperty("fileReader", &fileReader);
|
viewer.rootContext()->setContextProperty("fileReader", &fileReader);
|
||||||
|
|
||||||
QUrl appPath(QString("file:///%1").arg(app.applicationDirPath()));
|
QUrl appPath(QString("file://%1").arg(app.applicationDirPath()));
|
||||||
QUrl imagePath;
|
QUrl imagePath;
|
||||||
const QStringList picturesLocation = QStandardPaths::standardLocations(QStandardPaths::PicturesLocation);
|
const QStringList picturesLocation = QStandardPaths::standardLocations(QStandardPaths::PicturesLocation);
|
||||||
if (picturesLocation.isEmpty())
|
if (picturesLocation.isEmpty())
|
||||||
imagePath = appPath.resolved(QUrl("images"));
|
imagePath = appPath.resolved(QUrl("images"));
|
||||||
else
|
else
|
||||||
imagePath = QString("file:///%1").arg(picturesLocation.first());
|
imagePath = QString("file://%1").arg(picturesLocation.first());
|
||||||
viewer.rootContext()->setContextProperty("imagePath", imagePath);
|
viewer.rootContext()->setContextProperty("imagePath", imagePath);
|
||||||
|
|
||||||
QUrl videoPath;
|
QUrl videoPath;
|
||||||
@@ -130,7 +130,7 @@ int main(int argc, char *argv[])
|
|||||||
if (moviesLocation.isEmpty())
|
if (moviesLocation.isEmpty())
|
||||||
videoPath = appPath.resolved(QUrl("./"));
|
videoPath = appPath.resolved(QUrl("./"));
|
||||||
else
|
else
|
||||||
videoPath = QString("file:///%1").arg(moviesLocation.first());
|
videoPath = QString("file://%1").arg(moviesLocation.first());
|
||||||
viewer.rootContext()->setContextProperty("videoPath", videoPath);
|
viewer.rootContext()->setContextProperty("videoPath", videoPath);
|
||||||
|
|
||||||
viewer.setTitle("qmlvideofx");
|
viewer.setTitle("qmlvideofx");
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ Rectangle {
|
|||||||
Rectangle {
|
Rectangle {
|
||||||
id: wrapper
|
id: wrapper
|
||||||
function launch() {
|
function launch() {
|
||||||
var path = "file:///" + filePath
|
var path = "file://" + filePath
|
||||||
if (folders.isFolder(index))
|
if (folders.isFolder(index))
|
||||||
down(path);
|
down(path);
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
TEMPLATE = app
|
TEMPLATE = app
|
||||||
TARGET = qmlvideofx
|
TARGET = qmlvideofx
|
||||||
|
|
||||||
QT += quick
|
QT += quick multimedia
|
||||||
|
|
||||||
SOURCES += filereader.cpp main.cpp
|
SOURCES += filereader.cpp main.cpp
|
||||||
HEADERS += filereader.h trace.h
|
HEADERS += filereader.h trace.h
|
||||||
|
|||||||
@@ -469,20 +469,22 @@ QList<QByteArray> QAudioDeviceInfoInternal::availableDevices(QAudio::Mode mode)
|
|||||||
|
|
||||||
QByteArray QAudioDeviceInfoInternal::defaultOutputDevice()
|
QByteArray QAudioDeviceInfoInternal::defaultOutputDevice()
|
||||||
{
|
{
|
||||||
QList<QByteArray> list = availableDevices(QAudio::AudioOutput);
|
QByteArray defaultDevice;
|
||||||
if (list.size() > 0)
|
QDataStream ds(&defaultDevice, QIODevice::WriteOnly);
|
||||||
return list.at(0);
|
ds << quint32(WAVE_MAPPER) // device ID for default device
|
||||||
else
|
<< QStringLiteral("Default Output Device");
|
||||||
return QByteArray();
|
|
||||||
|
return defaultDevice;
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray QAudioDeviceInfoInternal::defaultInputDevice()
|
QByteArray QAudioDeviceInfoInternal::defaultInputDevice()
|
||||||
{
|
{
|
||||||
QList<QByteArray> list = availableDevices(QAudio::AudioInput);
|
QByteArray defaultDevice;
|
||||||
if (list.size() > 0)
|
QDataStream ds(&defaultDevice, QIODevice::WriteOnly);
|
||||||
return list.at(0);
|
ds << quint32(WAVE_MAPPER) // device ID for default device
|
||||||
else
|
<< QStringLiteral("Default Input Device");
|
||||||
return QByteArray();
|
|
||||||
|
return defaultDevice;
|
||||||
}
|
}
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|||||||
@@ -127,7 +127,12 @@ void QMediaPluginLoader::loadMetadata()
|
|||||||
qDebug() << "QMediaPluginLoader: Inserted index " << i << " into metadata: " << jsonobj;
|
qDebug() << "QMediaPluginLoader: Inserted index " << i << " into metadata: " << jsonobj;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
QJsonArray arr = jsonobj.value(QStringLiteral("Keys")).toArray();
|
QJsonArray arr = jsonobj.value(QStringLiteral("Services")).toArray();
|
||||||
|
// Preserve compatibility with older plugins (made before 5.1) in which
|
||||||
|
// services were declared in the 'Keys' property
|
||||||
|
if (arr.isEmpty())
|
||||||
|
arr = jsonobj.value(QStringLiteral("Keys")).toArray();
|
||||||
|
|
||||||
foreach (QJsonValue value, arr) {
|
foreach (QJsonValue value, arr) {
|
||||||
QString key = value.toString();
|
QString key = value.toString();
|
||||||
|
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ public class QtAndroidMediaPlayer extends MediaPlayer
|
|||||||
try {
|
try {
|
||||||
mApplicationContext = activity.getApplicationContext();
|
mApplicationContext = activity.getApplicationContext();
|
||||||
} catch(final Exception e) {
|
} catch(final Exception e) {
|
||||||
Log.d(TAG, e.getMessage());
|
Log.d(TAG, "" + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,7 +101,7 @@ public class QtAndroidMediaPlayer extends MediaPlayer
|
|||||||
currentPosition = getCurrentPosition();
|
currentPosition = getCurrentPosition();
|
||||||
}
|
}
|
||||||
} catch (final InterruptedException e) {
|
} catch (final InterruptedException e) {
|
||||||
Log.d(TAG, e.getMessage());
|
Log.d(TAG, "" + e.getMessage());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -262,7 +262,7 @@ public class QtAndroidMediaPlayer extends MediaPlayer
|
|||||||
progressThread.start();
|
progressThread.start();
|
||||||
} catch (final IllegalStateException e) {
|
} catch (final IllegalStateException e) {
|
||||||
reset();
|
reset();
|
||||||
Log.d(TAG, e.getMessage());
|
Log.d(TAG, "" + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -276,7 +276,7 @@ public class QtAndroidMediaPlayer extends MediaPlayer
|
|||||||
super.pause();
|
super.pause();
|
||||||
} catch (final IllegalStateException e) {
|
} catch (final IllegalStateException e) {
|
||||||
reset();
|
reset();
|
||||||
Log.d(TAG, e.getMessage());
|
Log.d(TAG, "" + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -289,7 +289,7 @@ public class QtAndroidMediaPlayer extends MediaPlayer
|
|||||||
try {
|
try {
|
||||||
super.stop();
|
super.stop();
|
||||||
} catch (final IllegalStateException e) {
|
} catch (final IllegalStateException e) {
|
||||||
Log.d(TAG, e.getMessage());
|
Log.d(TAG, "" + e.getMessage());
|
||||||
} finally {
|
} finally {
|
||||||
reset();
|
reset();
|
||||||
}
|
}
|
||||||
@@ -305,7 +305,7 @@ public class QtAndroidMediaPlayer extends MediaPlayer
|
|||||||
super.seekTo(msec);
|
super.seekTo(msec);
|
||||||
onMediaPlayerInfoNative(MEDIA_PLAYER_PROGRESS, msec, mID);
|
onMediaPlayerInfoNative(MEDIA_PLAYER_PROGRESS, msec, mID);
|
||||||
} catch (final IllegalStateException e) {
|
} catch (final IllegalStateException e) {
|
||||||
Log.d(TAG, e.getMessage());
|
Log.d(TAG, "" + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -320,7 +320,7 @@ public class QtAndroidMediaPlayer extends MediaPlayer
|
|||||||
try {
|
try {
|
||||||
playing = super.isPlaying();
|
playing = super.isPlaying();
|
||||||
} catch (final IllegalStateException e) {
|
} catch (final IllegalStateException e) {
|
||||||
Log.d(TAG, e.getMessage());
|
Log.d(TAG, "" + e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
return playing;
|
return playing;
|
||||||
@@ -345,13 +345,13 @@ public class QtAndroidMediaPlayer extends MediaPlayer
|
|||||||
/* MEDIA_ERROR_UNSUPPORTED= */ -1010,
|
/* MEDIA_ERROR_UNSUPPORTED= */ -1010,
|
||||||
mID);
|
mID);
|
||||||
} catch (final IllegalArgumentException e) {
|
} catch (final IllegalArgumentException e) {
|
||||||
Log.d(TAG, e.getMessage());
|
Log.d(TAG, "" + e.getMessage());
|
||||||
} catch (final SecurityException e) {
|
} catch (final SecurityException e) {
|
||||||
Log.d(TAG, e.getMessage());
|
Log.d(TAG, "" + e.getMessage());
|
||||||
} catch (final IllegalStateException e) {
|
} catch (final IllegalStateException e) {
|
||||||
Log.d(TAG, e.getMessage());
|
Log.d(TAG, "" + e.getMessage());
|
||||||
} catch (final NullPointerException e) {
|
} catch (final NullPointerException e) {
|
||||||
Log.d(TAG, e.getMessage());
|
Log.d(TAG, "" + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -366,7 +366,7 @@ public class QtAndroidMediaPlayer extends MediaPlayer
|
|||||||
try {
|
try {
|
||||||
currentPosition = super.getCurrentPosition();
|
currentPosition = super.getCurrentPosition();
|
||||||
} catch (final IllegalStateException e) {
|
} catch (final IllegalStateException e) {
|
||||||
Log.d(TAG, e.getMessage());
|
Log.d(TAG, "" + e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
return currentPosition;
|
return currentPosition;
|
||||||
@@ -383,7 +383,7 @@ public class QtAndroidMediaPlayer extends MediaPlayer
|
|||||||
try {
|
try {
|
||||||
duration = super.getDuration();
|
duration = super.getDuration();
|
||||||
} catch (final IllegalStateException e) {
|
} catch (final IllegalStateException e) {
|
||||||
Log.d(TAG, e.getMessage());
|
Log.d(TAG, "" + e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
return duration;
|
return duration;
|
||||||
@@ -415,7 +415,7 @@ public class QtAndroidMediaPlayer extends MediaPlayer
|
|||||||
if (!mMuted)
|
if (!mMuted)
|
||||||
mVolume = volume;
|
mVolume = volume;
|
||||||
} catch (final IllegalStateException e) {
|
} catch (final IllegalStateException e) {
|
||||||
Log.d(TAG, e.getMessage());
|
Log.d(TAG, "" + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Keys": ["org.qt-project.qt.mediaplayer"]
|
"Keys": ["androidmultimedia"],
|
||||||
|
"Services": ["org.qt-project.qt.mediaplayer"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Keys": ["org.qt-project.qt.audiosource"]
|
"Keys": ["audiocapture"],
|
||||||
|
"Services": ["org.qt-project.qt.audiosource"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Keys": ["org.qt-project.qt.camera"]
|
"Keys": ["avfoundationcamera"],
|
||||||
|
"Services": ["org.qt-project.qt.camera"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Keys": ["org.qt-project.qt.mediaplayer"]
|
"Keys": ["avfoundationmediaplayer"],
|
||||||
|
"Services": ["org.qt-project.qt.mediaplayer"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Keys": ["org.qt-project.qt.camera", "org.qt-project.qt.mediaplayer"]
|
"Keys": ["blackberrymultimedia"],
|
||||||
|
"Services": ["org.qt-project.qt.camera", "org.qt-project.qt.mediaplayer"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Keys": ["org.qt-project.qt.camera", "org.qt-project.qt.mediaplayer"]
|
"Keys": ["directshow"],
|
||||||
|
"Services": ["org.qt-project.qt.camera", "org.qt-project.qt.mediaplayer"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Keys": ["org.qt-project.qt.camera"]
|
"Keys": ["directshow"],
|
||||||
|
"Services": ["org.qt-project.qt.camera"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Keys": ["org.qt-project.qt.audiodecode"]
|
"Keys": ["gstreameraudiodecode"],
|
||||||
|
"Services": ["org.qt-project.qt.audiodecode"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Keys": ["org.qt-project.qt.camera"]
|
"Keys": ["gstreamercamerabin"],
|
||||||
|
"Services": ["org.qt-project.qt.camera"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Keys": ["org.qt-project.qt.mediaplayer", "org.qt-project.qt.audiosource", "org.qt-project.qt.camera", "org.qt-project.qt.audiodecode"]
|
"Keys": ["gstreamer"],
|
||||||
|
"Services": ["org.qt-project.qt.mediaplayer", "org.qt-project.qt.audiosource", "org.qt-project.qt.camera", "org.qt-project.qt.audiodecode"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Keys": ["org.qt-project.qt.audiosource"]
|
"Keys": ["gstreamermediacapture"],
|
||||||
|
"Services": ["org.qt-project.qt.audiosource"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Keys": ["org.qt-project.qt.audiosource", "org.qt-project.qt.camera"]
|
"Keys": ["gstreamermediacapture"]
|
||||||
|
"Services": ["org.qt-project.qt.audiosource", "org.qt-project.qt.camera"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Keys": ["org.qt-project.qt.mediaplayer"]
|
"Keys": ["gstreamermediaplayer"],
|
||||||
|
"Services": ["org.qt-project.qt.mediaplayer"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Keys": ["org.qt-project.qt.mediaplayer"]
|
"Keys": ["qt7"],
|
||||||
|
"Services": ["org.qt-project.qt.mediaplayer"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Keys": ["org.qt-project.qt.radio"]
|
"Keys": ["v4l"],
|
||||||
|
"Services": ["org.qt-project.qt.radio"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Keys": ["org.qt-project.qt.mediaplayer", "org.qt-project.qt.audiodecode"]
|
"Keys": ["windowsmediafoundation"],
|
||||||
|
"Services": ["org.qt-project.qt.mediaplayer", "org.qt-project.qt.audiodecode"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Keys": ["org.qt-project.qt.mediaplayer"]
|
"Keys": ["mockserviceplugin1"],
|
||||||
|
"Services": ["org.qt-project.qt.mediaplayer"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Keys": ["org.qt-project.qt.mediaplayer", "org.qt-project.qt.radio"]
|
"Keys": ["mockserviceplugin2"],
|
||||||
|
"Services": ["org.qt-project.qt.mediaplayer", "org.qt-project.qt.radio"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Keys": ["org.qt-project.qt.mediaplayer", "org.qt-project.qt.audiosource"]
|
"Keys": ["mockserviceplugin3"],
|
||||||
|
"Services": ["org.qt-project.qt.mediaplayer", "org.qt-project.qt.audiosource"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Keys": ["org.qt-project.qt.mediaplayer"]
|
"Keys": ["mockserviceplugin4"],
|
||||||
|
"Services": ["org.qt-project.qt.mediaplayer"]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user