From 77ea8e8d10626a76302d43bd622f7f873559e598 Mon Sep 17 00:00:00 2001 From: jiajia qin Date: Wed, 20 Aug 2014 01:19:35 +0800 Subject: [PATCH] Fixed screen displayed abnormally when playing some size of html5 mp4 videos This patch is cherry picked from Qing's PR https://github.com/crosswalk-project/chromium-crosswalk/pull/166 Bug = XWALK-2265 --- media/vaapi_video_decode_accelerator.cc | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/media/vaapi_video_decode_accelerator.cc b/media/vaapi_video_decode_accelerator.cc index 6d95db22..467526cc 100644 --- a/media/vaapi_video_decode_accelerator.cc +++ b/media/vaapi_video_decode_accelerator.cc @@ -186,6 +186,16 @@ bool VaapiVideoDecodeAccelerator::TFPPicture::Upload(VASurfaceID surface) { gfx::ScopedTextureBinder texture_binder(GL_TEXTURE_2D, texture_id_); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + + unsigned int al = 4 * size_.width(); + if (al != va_image_.pitches[0]) { + // Not aligned phenomenon occurs only in special size video in None-X11. + // So re-check RGBA data alignment and realign filled video frame in need. + unsigned char* bhandle = static_cast(buffer); + for (int i = 0; i < size_.height(); i++) { + memcpy(bhandle + (i * al), bhandle + (i * (va_image_.pitches[0])), al); + } + } glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, size_.width(), size_.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, buffer);