From 7038898edf490857a1df3dd3fdc54bc8f8e86af2 Mon Sep 17 00:00:00 2001 From: bbcallen Date: Sat, 12 Oct 2013 17:08:39 +0800 Subject: [PATCH] ios: GLView: support scale mode switch --- .../IJKFFMoviePlayerController.m | 23 +++++++++ .../ijkmedia/ijksdl/ios/IJKSDLGLView.m | 49 +++++++++++++------ 2 files changed, 57 insertions(+), 15 deletions(-) diff --git a/ios/IJKMediaPlayer/IJKMediaPlayer/IJKFFMoviePlayerController.m b/ios/IJKMediaPlayer/IJKMediaPlayer/IJKFFMoviePlayerController.m index 2f6a8613..823b9273 100644 --- a/ios/IJKMediaPlayer/IJKMediaPlayer/IJKFFMoviePlayerController.m +++ b/ios/IJKMediaPlayer/IJKMediaPlayer/IJKFFMoviePlayerController.m @@ -200,6 +200,29 @@ return self.currentPlaybackTime + ((NSTimeInterval)_bufferingTime) / 1000; } +- (void)setScalingMode: (MPMovieScalingMode) aScalingMode +{ + MPMovieScalingMode newScalingMode = aScalingMode; + switch (aScalingMode) { + case MPMovieScalingModeNone: + [_view setContentMode:UIViewContentModeCenter]; + break; + case MPMovieScalingModeAspectFit: + [_view setContentMode:UIViewContentModeScaleAspectFit]; + break; + case MPMovieScalingModeAspectFill: + [_view setContentMode:UIViewContentModeScaleAspectFill]; + break; + case MPMovieScalingModeFill: + [_view setContentMode:UIViewContentModeScaleToFill]; + break; + default: + newScalingMode = _scalingMode; + } + + _scalingMode = newScalingMode; +} + // deprecated, for MPMoviePlayerController compatiable - (UIImage *)thumbnailImageAtTime:(NSTimeInterval)playbackTime timeOption:(MPMovieTimeOption)option { diff --git a/ios/IJKMediaPlayer/IJKMediaPlayer/ijkmedia/ijksdl/ios/IJKSDLGLView.m b/ios/IJKMediaPlayer/IJKMediaPlayer/ijkmedia/ijksdl/ios/IJKSDLGLView.m index e8206cb2..0a5a6cec 100644 --- a/ios/IJKMediaPlayer/IJKMediaPlayer/ijkmedia/ijksdl/ios/IJKSDLGLView.m +++ b/ios/IJKMediaPlayer/IJKMediaPlayer/ijkmedia/ijksdl/ios/IJKSDLGLView.m @@ -26,7 +26,7 @@ #import "IJKSDLGLShader.h" #import "IJKSDLGLRender.h" #import "IJKSDLGLRenderI420.h" -#import "IJKMediaModule.h" +#import "IJKMediaPlayer/IJKMediaModule.h" static NSString *const g_vertexShaderString = IJK_SHADER_STRING ( @@ -374,23 +374,42 @@ exit: - (void)updateVertices { - const BOOL fit = (self.contentMode == UIViewContentModeScaleAspectFit); const float width = _frameWidth; const float height = _frameHeight; + const float dW = (float)_backingWidth / width; const float dH = (float)_backingHeight / height; - const float dW = (float)_backingWidth / width; - const float dd = fit ? MIN(dH, dW) : MAX(dH, dW); - const float h = (height * dd / (float)_backingHeight); - const float w = (width * dd / (float)_backingWidth ); - - _vertices[0] = - w; - _vertices[1] = - h; - _vertices[2] = w; - _vertices[3] = - h; - _vertices[4] = - w; - _vertices[5] = h; - _vertices[6] = w; - _vertices[7] = h; + float dd = 1.0f; + float nW = 1.0f; + float nH = 1.0f; + + switch (self.contentMode) { + case UIViewContentModeScaleToFill: + break; + case UIViewContentModeCenter: + nW = 1.0f / dW / [UIScreen mainScreen].scale; + nH = 1.0f / dH / [UIScreen mainScreen].scale; + break; + case UIViewContentModeScaleAspectFill: + dd = MAX(dW, dH); + nW = (width * dd / (float)_backingWidth ); + nH = (height * dd / (float)_backingHeight); + break; + case UIViewContentModeScaleAspectFit: + default: + dd = MIN(dW, dH); + nW = (width * dd / (float)_backingWidth ); + nH = (height * dd / (float)_backingHeight); + break; + } + + _vertices[0] = - nW; + _vertices[1] = - nH; + _vertices[2] = nW; + _vertices[3] = - nH; + _vertices[4] = - nW; + _vertices[5] = nH; + _vertices[6] = nW; + _vertices[7] = nH; } - (void)display: (SDL_VoutOverlay *) overlay -- GitLab