| Index: media/gpu/dxva_picture_buffer_win.cc
|
| diff --git a/media/gpu/dxva_picture_buffer_win.cc b/media/gpu/dxva_picture_buffer_win.cc
|
| index 390a72e1a5955217b95865d095b3f30950dc10ab..a6f417da2907d4f2ac8039d49494fb1c1c843d83 100644
|
| --- a/media/gpu/dxva_picture_buffer_win.cc
|
| +++ b/media/gpu/dxva_picture_buffer_win.cc
|
| @@ -189,7 +189,10 @@ bool PbufferPictureBuffer::Initialize(const DXVAVideoDecodeAccelerator& decoder,
|
| eglGetConfigAttrib(egl_display, egl_config, EGL_BIND_TO_TEXTURE_RGB,
|
| &use_rgb);
|
|
|
| - if (!InitializeTexture(decoder, !!use_rgb))
|
| + EGLint red_bits = 8;
|
| + eglGetConfigAttrib(egl_display, egl_config, EGL_RED_SIZE, &red_bits);
|
| +
|
| + if (!InitializeTexture(decoder, !!use_rgb, red_bits == 16))
|
| return false;
|
|
|
| EGLint attrib_list[] = {EGL_WIDTH,
|
| @@ -223,7 +226,8 @@ bool PbufferPictureBuffer::Initialize(const DXVAVideoDecodeAccelerator& decoder,
|
|
|
| bool PbufferPictureBuffer::InitializeTexture(
|
| const DXVAVideoDecodeAccelerator& decoder,
|
| - bool use_rgb) {
|
| + bool use_rgb,
|
| + bool use_fp16) {
|
| DCHECK(!texture_share_handle_);
|
| if (decoder.d3d11_device_) {
|
| D3D11_TEXTURE2D_DESC desc;
|
| @@ -231,7 +235,11 @@ bool PbufferPictureBuffer::InitializeTexture(
|
| desc.Height = picture_buffer_.size().height();
|
| desc.MipLevels = 1;
|
| desc.ArraySize = 1;
|
| - desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
|
| + if (use_fp16) {
|
| + desc.Format = DXGI_FORMAT_R16G16B16A16_FLOAT;
|
| + } else {
|
| + desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
|
| + }
|
| desc.SampleDesc.Count = 1;
|
| desc.SampleDesc.Quality = 0;
|
| desc.Usage = D3D11_USAGE_DEFAULT;
|
|
|