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

Unified Diff: content/browser/renderer_host/render_widget_host_view_android.cc

Issue 88033002: Add RGB565 Texture readback support in gl_helper (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Modified code as per the review comments. Created 7 years 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: content/browser/renderer_host/render_widget_host_view_android.cc
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc
index 6a9a341b24d9552fb9ec5d7c0893f7428d193015..1dd2083df51e6755c0abdf2e13b5aa6e9f4959da 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.cc
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -589,7 +589,18 @@ void RenderWidgetHostViewAndroid::CopyFromCompositingSurface(
callback.Run(false, SkBitmap());
return;
}
-
+ // Support format either for ARGB8888 and RGB565.
+ bool readback_config_rgb565 = content_view_core_->IsReadBackConfig565();
+ ImageTransportFactoryAndroid* factory =
+ ImageTransportFactoryAndroid::GetInstance();
+ GLHelper* gl_helper = factory->GetGLHelper();
+ if (!gl_helper)
+ return;
+ if(readback_config_rgb565 && !gl_helper->CanUseRgb565Readback()){
no sievers 2014/01/07 16:26:02 Can we check CanUseRgb565Readback() only once? It'
sivag 2014/01/09 14:51:50 Done.
+ LOG(ERROR) << "Readbackformat rgb565 not supported";
+ callback.Run(false, SkBitmap());
+ return;
+ }
const gfx::Display& display =
gfx::Screen::GetNativeScreen()->GetPrimaryDisplay();
float device_scale_factor = display.device_scale_factor();
@@ -605,7 +616,6 @@ void RenderWidgetHostViewAndroid::CopyFromCompositingSurface(
SynchronousCopyContents(src_subrect_in_pixel, dst_size_in_pixel, callback);
return;
}
-
scoped_ptr<cc::CopyOutputRequest> request;
if (src_subrect_in_pixel.size() == dst_size_in_pixel) {
request = cc::CopyOutputRequest::CreateBitmapRequest(base::Bind(
@@ -616,6 +626,7 @@ void RenderWidgetHostViewAndroid::CopyFromCompositingSurface(
request = cc::CopyOutputRequest::CreateRequest(base::Bind(
&RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult,
dst_size_in_pixel,
+ readback_config_rgb565,
callback));
}
request->set_area(src_subrect_in_pixel);
@@ -1315,6 +1326,7 @@ void RenderWidgetHostViewAndroid::OnLostResources() {
// static
void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult(
const gfx::Size& dst_size_in_pixel,
+ bool readback_config_rgb565,
const base::Callback<void(bool, const SkBitmap&)>& callback,
scoped_ptr<cc::CopyOutputResult> result) {
DCHECK(result->HasTexture());
@@ -1325,9 +1337,16 @@ void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult(
return;
scoped_ptr<SkBitmap> bitmap(new SkBitmap);
- bitmap->setConfig(SkBitmap::kARGB_8888_Config,
+ if(readback_config_rgb565){
+ bitmap->setConfig(SkBitmap::kRGB_565_Config,
no sievers 2014/01/07 16:26:02 nit: no need for if-else, can do 'readback_config_
sivag 2014/01/09 14:51:50 Done.
dst_size_in_pixel.width(), dst_size_in_pixel.height(),
0, kOpaque_SkAlphaType);
+ }
+ else{
+ bitmap->setConfig(SkBitmap::kARGB_8888_Config,
+ dst_size_in_pixel.width(), dst_size_in_pixel.height(),
no sievers 2014/01/07 16:26:02 nit: indent here and above
sivag 2014/01/09 14:51:50 Done.
+ 0, kOpaque_SkAlphaType);
+ }
if (!bitmap->allocPixels())
return;
@@ -1357,6 +1376,7 @@ void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult(
gfx::Rect(result->size()),
dst_size_in_pixel,
pixels,
+ readback_config_rgb565,
base::Bind(&CopyFromCompositingSurfaceFinished,
callback,
base::Passed(&release_callback),

Powered by Google App Engine
This is Rietveld 408576698