Chromium Code Reviews| 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 "media/gpu/va_surface.h" | 8 #include "media/gpu/va_surface.h" |
| 9 #include "media/gpu/vaapi_wrapper.h" | 9 #include "media/gpu/vaapi_wrapper.h" |
| 10 #include "third_party/libva/va/drm/va_drm.h" | 10 #include "third_party/libva/va/drm/va_drm.h" |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 43 } | 43 } |
| 44 | 44 |
| 45 static unsigned BufferFormatToInternalFormat(gfx::BufferFormat format) { | 45 static unsigned BufferFormatToInternalFormat(gfx::BufferFormat format) { |
| 46 switch (format) { | 46 switch (format) { |
| 47 case gfx::BufferFormat::BGRA_8888: | 47 case gfx::BufferFormat::BGRA_8888: |
| 48 return GL_BGRA_EXT; | 48 return GL_BGRA_EXT; |
| 49 | 49 |
| 50 case gfx::BufferFormat::YVU_420: | 50 case gfx::BufferFormat::YVU_420: |
| 51 return GL_RGB_YCRCB_420_CHROMIUM; | 51 return GL_RGB_YCRCB_420_CHROMIUM; |
| 52 | 52 |
| 53 case gfx::BufferFormat::YUV_420_BIPLANAR: | |
| 54 return GL_RGB_YCBCR_420V_CHROMIUM; | |
| 55 | |
| 53 default: | 56 default: |
| 54 NOTREACHED(); | 57 NOTREACHED(); |
| 55 return GL_BGRA_EXT; | 58 return GL_BGRA_EXT; |
| 56 } | 59 } |
| 57 } | 60 } |
| 58 | 61 |
| 59 bool VaapiDrmPicture::Initialize() { | 62 bool VaapiDrmPicture::Initialize() { |
| 60 DCHECK(pixmap_); | 63 DCHECK(pixmap_); |
| 61 | 64 |
| 62 va_surface_ = vaapi_wrapper_->CreateVASurfaceForPixmap(pixmap_); | 65 va_surface_ = vaapi_wrapper_->CreateVASurfaceForPixmap(pixmap_); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 97 return false; | 100 return false; |
| 98 } | 101 } |
| 99 } | 102 } |
| 100 | 103 |
| 101 return true; | 104 return true; |
| 102 } | 105 } |
| 103 | 106 |
| 104 bool VaapiDrmPicture::Allocate(gfx::BufferFormat format) { | 107 bool VaapiDrmPicture::Allocate(gfx::BufferFormat format) { |
| 105 ui::OzonePlatform* platform = ui::OzonePlatform::GetInstance(); | 108 ui::OzonePlatform* platform = ui::OzonePlatform::GetInstance(); |
| 106 ui::SurfaceFactoryOzone* factory = platform->GetSurfaceFactoryOzone(); | 109 ui::SurfaceFactoryOzone* factory = platform->GetSurfaceFactoryOzone(); |
| 107 pixmap_ = factory->CreateNativePixmap(gfx::kNullAcceleratedWidget, size_, | 110 // TODO(dshwang): make it scanout when cros kernel supports NV12 overlay. |
| 108 format, gfx::BufferUsage::SCANOUT); | 111 // crbug.com/683347 |
|
gurchetansingh
2017/06/22 23:31:59
Shouldn't you be able to query drm plane resources
dshwang
2017/06/23 01:07:05
there is good news and bad news.
bad news: There i
gurchetansingh
2017/06/23 03:18:33
I don't understand. drmModeGetPlaneResources shou
dshwang
2017/06/23 23:25:14
Oh, that's good to know. It works. I'll make Clien
gurchetansingh
2017/06/24 01:50:48
If NV12 is not overlay-able yet, that's fine. Let
Daniele Castagna
2017/06/26 18:06:43
I'm not sure we want to dynamically pick the decod
dshwang
2017/06/28 02:08:34
In my opinion, we should choose NV12 always becaus
| |
| 112 pixmap_ = | |
| 113 factory->CreateNativePixmap(gfx::kNullAcceleratedWidget, size_, format, | |
| 114 gfx::BufferUsage::GPU_READ_CPU_READ_WRITE); | |
|
gurchetansingh
2017/06/22 23:31:59
What GBM use flags is the NV12 buffer allocated wi
dshwang
2017/06/23 01:07:05
gfx::BufferUsage::GPU_READ_CPU_READ_WRITE is conve
gurchetansingh
2017/06/23 03:18:33
That's incorrect. NV12 is Y-tiled in the upstream
dshwang
2017/06/23 23:25:14
Does "NV12 is Y-tiled in the upstream kernel" mean
gurchetansingh
2017/06/24 01:50:48
So the buffer is
1) imported into VAAPI,
2) a v
dshwang
2017/06/28 02:08:34
I could not reproduce glitch anymore after repo sy
| |
| 109 if (!pixmap_) { | 115 if (!pixmap_) { |
| 110 DVLOG(1) << "Failed allocating a pixmap"; | 116 DVLOG(1) << "Failed allocating a pixmap"; |
| 111 return false; | 117 return false; |
| 112 } | 118 } |
| 113 | 119 |
| 114 return Initialize(); | 120 return Initialize(); |
| 115 } | 121 } |
| 116 | 122 |
| 117 bool VaapiDrmPicture::ImportGpuMemoryBufferHandle( | 123 bool VaapiDrmPicture::ImportGpuMemoryBufferHandle( |
| 118 gfx::BufferFormat format, | 124 gfx::BufferFormat format, |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 130 | 136 |
| 131 return Initialize(); | 137 return Initialize(); |
| 132 } | 138 } |
| 133 | 139 |
| 134 bool VaapiDrmPicture::DownloadFromSurface( | 140 bool VaapiDrmPicture::DownloadFromSurface( |
| 135 const scoped_refptr<VASurface>& va_surface) { | 141 const scoped_refptr<VASurface>& va_surface) { |
| 136 return vaapi_wrapper_->BlitSurface(va_surface, va_surface_); | 142 return vaapi_wrapper_->BlitSurface(va_surface, va_surface_); |
| 137 } | 143 } |
| 138 | 144 |
| 139 bool VaapiDrmPicture::AllowOverlay() const { | 145 bool VaapiDrmPicture::AllowOverlay() const { |
| 140 return true; | 146 // TODO(dshwang): make it true when cros kernel supports NV12 overlay. |
|
gurchetansingh
2017/06/24 01:50:48
Should be a runtime decision based on plane resour
Daniele Castagna
2017/06/26 18:06:43
This is really just some metadata that ends up in
dshwang
2017/06/28 02:08:34
new patch set remove this change. as usage is chos
| |
| 147 // crbug.com/683347 | |
| 148 return false; | |
| 141 } | 149 } |
| 142 | 150 |
| 143 } // namespace media | 151 } // namespace media |
| OLD | NEW |