Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(555)

Unified Diff: cc/resources/resource_provider.cc

Issue 2122573003: media: replace LUMINANCE_F16 by RG_88 for 9/10-bit h264 videos Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: add pixel tests for RG88 and resolve hubbe's comments Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: cc/resources/resource_provider.cc
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc
index 49dae1d6ae988284713422c430f0f1e8a2f814e8..b7cde71a2e1c8b19af34570a8fd8a576e8376522 100644
--- a/cc/resources/resource_provider.cc
+++ b/cc/resources/resource_provider.cc
@@ -31,6 +31,7 @@
#include "gpu/command_buffer/client/context_support.h"
#include "gpu/command_buffer/client/gles2_interface.h"
#include "gpu/command_buffer/client/gpu_memory_buffer_manager.h"
+#include "media/base/media_switches.h"
#include "skia/ext/texture_handle.h"
#include "third_party/khronos/GLES2/gl2.h"
#include "third_party/khronos/GLES2/gl2ext.h"
@@ -92,6 +93,7 @@ GLenum TextureToStorageFormat(ResourceFormat format) {
case RGB_565:
case ETC1:
case RED_8:
+ case RG_88:
case LUMINANCE_F16:
NOTREACHED();
break;
@@ -112,6 +114,7 @@ bool IsFormatSupportedForStorage(ResourceFormat format, bool use_bgra) {
case RGB_565:
case ETC1:
case RED_8:
+ case RG_88:
case LUMINANCE_F16:
return false;
}
@@ -456,6 +459,10 @@ ResourceProvider::ResourceProvider(
yuv_resource_format_ = caps.texture_rg ? RED_8 : LUMINANCE_8;
yuv_highbit_resource_format_ =
caps.texture_half_float_linear ? LUMINANCE_F16 : yuv_resource_format_;
+ if (base::FeatureList::IsEnabled(media::kUseRGTexture) ||
+ !caps.texture_half_float_linear) {
+ yuv_highbit_resource_format_ = caps.texture_rg ? RG_88 : RGBA_8888;
+ }
}
use_sync_query_ = caps.sync_query;
@@ -523,6 +530,7 @@ bool ResourceProvider::IsResourceFormatSupported(ResourceFormat format) const {
case ETC1:
return caps.texture_format_etc1;
case RED_8:
+ case RG_88:
return caps.texture_rg;
case LUMINANCE_F16:
return caps.texture_half_float_linear;
@@ -656,6 +664,7 @@ ResourceId ResourceProvider::CreateBitmap(const gfx::Size& size,
ResourceId ResourceProvider::CreateResourceFromTextureMailbox(
const TextureMailbox& mailbox,
+ ResourceFormat format,
std::unique_ptr<SingleReleaseCallbackImpl> release_callback_impl,
bool read_lock_fences_enabled) {
DCHECK(thread_checker_.CalledOnValidThread());
@@ -665,11 +674,10 @@ ResourceId ResourceProvider::CreateResourceFromTextureMailbox(
Resource* resource = nullptr;
if (mailbox.IsTexture()) {
resource = InsertResource(
- id,
- Resource(0, mailbox.size_in_pixels(), Resource::EXTERNAL,
- mailbox.target(),
- mailbox.nearest_neighbor() ? GL_NEAREST : GL_LINEAR,
- TEXTURE_HINT_IMMUTABLE, RESOURCE_TYPE_GL_TEXTURE, RGBA_8888));
+ id, Resource(0, mailbox.size_in_pixels(), Resource::EXTERNAL,
+ mailbox.target(),
+ mailbox.nearest_neighbor() ? GL_NEAREST : GL_LINEAR,
+ TEXTURE_HINT_IMMUTABLE, RESOURCE_TYPE_GL_TEXTURE, format));
} else {
DCHECK(mailbox.IsSharedMemory());
SharedBitmap* shared_bitmap = mailbox.shared_bitmap();
@@ -678,6 +686,7 @@ ResourceId ResourceProvider::CreateResourceFromTextureMailbox(
resource = InsertResource(
id, Resource(pixels, shared_bitmap, mailbox.size_in_pixels(),
Resource::EXTERNAL, GL_LINEAR));
+ resource->format = format;
}
resource->allocated = true;
resource->set_mailbox(mailbox);
@@ -692,6 +701,15 @@ ResourceId ResourceProvider::CreateResourceFromTextureMailbox(
return id;
}
+// TODO(dswang): remove this method. crbug.com/624436
+ResourceId ResourceProvider::CreateResourceFromTextureMailbox(
+ const TextureMailbox& mailbox,
+ std::unique_ptr<SingleReleaseCallbackImpl> release_callback_impl,
+ bool read_lock_fences_enabled) {
+ return CreateResourceFromTextureMailbox(
+ mailbox, RGBA_8888, std::move(release_callback_impl), false);
+}
+
ResourceId ResourceProvider::CreateResourceFromTextureMailbox(
const TextureMailbox& mailbox,
std::unique_ptr<SingleReleaseCallbackImpl> release_callback_impl) {
@@ -825,6 +843,10 @@ GLenum ResourceProvider::GetResourceTextureTarget(ResourceId id) {
return GetResource(id)->target;
}
+ResourceFormat ResourceProvider::GetResourceFormat(ResourceId id) {
+ return GetResource(id)->format;
+}
+
bool ResourceProvider::IsImmutable(ResourceId id) {
if (IsGpuResourceType(default_resource_type_)) {
return GetTextureHint(id) == TEXTURE_HINT_IMMUTABLE;

Powered by Google App Engine
This is Rietveld 408576698