| Index: remoting/client/jni/jni_frame_consumer.cc
|
| diff --git a/remoting/client/jni/jni_frame_consumer.cc b/remoting/client/jni/jni_frame_consumer.cc
|
| index 71c9b148d8d9b4cc74e90fe64e70aafcbde85c54..bb0bad4eefa0eb83589dad470e32450a7a454765 100644
|
| --- a/remoting/client/jni/jni_frame_consumer.cc
|
| +++ b/remoting/client/jni/jni_frame_consumer.cc
|
| @@ -14,6 +14,7 @@
|
| #include "remoting/client/jni/chromoting_jni_instance.h"
|
| #include "remoting/client/jni/chromoting_jni_runtime.h"
|
| #include "remoting/client/jni/jni_client.h"
|
| +#include "remoting/client/jni/jni_display_handler.h"
|
| #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h"
|
| #include "third_party/webrtc/modules/desktop_capture/desktop_region.h"
|
| #include "ui/gfx/android/java_bitmap.h"
|
| @@ -22,9 +23,9 @@ namespace remoting {
|
|
|
| class JniFrameConsumer::Renderer {
|
| public:
|
| - Renderer(ChromotingJniRuntime* jni_runtime, JniClient* jni_client) :
|
| - jni_runtime_(jni_runtime),
|
| - jni_client_(jni_client) {}
|
| + Renderer(ChromotingJniRuntime* jni_runtime,
|
| + base::WeakPtr<JniDisplayHandler> display)
|
| + : jni_runtime_(jni_runtime), display_handler_(display) {}
|
| ~Renderer() {
|
| DCHECK(jni_runtime_->display_task_runner()->BelongsToCurrentThread());
|
| }
|
| @@ -35,7 +36,7 @@ class JniFrameConsumer::Renderer {
|
| // Used to obtain task runner references and make calls to Java methods.
|
| ChromotingJniRuntime* jni_runtime_;
|
|
|
| - JniClient* jni_client_;
|
| + base::WeakPtr<JniDisplayHandler> display_handler_;
|
|
|
| // This global reference is required, instead of a local reference, so it
|
| // remains valid for the lifetime of |bitmap_| - gfx::JavaBitmap does not
|
| @@ -52,6 +53,9 @@ class JniFrameConsumer::Renderer {
|
| void JniFrameConsumer::Renderer::RenderFrame(
|
| std::unique_ptr<webrtc::DesktopFrame> frame) {
|
| DCHECK(jni_runtime_->display_task_runner()->BelongsToCurrentThread());
|
| + if (!display_handler_) {
|
| + return;
|
| + }
|
|
|
| if (!bitmap_ || bitmap_->size().width() != frame->size().width() ||
|
| bitmap_->size().height() != frame->size().height()) {
|
| @@ -61,11 +65,11 @@ void JniFrameConsumer::Renderer::RenderFrame(
|
| // |bitmap_| must be deleted before |bitmap_global_ref_| is released.
|
| bitmap_.reset();
|
| bitmap_global_ref_.Reset(
|
| - env,
|
| - jni_client_->NewBitmap(frame->size().width(), frame->size().height())
|
| - .obj());
|
| + env, display_handler_
|
| + ->NewBitmap(frame->size().width(), frame->size().height())
|
| + .obj());
|
| bitmap_.reset(new gfx::JavaBitmap(bitmap_global_ref_.obj()));
|
| - jni_client_->UpdateFrameBitmap(bitmap_global_ref_.obj());
|
| + display_handler_->UpdateFrameBitmap(bitmap_global_ref_);
|
| }
|
|
|
| // Copy pixels from |frame| into the Java Bitmap.
|
| @@ -84,13 +88,13 @@ void JniFrameConsumer::Renderer::RenderFrame(
|
| bitmap_->stride(), buffer_rect, i.rect());
|
| }
|
|
|
| - jni_client_->RedrawCanvas();
|
| + display_handler_->RedrawCanvas();
|
| }
|
|
|
| JniFrameConsumer::JniFrameConsumer(ChromotingJniRuntime* jni_runtime,
|
| - JniClient* jni_client)
|
| + base::WeakPtr<JniDisplayHandler> display)
|
| : jni_runtime_(jni_runtime),
|
| - renderer_(new Renderer(jni_runtime, jni_client)),
|
| + renderer_(new Renderer(jni_runtime, display)),
|
| weak_factory_(this) {}
|
|
|
| JniFrameConsumer::~JniFrameConsumer() {
|
|
|