diff options
author | Yoann Lopes <yoann.lopes@theqtcompany.com> | 2016-09-01 12:29:35 +0200 |
---|---|---|
committer | Yoann Lopes <yoann.lopes@theqtcompany.com> | 2016-09-01 12:29:35 +0200 |
commit | 9fb4597d5c0d3fa3340ae74ed2eb6bb8e3ee2d17 (patch) | |
tree | cc82491fc856e3d184b3b00727a06139d73c550b /src/plugins/avfoundation/mediaplayer | |
parent | 29232a2bc207fb7dc44532f64bbe35d9181340c6 (diff) | |
parent | da7d462e315fb101fc9112a294b5ca2e3bd35a75 (diff) |
Merge remote-tracking branch 'origin/5.7' into 5.8
Conflicts:
src/multimedia/audio/qaudiosystemplugin.cpp
src/plugins/directshow/helpers/directshowobject.cpp
src/plugins/directshow/player/directshowiosource.cpp
src/plugins/directshow/player/directshowiosource.h
Change-Id: I0e4632c7705128f81429ddbcb0d4abbc04858a8b
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) |