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

Side by Side 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 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 unified diff | Download patch
« no previous file with comments | « AUTHORS ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/browser/renderer_host/render_widget_host_view_android.h" 5 #include "content/browser/renderer_host/render_widget_host_view_android.h"
6 6
7 #include <android/bitmap.h> 7 #include <android/bitmap.h>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 } 256 }
257 257
258 bool RenderWidgetHostViewAndroid::PopulateBitmapWithContents(jobject jbitmap) { 258 bool RenderWidgetHostViewAndroid::PopulateBitmapWithContents(jobject jbitmap) {
259 if (!CompositorImpl::IsInitialized() || 259 if (!CompositorImpl::IsInitialized() ||
260 texture_id_in_layer_ == 0 || 260 texture_id_in_layer_ == 0 ||
261 texture_size_in_layer_.IsEmpty()) 261 texture_size_in_layer_.IsEmpty())
262 return false; 262 return false;
263 263
264 gfx::JavaBitmap bitmap(jbitmap); 264 gfx::JavaBitmap bitmap(jbitmap);
265 265
266 // TODO(dtrainor): Eventually add support for multiple formats here. 266 DCHECK((bitmap.format() == ANDROID_BITMAP_FORMAT_RGBA_8888) ||
267 DCHECK(bitmap.format() == ANDROID_BITMAP_FORMAT_RGBA_8888); 267 (bitmap.format() == ANDROID_BITMAP_FORMAT_RGB_565));
268
269 SkBitmap rgba_bitmap;
270 void* jbitmap_buffer = NULL;
271 void* gl_read_pass_buffer = NULL;
272
273 const gfx::Rect& bitmap_rect = gfx::Rect(bitmap.size());
274 int bitmap_width = bitmap_rect.width();
275 int bitmap_height = bitmap_rect.height();
276 jbitmap_buffer = reinterpret_cast<void*> (bitmap.pixels());
277
278 switch (bitmap.format()) {
279 case ANDROID_BITMAP_FORMAT_RGBA_8888:
280 gl_read_pass_buffer = jbitmap_buffer;
281 break;
282 case ANDROID_BITMAP_FORMAT_RGB_565:
283 rgba_bitmap.setConfig(SkBitmap::kARGB_8888_Config,
284 bitmap_width,
285 bitmap_height);
286 rgba_bitmap.allocPixels();
287 gl_read_pass_buffer = rgba_bitmap.getPixels();
288 break;
289 default:
290 NOTREACHED();
291 break;
292 }
268 293
269 GLHelper* helper = ImageTransportFactoryAndroid::GetInstance()->GetGLHelper(); 294 GLHelper* helper = ImageTransportFactoryAndroid::GetInstance()->GetGLHelper();
270 295
271 blink::WebGLId texture = helper->CopyAndScaleTexture( 296 blink::WebGLId texture = helper->CopyAndScaleTexture(
272 texture_id_in_layer_, 297 texture_id_in_layer_,
273 texture_size_in_layer_, 298 texture_size_in_layer_,
274 bitmap.size(), 299 bitmap.size(),
275 true, 300 true,
276 GLHelper::SCALER_QUALITY_FAST); 301 GLHelper::SCALER_QUALITY_FAST);
277 if (texture == 0) 302 if (texture == 0)
278 return false; 303 return false;
279 304
280 helper->ReadbackTextureSync(texture, 305 helper->ReadbackTextureSync(texture,
281 gfx::Rect(bitmap.size()), 306 gfx::Rect(bitmap.size()),
282 static_cast<unsigned char*> (bitmap.pixels())); 307 static_cast<unsigned char*> (gl_read_pass_buffer));
283 308
284 blink::WebGraphicsContext3D* context = 309 blink::WebGraphicsContext3D* context =
285 ImageTransportFactoryAndroid::GetInstance()->GetContext3D(); 310 ImageTransportFactoryAndroid::GetInstance()->GetContext3D();
286 context->deleteTexture(texture); 311 context->deleteTexture(texture);
287 312
313 if(bitmap.format() == ANDROID_BITMAP_FORMAT_RGB_565){
314 SkBitmap rgb565_bitmap;
315 rgb565_bitmap.setConfig(SkBitmap::kRGB_565_Config,
316 bitmap_width,
317 bitmap_height, 0);
318 rgb565_bitmap.setPixels(jbitmap_buffer);
319 SkCanvas rgb565_canvas(rgb565_bitmap);
320 SkRect draw_rect = SkRect::MakeXYWH(SkIntToScalar(0),
321 SkIntToScalar(0),
322 SkIntToScalar(bitmap_width),
323 SkIntToScalar(bitmap_height));
324
325 rgb565_canvas.drawBitmapRectToRect(rgba_bitmap,
326 &draw_rect,
no sievers 2013/11/26 21:45:27 Isn't the point of this to reduce the readback siz
327 draw_rect,
328 NULL);
329 }
330
288 return true; 331 return true;
289 } 332 }
290 333
291 bool RenderWidgetHostViewAndroid::HasValidFrame() const { 334 bool RenderWidgetHostViewAndroid::HasValidFrame() const {
292 if (!content_view_core_) 335 if (!content_view_core_)
293 return false; 336 return false;
294 if (texture_size_in_layer_.IsEmpty()) 337 if (texture_size_in_layer_.IsEmpty())
295 return false; 338 return false;
296 339
297 if (UsingDelegatedRenderer()) { 340 if (UsingDelegatedRenderer()) {
(...skipping 1078 matching lines...) Expand 10 before | Expand all | Expand 10 after
1376 // RenderWidgetHostView, public: 1419 // RenderWidgetHostView, public:
1377 1420
1378 // static 1421 // static
1379 RenderWidgetHostView* 1422 RenderWidgetHostView*
1380 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { 1423 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) {
1381 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); 1424 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget);
1382 return new RenderWidgetHostViewAndroid(rwhi, NULL); 1425 return new RenderWidgetHostViewAndroid(rwhi, NULL);
1383 } 1426 }
1384 1427
1385 } // namespace content 1428 } // namespace content
OLDNEW
« no previous file with comments | « AUTHORS ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698