diff -r 2b40d63a9c3d -r 90517678cc4f qtmobility/src/multimedia/qmediaserviceprovider.cpp --- 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 #include -#include -#include -#include -#include -#include +#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(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(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(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(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(pluginProvider()); +#else return pluginProvider(); +#endif } /*!