diff options
author | Liang Qi <liang.qi@qt.io> | 2016-09-21 09:28:06 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2016-09-21 09:28:06 +0200 |
commit | e1ae1235f259393e72e4a2e0d77278e9054405fb (patch) | |
tree | 04f57d7b2a9429844306c55e9604f10562ba9783 /src/plugins/avfoundation | |
parent | 2e556aef9375377439b9b6da8d455fe891abfd7c (diff) | |
parent | 01c9322bfe918b886468eb520d77b21b6d8c0c11 (diff) | |
download | qtmultimedia-e1ae1235f259393e72e4a2e0d77278e9054405fb.tar.gz |
Merge remote-tracking branch 'origin/5.8' into dev
Conflicts:
src/imports/multimedia/multimedia.cpp
Change-Id: I38899391ec8d2fcec6f2d46514286759f7a27629
Diffstat (limited to 'src/plugins/avfoundation')
-rw-r--r-- | src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm | 16 | ||||
-rw-r--r-- | src/plugins/avfoundation/mediaplayer/avfvideowidget.mm | 6 |
2 files changed, 19 insertions, 3 deletions
diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm index 87bb08e5c..473a18884 100644 --- a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm +++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm @@ -41,6 +41,8 @@ #include "avfmediaplayerservice.h" #include "avfvideooutput.h" +#include <qpointer.h> + #import <AVFoundation/AVFoundation.h> QT_USE_NAMESPACE @@ -111,15 +113,23 @@ static void *AVFMediaPlayerSessionObserverCurrentItemObservationContext = &AVFMe //Create an asset for inspection of a resource referenced by a given URL. //Load the values for the asset keys "tracks", "playable". - AVURLAsset *asset = [AVURLAsset URLAssetWithURL:m_URL options:nil]; - NSArray *requestedKeys = [NSArray arrayWithObjects:AVF_TRACKS_KEY, AVF_PLAYABLE_KEY, nil]; + // use __block to avoid maintaining strong references on variables captured by the + // following block callback + __block AVURLAsset *asset = [[AVURLAsset URLAssetWithURL:m_URL options:nil] retain]; + __block NSArray *requestedKeys = [[NSArray arrayWithObjects:AVF_TRACKS_KEY, AVF_PLAYABLE_KEY, nil] retain]; + + __block AVFMediaPlayerSessionObserver *blockSelf = self; + QPointer<AVFMediaPlayerSession> session(m_session); // Tells the asset to load the values of any of the specified keys that are not already loaded. [asset loadValuesAsynchronouslyForKeys:requestedKeys completionHandler: ^{ dispatch_async( dispatch_get_main_queue(), ^{ - [self prepareToPlayAsset:asset withKeys:requestedKeys]; + if (session) + [blockSelf prepareToPlayAsset:asset withKeys:requestedKeys]; + [asset release]; + [requestedKeys release]; }); }]; } diff --git a/src/plugins/avfoundation/mediaplayer/avfvideowidget.mm b/src/plugins/avfoundation/mediaplayer/avfvideowidget.mm index 3b270f9b6..7eb5a71cf 100644 --- a/src/plugins/avfoundation/mediaplayer/avfvideowidget.mm +++ b/src/plugins/avfoundation/mediaplayer/avfvideowidget.mm @@ -45,6 +45,12 @@ #include <QtGui/QPaintEvent> #include <QtGui/QPainter> +#if defined(Q_OS_MACOS) +#import <AppKit/AppKit.h> +#else +#import <UIKit/UIKit.h> +#endif + QT_USE_NAMESPACE AVFVideoWidget::AVFVideoWidget(QWidget *parent) |