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);