--- a/qtmobility/src/multimedia/qmediaserviceprovider.cpp Fri Apr 16 15:51:22 2010 +0300
+++ b/qtmobility/src/multimedia/qmediaserviceprovider.cpp Mon May 03 13:18:40 2010 +0300
@@ -42,11 +42,11 @@
#include <QtCore/qdebug.h>
#include <QtCore/qmap.h>
-#include <qmediaservice.h>
-#include <qmediaserviceprovider.h>
-#include <qmediaserviceproviderplugin.h>
-#include <qmediapluginloader_p.h>
-#include <qmediaplayer.h>
+#include "qmediaservice.h"
+#include "qmediaserviceprovider.h"
+#include "qmediaserviceproviderplugin.h"
+#include "qmediapluginloader_p.h"
+#include "qmediaplayer.h"
QTM_BEGIN_NAMESPACE
@@ -101,6 +101,9 @@
\value RecordingSupport
The service provides audio or video recording functions.
+
+ \value StreamPlayback
+ The service is capable of playing QIODevice based streams.
*/
/*!
@@ -346,7 +349,7 @@
estimate = currentEstimate;
plugin = currentPlugin;
- if (currentEstimate == QtMedia::PreferedService)
+ if (currentEstimate == QtMedia::PreferredService)
break;
}
}
@@ -394,14 +397,25 @@
QMediaServiceSupportedFormatsInterface *iface =
qobject_cast<QMediaServiceSupportedFormatsInterface*>(obj);
- //if low latency playback was asked, skip services known
- //not to provide low latency playback
- if (flags & QMediaPlayer::LowLatency) {
+
+ if (flags) {
QMediaServiceFeaturesInterface *iface =
qobject_cast<QMediaServiceFeaturesInterface*>(obj);
- if (iface && !(iface->supportedFeatures(serviceType) & QMediaServiceProviderHint::LowLatencyPlayback))
- continue;
+ if (iface) {
+ QMediaServiceProviderHint::Features features = iface->supportedFeatures(serviceType);
+
+ //if low latency playback was asked, skip services known
+ //not to provide low latency playback
+ if ((flags & QMediaPlayer::LowLatency) &&
+ !(features & QMediaServiceProviderHint::LowLatencyPlayback))
+ continue;
+
+ //the same for QIODevice based streams support
+ if ((flags & QMediaPlayer::StreamPlayback) &&
+ !(features & QMediaServiceProviderHint::StreamPlayback))
+ continue;
+ }
}
if (iface)
@@ -410,7 +424,7 @@
allServicesProvideInterface = false;
}
- //don't return PreferedService
+ //don't return PreferredService
supportEstimate = qMin(supportEstimate, QtMedia::ProbablySupported);
//Return NotSupported only if no services are available of serviceType
@@ -431,14 +445,25 @@
QMediaServiceSupportedFormatsInterface *iface =
qobject_cast<QMediaServiceSupportedFormatsInterface*>(obj);
- // If low latency playback was asked for, skip MIME types from services known
- // not to provide low latency playback
+
if (flags & QMediaPlayer::LowLatency) {
QMediaServiceFeaturesInterface *iface =
qobject_cast<QMediaServiceFeaturesInterface*>(obj);
- if (iface && !(iface->supportedFeatures(serviceType) & QMediaServiceProviderHint::LowLatencyPlayback))
- continue;
+ if (iface) {
+ QMediaServiceProviderHint::Features features = iface->supportedFeatures(serviceType);
+
+ // If low latency playback was asked for, skip MIME types from services known
+ // not to provide low latency playback
+ if ((flags & QMediaPlayer::LowLatency) &&
+ !(features & QMediaServiceProviderHint::LowLatencyPlayback))
+ continue;
+
+ //the same for QIODevice based streams support
+ if ((flags & QMediaPlayer::StreamPlayback) &&
+ !(features & QMediaServiceProviderHint::StreamPlayback))
+ continue;
+ }
}
if (iface) {
@@ -563,12 +588,35 @@
return QString();
}
+
+#ifdef QT_BUILD_INTERNAL
+
+static QMediaServiceProvider *qt_defaultMediaServiceProvider = 0;
+
+/*!
+ Sets a media service \a provider as the default.
+
+ \internal
+*/
+void QMediaServiceProvider::setDefaultServiceProvider(QMediaServiceProvider *provider)
+{
+ qt_defaultMediaServiceProvider = provider;
+}
+
+#endif
+
/*!
Returns a default provider of media services.
*/
QMediaServiceProvider *QMediaServiceProvider::defaultServiceProvider()
{
+#ifdef QT_BUILD_INTERNAL
+ return qt_defaultMediaServiceProvider != 0
+ ? qt_defaultMediaServiceProvider
+ : static_cast<QMediaServiceProvider *>(pluginProvider());
+#else
return pluginProvider();
+#endif
}
/*!