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

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: Created 7 years, 1 month 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
« no previous file with comments | « AUTHORS ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 fe64d9240c1ca08a6ab3fbb4bb6cd3e3cea82514..e80a1dfade75265b3cb5f59373a03e0b6ea8f82f 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.cc
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -263,8 +263,33 @@ bool RenderWidgetHostViewAndroid::PopulateBitmapWithContents(jobject jbitmap) {
gfx::JavaBitmap bitmap(jbitmap);
- // TODO(dtrainor): Eventually add support for multiple formats here.
- DCHECK(bitmap.format() == ANDROID_BITMAP_FORMAT_RGBA_8888);
+ DCHECK((bitmap.format() == ANDROID_BITMAP_FORMAT_RGBA_8888) ||
+ (bitmap.format() == ANDROID_BITMAP_FORMAT_RGB_565));
+
+ SkBitmap rgba_bitmap;
+ void* jbitmap_buffer = NULL;
+ void* gl_read_pass_buffer = NULL;
+
+ const gfx::Rect& bitmap_rect = gfx::Rect(bitmap.size());
+ int bitmap_width = bitmap_rect.width();
+ int bitmap_height = bitmap_rect.height();
+ jbitmap_buffer = reinterpret_cast<void*> (bitmap.pixels());
+
+ switch (bitmap.format()) {
+ case ANDROID_BITMAP_FORMAT_RGBA_8888:
+ gl_read_pass_buffer = jbitmap_buffer;
+ break;
+ case ANDROID_BITMAP_FORMAT_RGB_565:
+ rgba_bitmap.setConfig(SkBitmap::kARGB_8888_Config,
+ bitmap_width,
+ bitmap_height);
+ rgba_bitmap.allocPixels();
+ gl_read_pass_buffer = rgba_bitmap.getPixels();
+ break;
+ default:
+ NOTREACHED();
+ break;
+ }
GLHelper* helper = ImageTransportFactoryAndroid::GetInstance()->GetGLHelper();
@@ -278,13 +303,31 @@ bool RenderWidgetHostViewAndroid::PopulateBitmapWithContents(jobject jbitmap) {
return false;
helper->ReadbackTextureSync(texture,
- gfx::Rect(bitmap.size()),
- static_cast<unsigned char*> (bitmap.pixels()));
+ gfx::Rect(bitmap.size()),
+ static_cast<unsigned char*> (gl_read_pass_buffer));
blink::WebGraphicsContext3D* context =
ImageTransportFactoryAndroid::GetInstance()->GetContext3D();
context->deleteTexture(texture);
+ if(bitmap.format() == ANDROID_BITMAP_FORMAT_RGB_565){
+ SkBitmap rgb565_bitmap;
+ rgb565_bitmap.setConfig(SkBitmap::kRGB_565_Config,
+ bitmap_width,
+ bitmap_height, 0);
+ rgb565_bitmap.setPixels(jbitmap_buffer);
+ SkCanvas rgb565_canvas(rgb565_bitmap);
+ SkRect draw_rect = SkRect::MakeXYWH(SkIntToScalar(0),
+ SkIntToScalar(0),
+ SkIntToScalar(bitmap_width),
+ SkIntToScalar(bitmap_height));
+
+ rgb565_canvas.drawBitmapRectToRect(rgba_bitmap,
+ &draw_rect,
no sievers 2013/11/26 21:45:27 Isn't the point of this to reduce the readback siz
+ draw_rect,
+ NULL);
+ }
+
return true;
}
« no previous file with comments | « AUTHORS ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698