Chromium Code Reviews| 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 |