OLD | NEW |
---|---|
(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 | |
OLD | NEW |