diff options
author | Liang Qi <liang.qi@qt.io> | 2016-08-27 20:23:52 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2016-08-27 20:23:52 +0200 |
commit | da7d462e315fb101fc9112a294b5ca2e3bd35a75 (patch) | |
tree | 843917c14a566949318d1e8e03aa84a6ccc041d4 /src/plugins/avfoundation/mediaplayer | |
parent | 820205e604a5f281238c23464638fdff72b969d1 (diff) | |
parent | 6d95682d7ff282180655f2f384d8aba69c4f67af (diff) |
Merge remote-tracking branch 'origin/5.6' into 5.7
Change-Id: I639d42e78a2b85e939c9f8e9dd5da70cdc058857
Diffstat (limited to 'src/plugins/avfoundation/mediaplayer')
-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) |