diff --git a/ios/IJKMediaPlayer/IJKMediaPlayer/ijkmedia/ijksdl/ios/IJKSDLGLView.h b/ios/IJKMediaPlayer/IJKMediaPlayer/ijkmedia/ijksdl/ios/IJKSDLGLView.h index c5b7ad41ec53a74eeea2564058dac7f6d97f0b78..e793b12ac630843b3efd3fa486eff112ca4f246e 100644 --- a/ios/IJKMediaPlayer/IJKMediaPlayer/ijkmedia/ijksdl/ios/IJKSDLGLView.h +++ b/ios/IJKMediaPlayer/IJKMediaPlayer/ijkmedia/ijksdl/ios/IJKSDLGLView.h @@ -33,6 +33,7 @@ - (UIImage*) snapshot; - (void)setHudValue:(NSString *)value forKey:(NSString *)key; +- (void)setShouldLockWhileBeingMovedToWindow:(BOOL)shouldLockWhiteBeingMovedToWindow __attribute__((deprecated("unused"))); @property(nonatomic,strong) NSLock *appActivityLock; @property(nonatomic) CGFloat fps; diff --git a/ios/IJKMediaPlayer/IJKMediaPlayer/ijkmedia/ijksdl/ios/IJKSDLGLView.m b/ios/IJKMediaPlayer/IJKMediaPlayer/ijkmedia/ijksdl/ios/IJKSDLGLView.m index 931124fdb082f57f21ba26379dbc9c3759e16823..49ebfad9e039cb45ba4470f6069eed244ae8555d 100644 --- a/ios/IJKMediaPlayer/IJKMediaPlayer/ijkmedia/ijksdl/ios/IJKSDLGLView.m +++ b/ios/IJKMediaPlayer/IJKMediaPlayer/ijkmedia/ijksdl/ios/IJKSDLGLView.m @@ -52,6 +52,8 @@ int _tryLockErrorCount; BOOL _didSetupGL; BOOL _didStopGL; + BOOL _didLockedDueToMovedToWindow; + BOOL _shouldLockWhileBeingMovedToWindow; NSMutableArray *_registeredNotifications; IJKSDLHudViewController *_hudViewController; @@ -67,7 +69,7 @@ self = [super initWithFrame:frame]; if (self) { _tryLockErrorCount = 0; - + _shouldLockWhileBeingMovedToWindow = YES; self.glActiveLock = [[NSRecursiveLock alloc] init]; _registeredNotifications = [[NSMutableArray alloc] init]; [self registerApplicationObservers]; @@ -82,6 +84,28 @@ return self; } +- (void)willMoveToWindow:(UIWindow *)newWindow +{ + if (!_shouldLockWhileBeingMovedToWindow) { + [super willMoveToWindow:newWindow]; + return; + } + if (newWindow && !_didLockedDueToMovedToWindow) { + [self lockGLActive]; + _didLockedDueToMovedToWindow = YES; + } + [super willMoveToWindow:newWindow]; +} + +- (void)didMoveToWindow +{ + [super didMoveToWindow]; + if (self.window && _didLockedDueToMovedToWindow) { + [self unlockGLActive]; + _didLockedDueToMovedToWindow = NO; + } +} + - (BOOL)setupEAGLContext:(EAGLContext *)context { glGenFramebuffers(1, &_framebuffer); @@ -601,6 +625,11 @@ } } +- (void)setShouldLockWhileBeingMovedToWindow:(BOOL)shouldLockWhileBeingMovedToWindow +{ + _shouldLockWhileBeingMovedToWindow = shouldLockWhileBeingMovedToWindow; +} + - (void)setShouldShowHudView:(BOOL)shouldShowHudView { _hudViewController.tableView.hidden = !shouldShowHudView;