From f5e9709e1abaf9c66f817bc791b5f995b33a2c3e Mon Sep 17 00:00:00 2001 From: bbcallen Date: Sat, 19 Oct 2013 16:13:16 +0800 Subject: [PATCH] ios: gles: correct alignment of gles texture --- ijkmedia/ijksdl/ffmpeg/ijksdl_vout_overlay_ffmpeg.c | 11 ++++++++++- .../ijkmedia/ijksdl/ios/IJKSDLGLRenderI420.m | 4 ++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/ijkmedia/ijksdl/ffmpeg/ijksdl_vout_overlay_ffmpeg.c b/ijkmedia/ijksdl/ffmpeg/ijksdl_vout_overlay_ffmpeg.c index 21709dc9..700cd48c 100644 --- a/ijkmedia/ijksdl/ffmpeg/ijksdl_vout_overlay_ffmpeg.c +++ b/ijkmedia/ijksdl/ffmpeg/ijksdl_vout_overlay_ffmpeg.c @@ -144,13 +144,22 @@ SDL_VoutOverlay *SDL_VoutFFmpeg_CreateOverlay(int width, int height, Uint32 form overlay->h = height; enum AVPixelFormat ff_format = AV_PIX_FMT_NONE; - int buf_width = width; // must be aligned to 16 bytes pitch for arm-neon image-convert + int buf_width = width; int buf_height = height; switch (format) { case SDL_FCC_I420: case SDL_FCC_YV12: { ff_format = AV_PIX_FMT_YUV420P; + // FIXME: need runtime config +#if defined(__ANDROID__) + // 16 bytes align pitch for arm-neon image-convert buf_width = IJKALIGN(width, 16); // 1 bytes per pixel for Y-plane +#elif defined(__APPLE__) + // 2^n align for width + buf_width = 1 << (sizeof(int) * 8 - __builtin_clz(width)); +#else + buf_width = IJKALIGN(width, 16); // unknown platform +#endif opaque->planes = 3; break; } diff --git a/ios/IJKMediaPlayer/IJKMediaPlayer/ijkmedia/ijksdl/ios/IJKSDLGLRenderI420.m b/ios/IJKMediaPlayer/IJKMediaPlayer/ijkmedia/ijksdl/ios/IJKSDLGLRenderI420.m index 2a8ea3a0..77623724 100644 --- a/ios/IJKMediaPlayer/IJKMediaPlayer/ijkmedia/ijksdl/ios/IJKSDLGLRenderI420.m +++ b/ios/IJKMediaPlayer/IJKMediaPlayer/ijkmedia/ijksdl/ios/IJKSDLGLRenderI420.m @@ -86,8 +86,8 @@ static NSString *const g_yuvFragmentShaderString = IJK_SHADER_STRING if (0 == _textures[0]) glGenTextures(3, _textures); - const UInt8 *pixels[3] = {overlay->pixels[0], overlay->pixels[1], overlay->pixels[2]}; - const NSUInteger widths[3] = { frameWidth, frameWidth / 2, frameWidth / 2 }; + const UInt8 *pixels[3] = { overlay->pixels[0], overlay->pixels[1], overlay->pixels[2] }; + const NSUInteger widths[3] = { overlay->pitches[0], overlay->pitches[1], overlay->pitches[2] }; const NSUInteger heights[3] = { frameHeight, frameHeight / 2, frameHeight / 2 }; for (int i = 0; i < 3; ++i) { -- GitLab