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

Side by Side Diff: remoting/client/jni/jni_frame_consumer.cc

Issue 1864213002: Convert //remoting to use std::unique_ptr (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Mac IWYU Created 4 years, 8 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "remoting/client/jni/jni_frame_consumer.h" 5 #include "remoting/client/jni/jni_frame_consumer.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include "base/android/jni_android.h" 9 #include "base/android/jni_android.h"
10 #include "base/android/scoped_java_ref.h" 10 #include "base/android/scoped_java_ref.h"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/memory/ptr_util.h"
12 #include "remoting/base/util.h" 13 #include "remoting/base/util.h"
13 #include "remoting/client/jni/chromoting_jni_instance.h" 14 #include "remoting/client/jni/chromoting_jni_instance.h"
14 #include "remoting/client/jni/chromoting_jni_runtime.h" 15 #include "remoting/client/jni/chromoting_jni_runtime.h"
15 #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h" 16 #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h"
16 #include "third_party/webrtc/modules/desktop_capture/desktop_region.h" 17 #include "third_party/webrtc/modules/desktop_capture/desktop_region.h"
17 #include "ui/gfx/android/java_bitmap.h" 18 #include "ui/gfx/android/java_bitmap.h"
18 19
19 namespace remoting { 20 namespace remoting {
20 21
21 class JniFrameConsumer::Renderer { 22 class JniFrameConsumer::Renderer {
22 public: 23 public:
23 Renderer(ChromotingJniRuntime* jni_runtime) : jni_runtime_(jni_runtime) {} 24 Renderer(ChromotingJniRuntime* jni_runtime) : jni_runtime_(jni_runtime) {}
24 ~Renderer() { 25 ~Renderer() {
25 DCHECK(jni_runtime_->display_task_runner()->BelongsToCurrentThread()); 26 DCHECK(jni_runtime_->display_task_runner()->BelongsToCurrentThread());
26 } 27 }
27 28
28 void RenderFrame(scoped_ptr<webrtc::DesktopFrame> frame); 29 void RenderFrame(std::unique_ptr<webrtc::DesktopFrame> frame);
29 30
30 private: 31 private:
31 // Used to obtain task runner references and make calls to Java methods. 32 // Used to obtain task runner references and make calls to Java methods.
32 ChromotingJniRuntime* jni_runtime_; 33 ChromotingJniRuntime* jni_runtime_;
33 34
34 // This global reference is required, instead of a local reference, so it 35 // This global reference is required, instead of a local reference, so it
35 // remains valid for the lifetime of |bitmap_| - gfx::JavaBitmap does not 36 // remains valid for the lifetime of |bitmap_| - gfx::JavaBitmap does not
36 // create its own global reference internally. And this global ref must be 37 // create its own global reference internally. And this global ref must be
37 // destroyed (released) after |bitmap_| is destroyed. 38 // destroyed (released) after |bitmap_| is destroyed.
38 base::android::ScopedJavaGlobalRef<jobject> bitmap_global_ref_; 39 base::android::ScopedJavaGlobalRef<jobject> bitmap_global_ref_;
39 40
40 // Reference to the frame bitmap that is passed to Java when the frame is 41 // Reference to the frame bitmap that is passed to Java when the frame is
41 // allocated. This provides easy access to the underlying pixels. 42 // allocated. This provides easy access to the underlying pixels.
42 scoped_ptr<gfx::JavaBitmap> bitmap_; 43 std::unique_ptr<gfx::JavaBitmap> bitmap_;
43 }; 44 };
44 45
45 // Function called on the display thread to render the frame. 46 // Function called on the display thread to render the frame.
46 void JniFrameConsumer::Renderer::RenderFrame( 47 void JniFrameConsumer::Renderer::RenderFrame(
47 scoped_ptr<webrtc::DesktopFrame> frame) { 48 std::unique_ptr<webrtc::DesktopFrame> frame) {
48 DCHECK(jni_runtime_->display_task_runner()->BelongsToCurrentThread()); 49 DCHECK(jni_runtime_->display_task_runner()->BelongsToCurrentThread());
49 50
50 if (!bitmap_ || bitmap_->size().width() != frame->size().width() || 51 if (!bitmap_ || bitmap_->size().width() != frame->size().width() ||
51 bitmap_->size().height() != frame->size().height()) { 52 bitmap_->size().height() != frame->size().height()) {
52 // Allocate a new Bitmap, store references here, and pass it to Java. 53 // Allocate a new Bitmap, store references here, and pass it to Java.
53 JNIEnv* env = base::android::AttachCurrentThread(); 54 JNIEnv* env = base::android::AttachCurrentThread();
54 55
55 // |bitmap_| must be deleted before |bitmap_global_ref_| is released. 56 // |bitmap_| must be deleted before |bitmap_global_ref_| is released.
56 bitmap_.reset(); 57 bitmap_.reset();
57 bitmap_global_ref_.Reset( 58 bitmap_global_ref_.Reset(
(...skipping 26 matching lines...) Expand all
84 JniFrameConsumer::JniFrameConsumer(ChromotingJniRuntime* jni_runtime) 85 JniFrameConsumer::JniFrameConsumer(ChromotingJniRuntime* jni_runtime)
85 : jni_runtime_(jni_runtime), 86 : jni_runtime_(jni_runtime),
86 renderer_(new Renderer(jni_runtime)), 87 renderer_(new Renderer(jni_runtime)),
87 weak_factory_(this) {} 88 weak_factory_(this) {}
88 89
89 JniFrameConsumer::~JniFrameConsumer() { 90 JniFrameConsumer::~JniFrameConsumer() {
90 jni_runtime_->display_task_runner()->DeleteSoon(FROM_HERE, 91 jni_runtime_->display_task_runner()->DeleteSoon(FROM_HERE,
91 renderer_.release()); 92 renderer_.release());
92 } 93 }
93 94
94 scoped_ptr<webrtc::DesktopFrame> JniFrameConsumer::AllocateFrame( 95 std::unique_ptr<webrtc::DesktopFrame> JniFrameConsumer::AllocateFrame(
95 const webrtc::DesktopSize& size) { 96 const webrtc::DesktopSize& size) {
96 return make_scoped_ptr(new webrtc::BasicDesktopFrame(size)); 97 return base::WrapUnique(new webrtc::BasicDesktopFrame(size));
97 } 98 }
98 99
99 void JniFrameConsumer::DrawFrame(scoped_ptr<webrtc::DesktopFrame> frame, 100 void JniFrameConsumer::DrawFrame(std::unique_ptr<webrtc::DesktopFrame> frame,
100 const base::Closure& done) { 101 const base::Closure& done) {
101 DCHECK(jni_runtime_->network_task_runner()->BelongsToCurrentThread()); 102 DCHECK(jni_runtime_->network_task_runner()->BelongsToCurrentThread());
102 103
103 jni_runtime_->display_task_runner()->PostTaskAndReply( 104 jni_runtime_->display_task_runner()->PostTaskAndReply(
104 FROM_HERE, 105 FROM_HERE,
105 base::Bind(&Renderer::RenderFrame, base::Unretained(renderer_.get()), 106 base::Bind(&Renderer::RenderFrame, base::Unretained(renderer_.get()),
106 base::Passed(&frame)), 107 base::Passed(&frame)),
107 base::Bind(&JniFrameConsumer::OnFrameRendered, weak_factory_.GetWeakPtr(), 108 base::Bind(&JniFrameConsumer::OnFrameRendered, weak_factory_.GetWeakPtr(),
108 done)); 109 done));
109 } 110 }
110 111
111 void JniFrameConsumer::OnFrameRendered(const base::Closure& done) { 112 void JniFrameConsumer::OnFrameRendered(const base::Closure& done) {
112 DCHECK(jni_runtime_->network_task_runner()->BelongsToCurrentThread()); 113 DCHECK(jni_runtime_->network_task_runner()->BelongsToCurrentThread());
113 114
114 if (!done.is_null()) 115 if (!done.is_null())
115 done.Run(); 116 done.Run();
116 } 117 }
117 118
118 protocol::FrameConsumer::PixelFormat JniFrameConsumer::GetPixelFormat() { 119 protocol::FrameConsumer::PixelFormat JniFrameConsumer::GetPixelFormat() {
119 return FORMAT_RGBA; 120 return FORMAT_RGBA;
120 } 121 }
121 122
122 } // namespace remoting 123 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/client/jni/jni_frame_consumer.h ('k') | remoting/client/normalizing_input_filter_cros_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698