summaryrefslogtreecommitdiffstats
path: root/src/plugins/avfoundation
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/avfoundation')
-rw-r--r--src/plugins/avfoundation/camera/avfaudioencodersettingscontrol.h10
-rw-r--r--src/plugins/avfoundation/camera/avfcameraexposurecontrol.h10
-rw-r--r--src/plugins/avfoundation/camera/avfcameraexposurecontrol.mm25
-rw-r--r--src/plugins/avfoundation/camera/avfcameraflashcontrol.h8
-rw-r--r--src/plugins/avfoundation/camera/avfcamerafocuscontrol.h18
-rw-r--r--src/plugins/avfoundation/camera/avfcameraviewfindersettingscontrol.h12
-rw-r--r--src/plugins/avfoundation/camera/avfcamerazoomcontrol.h14
-rw-r--r--src/plugins/avfoundation/camera/avfimageencodercontrol.h10
-rw-r--r--src/plugins/avfoundation/camera/avfmediacontainercontrol.h8
-rw-r--r--src/plugins/avfoundation/camera/avfmediarecordercontrol_ios.h22
-rw-r--r--src/plugins/avfoundation/camera/avfvideoencodersettingscontrol.h12
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfmediaplayercontrol.mm1
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfmediaplayersession.h4
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm34
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.mm8
15 files changed, 118 insertions, 78 deletions
diff --git a/src/plugins/avfoundation/camera/avfaudioencodersettingscontrol.h b/src/plugins/avfoundation/camera/avfaudioencodersettingscontrol.h
index 3d81d6294..4ba987e53 100644
--- a/src/plugins/avfoundation/camera/avfaudioencodersettingscontrol.h
+++ b/src/plugins/avfoundation/camera/avfaudioencodersettingscontrol.h
@@ -54,11 +54,11 @@ class AVFAudioEncoderSettingsControl : public QAudioEncoderSettingsControl
public:
explicit AVFAudioEncoderSettingsControl(AVFCameraService *service);
- QStringList supportedAudioCodecs() const Q_DECL_OVERRIDE;
- QString codecDescription(const QString &codecName) const Q_DECL_OVERRIDE;
- QList<int> supportedSampleRates(const QAudioEncoderSettings &settings, bool *continuous = 0) const Q_DECL_OVERRIDE;
- QAudioEncoderSettings audioSettings() const Q_DECL_OVERRIDE;
- void setAudioSettings(const QAudioEncoderSettings &settings) Q_DECL_OVERRIDE;
+ QStringList supportedAudioCodecs() const override;
+ QString codecDescription(const QString &codecName) const override;
+ QList<int> supportedSampleRates(const QAudioEncoderSettings &settings, bool *continuous = 0) const override;
+ QAudioEncoderSettings audioSettings() const override;
+ void setAudioSettings(const QAudioEncoderSettings &settings) override;
NSDictionary *applySettings();
void unapplySettings();
diff --git a/src/plugins/avfoundation/camera/avfcameraexposurecontrol.h b/src/plugins/avfoundation/camera/avfcameraexposurecontrol.h
index 30f90208c..0e2846889 100644
--- a/src/plugins/avfoundation/camera/avfcameraexposurecontrol.h
+++ b/src/plugins/avfoundation/camera/avfcameraexposurecontrol.h
@@ -57,13 +57,13 @@ class AVFCameraExposureControl : public QCameraExposureControl
public:
AVFCameraExposureControl(AVFCameraService *service);
- bool isParameterSupported(ExposureParameter parameter) const Q_DECL_OVERRIDE;
+ bool isParameterSupported(ExposureParameter parameter) const override;
QVariantList supportedParameterRange(ExposureParameter parameter,
- bool *continuous) const Q_DECL_OVERRIDE;
+ bool *continuous) const override;
- QVariant requestedValue(ExposureParameter parameter) const Q_DECL_OVERRIDE;
- QVariant actualValue(ExposureParameter parameter) const Q_DECL_OVERRIDE;
- bool setValue(ExposureParameter parameter, const QVariant &value) Q_DECL_OVERRIDE;
+ QVariant requestedValue(ExposureParameter parameter) const override;
+ QVariant actualValue(ExposureParameter parameter) const override;
+ bool setValue(ExposureParameter parameter, const QVariant &value) override;
private Q_SLOTS:
void cameraStateChanged();
diff --git a/src/plugins/avfoundation/camera/avfcameraexposurecontrol.mm b/src/plugins/avfoundation/camera/avfcameraexposurecontrol.mm
index 591854204..7540ab86c 100644
--- a/src/plugins/avfoundation/camera/avfcameraexposurecontrol.mm
+++ b/src/plugins/avfoundation/camera/avfcameraexposurecontrol.mm
@@ -56,10 +56,9 @@ QT_BEGIN_NAMESPACE
namespace {
-// All these methods to work with exposure/ISO/SS in custom mode
-// are quite new (iOS 8 or later and no OS X support).
+// All these methods to work with exposure/ISO/SS in custom mode do not support macOS.
-#if QT_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__IPHONE_8_0)
+#ifdef Q_OS_IOS
// Misc. helpers to check values/ranges:
@@ -213,13 +212,13 @@ void qt_set_duration_iso(QPointer<AVFCameraService> service, QPointer<AVFCameraE
completionHandler:completionHandler];
}
-#endif // QT_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__IPHONE_8_0)
+#endif // defined(Q_OS_IOS)
} // Unnamed namespace.
AVFCameraExposureControl::AVFCameraExposureControl(AVFCameraService *service)
: m_service(service),
- m_session(Q_NULLPTR)
+ m_session(nullptr)
{
Q_ASSERT(service);
m_session = m_service->session();
@@ -230,7 +229,7 @@ AVFCameraExposureControl::AVFCameraExposureControl(AVFCameraService *service)
bool AVFCameraExposureControl::isParameterSupported(ExposureParameter parameter) const
{
-#if QT_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__IPHONE_8_0)
+#ifdef Q_OS_IOS
AVCaptureDevice *captureDevice = m_session->videoCaptureDevice();
if (!captureDevice)
return false;
@@ -250,7 +249,7 @@ QVariantList AVFCameraExposureControl::supportedParameterRange(ExposureParameter
bool *continuous) const
{
QVariantList parameterRange;
-#if QT_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__IPHONE_8_0)
+#ifdef Q_OS_IOS
AVCaptureDevice *captureDevice = m_session->videoCaptureDevice();
if (!captureDevice || !isParameterSupported(parameter)) {
@@ -333,7 +332,7 @@ QVariant AVFCameraExposureControl::requestedValue(ExposureParameter parameter) c
QVariant AVFCameraExposureControl::actualValue(ExposureParameter parameter) const
{
-#if QT_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__IPHONE_8_0)
+#ifdef Q_OS_IOS
AVCaptureDevice *captureDevice = m_session->videoCaptureDevice();
if (!captureDevice || !isParameterSupported(parameter)) {
// Actually, at the moment !captiredevice => !isParameterSupported.
@@ -386,7 +385,7 @@ bool AVFCameraExposureControl::setValue(ExposureParameter parameter, const QVari
bool AVFCameraExposureControl::setExposureMode(const QVariant &value)
{
-#if QT_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__IPHONE_8_0)
+#ifdef Q_OS_IOS
if (!value.canConvert<QCameraExposure::ExposureMode>()) {
qDebugCamera() << Q_FUNC_INFO << "invalid exposure mode value,"
<< "QCameraExposure::ExposureMode expected";
@@ -433,7 +432,7 @@ bool AVFCameraExposureControl::setExposureMode(const QVariant &value)
bool AVFCameraExposureControl::setExposureCompensation(const QVariant &value)
{
-#if QT_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__IPHONE_8_0)
+#ifdef Q_OS_IOS
if (!value.canConvert<qreal>()) {
qDebugCamera() << Q_FUNC_INFO << "invalid exposure compensation"
<<"value, floating point number expected";
@@ -474,7 +473,7 @@ bool AVFCameraExposureControl::setExposureCompensation(const QVariant &value)
bool AVFCameraExposureControl::setShutterSpeed(const QVariant &value)
{
-#if QT_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__IPHONE_8_0)
+#ifdef Q_OS_IOS
if (value.isNull())
return setExposureMode(QVariant::fromValue(QCameraExposure::ExposureAuto));
@@ -521,7 +520,7 @@ bool AVFCameraExposureControl::setShutterSpeed(const QVariant &value)
bool AVFCameraExposureControl::setISO(const QVariant &value)
{
-#if QT_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__IPHONE_8_0)
+#ifdef Q_OS_IOS
if (value.isNull())
return setExposureMode(QVariant::fromValue(QCameraExposure::ExposureAuto));
@@ -565,7 +564,7 @@ bool AVFCameraExposureControl::setISO(const QVariant &value)
void AVFCameraExposureControl::cameraStateChanged()
{
-#if QT_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__IPHONE_8_0)
+#ifdef Q_OS_IOS
if (m_session->state() != QCamera::ActiveState)
return;
diff --git a/src/plugins/avfoundation/camera/avfcameraflashcontrol.h b/src/plugins/avfoundation/camera/avfcameraflashcontrol.h
index f8a11a821..58403e829 100644
--- a/src/plugins/avfoundation/camera/avfcameraflashcontrol.h
+++ b/src/plugins/avfoundation/camera/avfcameraflashcontrol.h
@@ -56,10 +56,10 @@ class AVFCameraFlashControl : public QCameraFlashControl
public:
AVFCameraFlashControl(AVFCameraService *service);
- QCameraExposure::FlashModes flashMode() const Q_DECL_OVERRIDE;
- void setFlashMode(QCameraExposure::FlashModes mode) Q_DECL_OVERRIDE;
- bool isFlashModeSupported(QCameraExposure::FlashModes mode) const Q_DECL_OVERRIDE;
- bool isFlashReady() const Q_DECL_OVERRIDE;
+ QCameraExposure::FlashModes flashMode() const override;
+ void setFlashMode(QCameraExposure::FlashModes mode) override;
+ bool isFlashModeSupported(QCameraExposure::FlashModes mode) const override;
+ bool isFlashReady() const override;
private Q_SLOTS:
void cameraStateChanged(QCamera::State newState);
diff --git a/src/plugins/avfoundation/camera/avfcamerafocuscontrol.h b/src/plugins/avfoundation/camera/avfcamerafocuscontrol.h
index 9d8b7a5ab..26135e534 100644
--- a/src/plugins/avfoundation/camera/avfcamerafocuscontrol.h
+++ b/src/plugins/avfoundation/camera/avfcamerafocuscontrol.h
@@ -58,17 +58,17 @@ class AVFCameraFocusControl : public QCameraFocusControl
public:
explicit AVFCameraFocusControl(AVFCameraService *service);
- QCameraFocus::FocusModes focusMode() const Q_DECL_OVERRIDE;
- void setFocusMode(QCameraFocus::FocusModes mode) Q_DECL_OVERRIDE;
- bool isFocusModeSupported(QCameraFocus::FocusModes mode) const Q_DECL_OVERRIDE;
+ QCameraFocus::FocusModes focusMode() const override;
+ void setFocusMode(QCameraFocus::FocusModes mode) override;
+ bool isFocusModeSupported(QCameraFocus::FocusModes mode) const override;
- QCameraFocus::FocusPointMode focusPointMode() const Q_DECL_OVERRIDE;
- void setFocusPointMode(QCameraFocus::FocusPointMode mode) Q_DECL_OVERRIDE;
- bool isFocusPointModeSupported(QCameraFocus::FocusPointMode mode) const Q_DECL_OVERRIDE;
- QPointF customFocusPoint() const Q_DECL_OVERRIDE;
- void setCustomFocusPoint(const QPointF &point) Q_DECL_OVERRIDE;
+ QCameraFocus::FocusPointMode focusPointMode() const override;
+ void setFocusPointMode(QCameraFocus::FocusPointMode mode) override;
+ bool isFocusPointModeSupported(QCameraFocus::FocusPointMode mode) const override;
+ QPointF customFocusPoint() const override;
+ void setCustomFocusPoint(const QPointF &point) override;
- QCameraFocusZoneList focusZones() const Q_DECL_OVERRIDE;
+ QCameraFocusZoneList focusZones() const override;
private Q_SLOTS:
void cameraStateChanged();
diff --git a/src/plugins/avfoundation/camera/avfcameraviewfindersettingscontrol.h b/src/plugins/avfoundation/camera/avfcameraviewfindersettingscontrol.h
index bed755339..588aa7b74 100644
--- a/src/plugins/avfoundation/camera/avfcameraviewfindersettingscontrol.h
+++ b/src/plugins/avfoundation/camera/avfcameraviewfindersettingscontrol.h
@@ -67,9 +67,9 @@ class AVFCameraViewfinderSettingsControl2 : public QCameraViewfinderSettingsCont
public:
AVFCameraViewfinderSettingsControl2(AVFCameraService *service);
- QList<QCameraViewfinderSettings> supportedViewfinderSettings() const Q_DECL_OVERRIDE;
- QCameraViewfinderSettings viewfinderSettings() const Q_DECL_OVERRIDE;
- void setViewfinderSettings(const QCameraViewfinderSettings &settings) Q_DECL_OVERRIDE;
+ QList<QCameraViewfinderSettings> supportedViewfinderSettings() const override;
+ QCameraViewfinderSettings viewfinderSettings() const override;
+ void setViewfinderSettings(const QCameraViewfinderSettings &settings) override;
// "Converters":
static QVideoFrame::PixelFormat QtPixelFormatFromCVFormat(unsigned avPixelFormat);
@@ -97,9 +97,9 @@ class AVFCameraViewfinderSettingsControl : public QCameraViewfinderSettingsContr
public:
AVFCameraViewfinderSettingsControl(AVFCameraService *service);
- bool isViewfinderParameterSupported(ViewfinderParameter parameter) const Q_DECL_OVERRIDE;
- QVariant viewfinderParameter(ViewfinderParameter parameter) const Q_DECL_OVERRIDE;
- void setViewfinderParameter(ViewfinderParameter parameter, const QVariant &value) Q_DECL_OVERRIDE;
+ bool isViewfinderParameterSupported(ViewfinderParameter parameter) const override;
+ QVariant viewfinderParameter(ViewfinderParameter parameter) const override;
+ void setViewfinderParameter(ViewfinderParameter parameter, const QVariant &value) override;
private:
void setResolution(const QVariant &resolution);
diff --git a/src/plugins/avfoundation/camera/avfcamerazoomcontrol.h b/src/plugins/avfoundation/camera/avfcamerazoomcontrol.h
index 6a460ad59..2307dfc28 100644
--- a/src/plugins/avfoundation/camera/avfcamerazoomcontrol.h
+++ b/src/plugins/avfoundation/camera/avfcamerazoomcontrol.h
@@ -57,15 +57,15 @@ class AVFCameraZoomControl : public QCameraZoomControl
public:
AVFCameraZoomControl(AVFCameraService *service);
- qreal maximumOpticalZoom() const Q_DECL_OVERRIDE;
- qreal maximumDigitalZoom() const Q_DECL_OVERRIDE;
+ qreal maximumOpticalZoom() const override;
+ qreal maximumDigitalZoom() const override;
- qreal requestedOpticalZoom() const Q_DECL_OVERRIDE;
- qreal requestedDigitalZoom() const Q_DECL_OVERRIDE;
- qreal currentOpticalZoom() const Q_DECL_OVERRIDE;
- qreal currentDigitalZoom() const Q_DECL_OVERRIDE;
+ qreal requestedOpticalZoom() const override;
+ qreal requestedDigitalZoom() const override;
+ qreal currentOpticalZoom() const override;
+ qreal currentDigitalZoom() const override;
- void zoomTo(qreal optical, qreal digital) Q_DECL_OVERRIDE;
+ void zoomTo(qreal optical, qreal digital) override;
private Q_SLOTS:
void cameraStateChanged();
diff --git a/src/plugins/avfoundation/camera/avfimageencodercontrol.h b/src/plugins/avfoundation/camera/avfimageencodercontrol.h
index 22a6b2722..7e2e34294 100644
--- a/src/plugins/avfoundation/camera/avfimageencodercontrol.h
+++ b/src/plugins/avfoundation/camera/avfimageencodercontrol.h
@@ -61,12 +61,12 @@ class AVFImageEncoderControl : public QImageEncoderControl
public:
AVFImageEncoderControl(AVFCameraService *service);
- QStringList supportedImageCodecs() const Q_DECL_OVERRIDE;
- QString imageCodecDescription(const QString &codecName) const Q_DECL_OVERRIDE;
+ QStringList supportedImageCodecs() const override;
+ QString imageCodecDescription(const QString &codecName) const override;
QList<QSize> supportedResolutions(const QImageEncoderSettings &settings,
- bool *continuous) const Q_DECL_OVERRIDE;
- QImageEncoderSettings imageSettings() const Q_DECL_OVERRIDE;
- void setImageSettings(const QImageEncoderSettings &settings) Q_DECL_OVERRIDE;
+ bool *continuous) const override;
+ QImageEncoderSettings imageSettings() const override;
+ void setImageSettings(const QImageEncoderSettings &settings) override;
QImageEncoderSettings requestedSettings() const;
diff --git a/src/plugins/avfoundation/camera/avfmediacontainercontrol.h b/src/plugins/avfoundation/camera/avfmediacontainercontrol.h
index 45d69f18b..e43e70baf 100644
--- a/src/plugins/avfoundation/camera/avfmediacontainercontrol.h
+++ b/src/plugins/avfoundation/camera/avfmediacontainercontrol.h
@@ -53,10 +53,10 @@ class AVFMediaContainerControl : public QMediaContainerControl
public:
explicit AVFMediaContainerControl(AVFCameraService *service);
- QStringList supportedContainers() const Q_DECL_OVERRIDE;
- QString containerFormat() const Q_DECL_OVERRIDE;
- void setContainerFormat(const QString &format) Q_DECL_OVERRIDE;
- QString containerDescription(const QString &formatMimeType) const Q_DECL_OVERRIDE;
+ QStringList supportedContainers() const override;
+ QString containerFormat() const override;
+ void setContainerFormat(const QString &format) override;
+ QString containerDescription(const QString &formatMimeType) const override;
NSString *fileType() const;
diff --git a/src/plugins/avfoundation/camera/avfmediarecordercontrol_ios.h b/src/plugins/avfoundation/camera/avfmediarecordercontrol_ios.h
index a0967efa3..8e049a595 100644
--- a/src/plugins/avfoundation/camera/avfmediarecordercontrol_ios.h
+++ b/src/plugins/avfoundation/camera/avfmediarecordercontrol_ios.h
@@ -65,24 +65,24 @@ public:
AVFMediaRecorderControlIOS(AVFCameraService *service, QObject *parent = 0);
~AVFMediaRecorderControlIOS();
- QUrl outputLocation() const Q_DECL_OVERRIDE;
- bool setOutputLocation(const QUrl &location) Q_DECL_OVERRIDE;
+ QUrl outputLocation() const override;
+ bool setOutputLocation(const QUrl &location) override;
- QMediaRecorder::State state() const Q_DECL_OVERRIDE;
- QMediaRecorder::Status status() const Q_DECL_OVERRIDE;
+ QMediaRecorder::State state() const override;
+ QMediaRecorder::Status status() const override;
- qint64 duration() const Q_DECL_OVERRIDE;
+ qint64 duration() const override;
- bool isMuted() const Q_DECL_OVERRIDE;
- qreal volume() const Q_DECL_OVERRIDE;
+ bool isMuted() const override;
+ qreal volume() const override;
- void applySettings() Q_DECL_OVERRIDE;
+ void applySettings() override;
void unapplySettings();
public Q_SLOTS:
- void setState(QMediaRecorder::State state) Q_DECL_OVERRIDE;
- void setMuted(bool muted) Q_DECL_OVERRIDE;
- void setVolume(qreal volume) Q_DECL_OVERRIDE;
+ void setState(QMediaRecorder::State state) override;
+ void setMuted(bool muted) override;
+ void setVolume(qreal volume) override;
private:
diff --git a/src/plugins/avfoundation/camera/avfvideoencodersettingscontrol.h b/src/plugins/avfoundation/camera/avfvideoencodersettingscontrol.h
index 4d90377d5..9bdf5a788 100644
--- a/src/plugins/avfoundation/camera/avfvideoencodersettingscontrol.h
+++ b/src/plugins/avfoundation/camera/avfvideoencodersettingscontrol.h
@@ -59,16 +59,16 @@ public:
explicit AVFVideoEncoderSettingsControl(AVFCameraService *service);
QList<QSize> supportedResolutions(const QVideoEncoderSettings &requestedVideoSettings,
- bool *continuous = 0) const Q_DECL_OVERRIDE;
+ bool *continuous = 0) const override;
QList<qreal> supportedFrameRates(const QVideoEncoderSettings &requestedVideoSettings,
- bool *continuous = 0) const Q_DECL_OVERRIDE;
+ bool *continuous = 0) const override;
- QStringList supportedVideoCodecs() const Q_DECL_OVERRIDE;
- QString videoCodecDescription(const QString &codecName) const Q_DECL_OVERRIDE;
+ QStringList supportedVideoCodecs() const override;
+ QString videoCodecDescription(const QString &codecName) const override;
- QVideoEncoderSettings videoSettings() const Q_DECL_OVERRIDE;
- void setVideoSettings(const QVideoEncoderSettings &requestedVideoSettings) Q_DECL_OVERRIDE;
+ QVideoEncoderSettings videoSettings() const override;
+ void setVideoSettings(const QVideoEncoderSettings &requestedVideoSettings) override;
NSDictionary *applySettings(AVCaptureConnection *connection);
void unapplySettings(AVCaptureConnection *connection);
diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayercontrol.mm b/src/plugins/avfoundation/mediaplayer/avfmediaplayercontrol.mm
index 5f7bae1c8..bf7ebb4a0 100644
--- a/src/plugins/avfoundation/mediaplayer/avfmediaplayercontrol.mm
+++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayercontrol.mm
@@ -60,6 +60,7 @@ void AVFMediaPlayerControl::setSession(AVFMediaPlayerSession *session)
connect(m_session, SIGNAL(positionChanged(qint64)), this, SIGNAL(positionChanged(qint64)));
connect(m_session, SIGNAL(durationChanged(qint64)), this, SIGNAL(durationChanged(qint64)));
+ connect(m_session, SIGNAL(bufferStatusChanged(int)), this, SIGNAL(bufferStatusChanged(int)));
connect(m_session, SIGNAL(stateChanged(QMediaPlayer::State)),
this, SIGNAL(stateChanged(QMediaPlayer::State)));
connect(m_session, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)),
diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.h b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.h
index 9a55b7b74..e20f4a1ec 100644
--- a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.h
+++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.h
@@ -106,12 +106,15 @@ public Q_SLOTS:
void processLoadStateChange();
void processLoadStateFailure();
+ void processBufferStateChange(int bufferStatus);
+
void processDurationChange(qint64 duration);
Q_SIGNALS:
void positionChanged(qint64 position);
void durationChanged(qint64 duration);
void stateChanged(QMediaPlayer::State newState);
+ void bufferStatusChanged(int bufferStatus);
void mediaStatusChanged(QMediaPlayer::MediaStatus status);
void volumeChanged(int volume);
void mutedChanged(bool muted);
@@ -179,6 +182,7 @@ private:
qint64 m_requestedPosition;
qint64 m_duration;
+ int m_bufferStatus;
bool m_videoAvailable;
bool m_audioAvailable;
bool m_seekable;
diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm
index b6fe01053..06fb71ef8 100644
--- a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm
+++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm
@@ -52,7 +52,8 @@ static NSString* const AVF_TRACKS_KEY = @"tracks";
static NSString* const AVF_PLAYABLE_KEY = @"playable";
//AVPlayerItem keys
-static NSString* const AVF_STATUS_KEY = @"status";
+static NSString* const AVF_STATUS_KEY = @"status";
+static NSString* const AVF_BUFFER_LIKELY_KEEP_UP_KEY = @"playbackLikelyToKeepUp";
//AVPlayer keys
static NSString* const AVF_RATE_KEY = @"rate";
@@ -61,6 +62,7 @@ static NSString* const AVF_CURRENT_ITEM_DURATION_KEY = @"currentItem.duration
static void *AVFMediaPlayerSessionObserverRateObservationContext = &AVFMediaPlayerSessionObserverRateObservationContext;
static void *AVFMediaPlayerSessionObserverStatusObservationContext = &AVFMediaPlayerSessionObserverStatusObservationContext;
+static void *AVFMediaPlayerSessionObserverBufferLikelyToKeepUpContext = &AVFMediaPlayerSessionObserverBufferLikelyToKeepUpContext;
static void *AVFMediaPlayerSessionObserverCurrentItemObservationContext = &AVFMediaPlayerSessionObserverCurrentItemObservationContext;
static void *AVFMediaPlayerSessionObserverCurrentItemDurationObservationContext = &AVFMediaPlayerSessionObserverCurrentItemDurationObservationContext;
@@ -72,6 +74,7 @@ static void *AVFMediaPlayerSessionObserverCurrentItemDurationObservationContext
AVPlayerItem *m_playerItem;
AVPlayerLayer *m_playerLayer;
NSURL *m_URL;
+ BOOL m_bufferIsLikelyToKeepUp;
}
@property (readonly, getter=player) AVPlayer* m_player;
@@ -102,6 +105,7 @@ static void *AVFMediaPlayerSessionObserverCurrentItemDurationObservationContext
return nil;
self->m_session = session;
+ self->m_bufferIsLikelyToKeepUp = FALSE;
return self;
}
@@ -141,6 +145,7 @@ static void *AVFMediaPlayerSessionObserverCurrentItemDurationObservationContext
{
if (m_playerItem) {
[m_playerItem removeObserver:self forKeyPath:AVF_STATUS_KEY];
+ [m_playerItem removeObserver:self forKeyPath:AVF_BUFFER_LIKELY_KEEP_UP_KEY];
[[NSNotificationCenter defaultCenter] removeObserver:self
name:AVPlayerItemDidPlayToEndTimeNotification
@@ -219,6 +224,11 @@ static void *AVFMediaPlayerSessionObserverCurrentItemDurationObservationContext
options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew
context:AVFMediaPlayerSessionObserverStatusObservationContext];
+ [m_playerItem addObserver:self
+ forKeyPath:AVF_BUFFER_LIKELY_KEEP_UP_KEY
+ options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew
+ context:AVFMediaPlayerSessionObserverBufferLikelyToKeepUpContext];
+
//When the player item has played to its end time we'll toggle
//the movie controller Pause button to be the Play button
[[NSNotificationCenter defaultCenter] addObserver:self
@@ -338,6 +348,15 @@ static void *AVFMediaPlayerSessionObserverCurrentItemDurationObservationContext
break;
}
}
+ else if (context == AVFMediaPlayerSessionObserverBufferLikelyToKeepUpContext)
+ {
+ const bool isPlaybackLikelyToKeepUp = [m_playerItem isPlaybackLikelyToKeepUp];
+ if (isPlaybackLikelyToKeepUp != m_bufferIsLikelyToKeepUp) {
+ m_bufferIsLikelyToKeepUp = isPlaybackLikelyToKeepUp;
+ QMetaObject::invokeMethod(m_session, "processBufferStateChange", Qt::AutoConnection,
+ Q_ARG(int, isPlaybackLikelyToKeepUp ? 100 : 0));
+ }
+ }
//AVPlayer "rate" property value observer.
else if (context == AVFMediaPlayerSessionObserverRateObservationContext)
{
@@ -402,6 +421,7 @@ AVFMediaPlayerSession::AVFMediaPlayerSession(AVFMediaPlayerService *service, QOb
, m_rate(1.0)
, m_requestedPosition(-1)
, m_duration(0)
+ , m_bufferStatus(0)
, m_videoAvailable(false)
, m_audioAvailable(false)
, m_seekable(false)
@@ -536,11 +556,10 @@ qint64 AVFMediaPlayerSession::duration() const
int AVFMediaPlayerSession::bufferStatus() const
{
- //BUG: bufferStatus may be relevant?
#ifdef QT_DEBUG_AVF
qDebug() << Q_FUNC_INFO;
#endif
- return 100;
+ return m_bufferStatus;
}
int AVFMediaPlayerSession::volume() const
@@ -898,6 +917,15 @@ void AVFMediaPlayerSession::processLoadStateFailure()
Q_EMIT stateChanged((m_state = QMediaPlayer::StoppedState));
}
+void AVFMediaPlayerSession::processBufferStateChange(int bufferStatus)
+{
+ if (bufferStatus == m_bufferStatus)
+ return;
+
+ m_bufferStatus = bufferStatus;
+ Q_EMIT bufferStatusChanged(bufferStatus);
+}
+
void AVFMediaPlayerSession::processDurationChange(qint64 duration)
{
if (duration == m_duration)
diff --git a/src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.mm b/src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.mm
index 4952551dc..5727cb0f4 100644
--- a/src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.mm
+++ b/src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.mm
@@ -41,6 +41,14 @@
#include <AVFoundation/AVFoundation.h>
+#if QT_HAS_INCLUDE(<AppKit/AppKit.h>)
+#include <AppKit/AppKit.h>
+#endif
+
+#if QT_HAS_INCLUDE(<UIKit/UIKit.h>)
+#include <UIKit/UIKit.h>
+#endif
+
QT_USE_NAMESPACE
AVFVideoWindowControl::AVFVideoWindowControl(QObject *parent)