OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "media/gpu/vaapi_drm_picture.h" | 5 #include "media/gpu/vaapi_drm_picture.h" |
6 | 6 |
7 #include "base/file_descriptor_posix.h" | 7 #include "base/file_descriptor_posix.h" |
| 8 #include "gpu/ipc/common/gpu_memory_buffer_support.h" |
8 #include "media/gpu/va_surface.h" | 9 #include "media/gpu/va_surface.h" |
9 #include "media/gpu/vaapi_wrapper.h" | 10 #include "media/gpu/vaapi_wrapper.h" |
10 #include "third_party/libva/va/drm/va_drm.h" | 11 #include "third_party/libva/va/drm/va_drm.h" |
11 #include "third_party/libva/va/va.h" | 12 #include "third_party/libva/va/va.h" |
12 #include "ui/gfx/gpu_memory_buffer.h" | 13 #include "ui/gfx/gpu_memory_buffer.h" |
13 #include "ui/gfx/native_pixmap.h" | 14 #include "ui/gfx/native_pixmap.h" |
14 #include "ui/gl/gl_bindings.h" | 15 #include "ui/gl/gl_bindings.h" |
15 #include "ui/gl/gl_image_native_pixmap.h" | 16 #include "ui/gl/gl_image_native_pixmap.h" |
16 #include "ui/gl/scoped_binders.h" | 17 #include "ui/gl/scoped_binders.h" |
17 #include "ui/ozone/public/ozone_platform.h" | 18 #include "ui/ozone/public/ozone_platform.h" |
(...skipping 25 matching lines...) Expand all Loading... |
43 } | 44 } |
44 | 45 |
45 static unsigned BufferFormatToInternalFormat(gfx::BufferFormat format) { | 46 static unsigned BufferFormatToInternalFormat(gfx::BufferFormat format) { |
46 switch (format) { | 47 switch (format) { |
47 case gfx::BufferFormat::BGRA_8888: | 48 case gfx::BufferFormat::BGRA_8888: |
48 return GL_BGRA_EXT; | 49 return GL_BGRA_EXT; |
49 | 50 |
50 case gfx::BufferFormat::YVU_420: | 51 case gfx::BufferFormat::YVU_420: |
51 return GL_RGB_YCRCB_420_CHROMIUM; | 52 return GL_RGB_YCRCB_420_CHROMIUM; |
52 | 53 |
| 54 case gfx::BufferFormat::YUV_420_BIPLANAR: |
| 55 return GL_RGB_YCBCR_420V_CHROMIUM; |
| 56 |
53 default: | 57 default: |
54 NOTREACHED(); | 58 NOTREACHED(); |
55 return GL_BGRA_EXT; | 59 return GL_BGRA_EXT; |
56 } | 60 } |
57 } | 61 } |
58 | 62 |
59 bool VaapiDrmPicture::Initialize() { | 63 bool VaapiDrmPicture::Initialize() { |
60 DCHECK(pixmap_); | 64 DCHECK(pixmap_); |
61 | 65 |
62 va_surface_ = vaapi_wrapper_->CreateVASurfaceForPixmap(pixmap_); | 66 va_surface_ = vaapi_wrapper_->CreateVASurfaceForPixmap(pixmap_); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
97 return false; | 101 return false; |
98 } | 102 } |
99 } | 103 } |
100 | 104 |
101 return true; | 105 return true; |
102 } | 106 } |
103 | 107 |
104 bool VaapiDrmPicture::Allocate(gfx::BufferFormat format) { | 108 bool VaapiDrmPicture::Allocate(gfx::BufferFormat format) { |
105 ui::OzonePlatform* platform = ui::OzonePlatform::GetInstance(); | 109 ui::OzonePlatform* platform = ui::OzonePlatform::GetInstance(); |
106 ui::SurfaceFactoryOzone* factory = platform->GetSurfaceFactoryOzone(); | 110 ui::SurfaceFactoryOzone* factory = platform->GetSurfaceFactoryOzone(); |
| 111 gfx::BufferUsage usage = gfx::BufferUsage::GPU_READ; |
| 112 DCHECK(gpu::IsNativeGpuMemoryBufferConfigurationSupported(format, usage)); |
| 113 if (gpu::IsNativeGpuMemoryBufferConfigurationSupported( |
| 114 format, gfx::BufferUsage::SCANOUT)) |
| 115 usage = gfx::BufferUsage::SCANOUT; |
107 pixmap_ = factory->CreateNativePixmap(gfx::kNullAcceleratedWidget, size_, | 116 pixmap_ = factory->CreateNativePixmap(gfx::kNullAcceleratedWidget, size_, |
108 format, gfx::BufferUsage::SCANOUT); | 117 format, usage); |
109 if (!pixmap_) { | 118 if (!pixmap_) { |
110 DVLOG(1) << "Failed allocating a pixmap"; | 119 DVLOG(1) << "Failed allocating a pixmap"; |
111 return false; | 120 return false; |
112 } | 121 } |
113 | 122 |
114 return Initialize(); | 123 return Initialize(); |
115 } | 124 } |
116 | 125 |
117 bool VaapiDrmPicture::ImportGpuMemoryBufferHandle( | 126 bool VaapiDrmPicture::ImportGpuMemoryBufferHandle( |
118 gfx::BufferFormat format, | 127 gfx::BufferFormat format, |
(...skipping 11 matching lines...) Expand all Loading... |
130 | 139 |
131 return Initialize(); | 140 return Initialize(); |
132 } | 141 } |
133 | 142 |
134 bool VaapiDrmPicture::DownloadFromSurface( | 143 bool VaapiDrmPicture::DownloadFromSurface( |
135 const scoped_refptr<VASurface>& va_surface) { | 144 const scoped_refptr<VASurface>& va_surface) { |
136 return vaapi_wrapper_->BlitSurface(va_surface, va_surface_); | 145 return vaapi_wrapper_->BlitSurface(va_surface, va_surface_); |
137 } | 146 } |
138 | 147 |
139 bool VaapiDrmPicture::AllowOverlay() const { | 148 bool VaapiDrmPicture::AllowOverlay() const { |
140 return true; | 149 // TODO(dshwang): make it true when cros kernel supports NV12 overlay. |
| 150 // crbug.com/683347 |
| 151 return pixmap_->GetBufferUsage() == gfx::BufferUsage::SCANOUT; |
141 } | 152 } |
142 | 153 |
143 } // namespace media | 154 } // namespace media |
OLD | NEW |