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

Side by Side Diff: remoting/client/shared_frame_video_renderer.cc

Issue 2156713002: [Chromoting] Implement DualBufferFrameConsumer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 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
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "remoting/client/shared_frame_video_renderer.h"
6
7 #include "base/bind.h"
8 #include "base/bind_helpers.h"
9 #include "base/location.h"
10 #include "base/memory/ptr_util.h"
11 #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h"
12 #include "third_party/webrtc/modules/desktop_capture/shared_desktop_frame.h"
13
14 namespace remoting {
15
16 SharedFrameVideoRenderer::SharedFrameVideoRenderer(
17 base::Callback<void(std::unique_ptr<webrtc::DesktopFrame>)> callback,
18 scoped_refptr<base::SingleThreadTaskRunner> task_runner,
19 protocol::FrameConsumer::PixelFormat format)
20 : callback_(callback),
21 task_runner_(task_runner),
22 pixel_format_(format),
23 weak_factory_(this) {
24 thread_checker_.DetachFromThread();
25 }
26
27 SharedFrameVideoRenderer::~SharedFrameVideoRenderer() {
28 DCHECK(thread_checker_.CalledOnValidThread());
29 }
30
31
32 void SharedFrameVideoRenderer::SetUnderlyingVideoRenderer(
33 std::unique_ptr<protocol::VideoRenderer> renderer) {
34 underlying_video_renderer_ = std::move(renderer);
35 }
36
37 bool SharedFrameVideoRenderer::Initialize(
38 const ClientContext& client_context,
39 protocol::FrameStatsConsumer* perf_tracker) {
40 DCHECK(thread_checker_.CalledOnValidThread());
41 return underlying_video_renderer_->Initialize(client_context, perf_tracker);
42 }
43
44 void SharedFrameVideoRenderer::OnSessionConfig(
45 const protocol::SessionConfig& config) {
46 DCHECK(thread_checker_.CalledOnValidThread());
47 underlying_video_renderer_->OnSessionConfig(config);
48 }
49
50 protocol::VideoStub* SharedFrameVideoRenderer::GetVideoStub() {
51 DCHECK(thread_checker_.CalledOnValidThread());
52 return underlying_video_renderer_->GetVideoStub();
53 }
54
55 protocol::FrameConsumer* SharedFrameVideoRenderer::GetFrameConsumer() {
56 DCHECK(thread_checker_.CalledOnValidThread());
57 return underlying_video_renderer_->GetFrameConsumer();
58 }
59
60 protocol::FrameStatsConsumer*
61 SharedFrameVideoRenderer::GetFrameStatsConsumer() {
62 DCHECK(thread_checker_.CalledOnValidThread());
63 return underlying_video_renderer_->GetFrameStatsConsumer();
Sergey Ulanov 2016/07/15 22:14:47 How will this class get any frames, if you return
Yuwei 2016/07/15 22:55:32 I think you are talking about GetFrameConsumer. I'
Yuwei 2016/07/18 18:53:47 Obsolete.
Sergey Ulanov 2016/07/20 18:39:26 I see. Then this class needs to be just a FrameCon
Yuwei 2016/07/20 19:12:43 Yes. It has been renamed...
64 }
65
66 std::unique_ptr<webrtc::DesktopFrame> SharedFrameVideoRenderer::AllocateFrame(
67 const webrtc::DesktopSize& size) {
68 DCHECK(thread_checker_.CalledOnValidThread());
69 if (!shared_frame_ || !shared_frame_->size().equals(size)) {
70 shared_frame_ = webrtc::SharedDesktopFrame::Wrap(
71 base::WrapUnique(new webrtc::BasicDesktopFrame(size)));
72 }
73 return shared_frame_->Share();
74 }
75
76 void SharedFrameVideoRenderer::DrawFrame(
77 std::unique_ptr<webrtc::DesktopFrame> frame,
78 const base::Closure& done) {
79 DCHECK(thread_checker_.CalledOnValidThread());
80 if (!task_runner_) {
81 callback_.Run(std::move(frame));
82 return;
83 }
84 task_runner_->PostTaskAndReply(
85 FROM_HERE, base::Bind(callback_, base::Passed(&frame)),
86 base::Bind(&SharedFrameVideoRenderer::OnFrameRendered,
87 weak_factory_.GetWeakPtr(), done));
88 }
89
90 protocol::FrameConsumer::PixelFormat
91 SharedFrameVideoRenderer::GetPixelFormat() {
92 return pixel_format_;
93 }
94
95 void SharedFrameVideoRenderer::OnFrameRendered(const base::Closure& done) {
96 DCHECK(thread_checker_.CalledOnValidThread());
97 if (done) {
98 done.Run();
99 }
100 }
101
102 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698