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

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

Issue 2101833002: [Remoting Android] DisplayUpdaterFactory cleanups (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Build Fix again 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
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/software_video_renderer.h" 5 #include "remoting/client/software_video_renderer.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback.h" 10 #include "base/callback.h"
11 #include "base/callback_helpers.h" 11 #include "base/callback_helpers.h"
12 #include "base/location.h" 12 #include "base/location.h"
13 #include "base/logging.h" 13 #include "base/logging.h"
14 #include "base/memory/ptr_util.h" 14 #include "base/memory/ptr_util.h"
15 #include "base/single_thread_task_runner.h" 15 #include "base/single_thread_task_runner.h"
16 #include "base/task_runner_util.h" 16 #include "base/task_runner_util.h"
17 #include "remoting/base/util.h" 17 #include "remoting/base/util.h"
18 #include "remoting/client/client_context.h"
18 #include "remoting/codec/video_decoder.h" 19 #include "remoting/codec/video_decoder.h"
19 #include "remoting/codec/video_decoder_verbatim.h" 20 #include "remoting/codec/video_decoder_verbatim.h"
20 #include "remoting/codec/video_decoder_vpx.h" 21 #include "remoting/codec/video_decoder_vpx.h"
21 #include "remoting/proto/video.pb.h" 22 #include "remoting/proto/video.pb.h"
22 #include "remoting/protocol/frame_consumer.h" 23 #include "remoting/protocol/frame_consumer.h"
23 #include "remoting/protocol/frame_stats.h" 24 #include "remoting/protocol/frame_stats.h"
24 #include "remoting/protocol/performance_tracker.h" 25 #include "remoting/protocol/performance_tracker.h"
25 #include "remoting/protocol/session_config.h" 26 #include "remoting/protocol/session_config.h"
26 #include "third_party/libyuv/include/libyuv/convert_argb.h" 27 #include "third_party/libyuv/include/libyuv/convert_argb.h"
27 #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h" 28 #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h"
28 29
29 using remoting::protocol::ChannelConfig; 30 using remoting::protocol::ChannelConfig;
30 using remoting::protocol::SessionConfig; 31 using remoting::protocol::SessionConfig;
31 32
32 namespace remoting { 33 namespace remoting {
33 34
34 namespace { 35 namespace {
35 36
36 std::unique_ptr<webrtc::DesktopFrame> DoDecodeFrame( 37 std::unique_ptr<webrtc::DesktopFrame> DoDecodeFrame(
37 VideoDecoder* decoder, 38 VideoDecoder* decoder,
38 std::unique_ptr<VideoPacket> packet, 39 std::unique_ptr<VideoPacket> packet,
39 std::unique_ptr<webrtc::DesktopFrame> frame) { 40 std::unique_ptr<webrtc::DesktopFrame> frame) {
40 if (!decoder->DecodePacket(*packet, frame.get())) 41 if (!decoder->DecodePacket(*packet, frame.get()))
41 frame.reset(); 42 frame.reset();
42 return frame; 43 return frame;
43 } 44 }
44 45
45 } // namespace 46 } // namespace
46 47
48 SoftwareVideoRenderer::SoftwareVideoRenderer(protocol::FrameConsumer* consumer)
49 : consumer_(consumer),
50 weak_factory_(this) {
51 thread_checker_.DetachFromThread();
Sergey Ulanov 2016/06/29 23:02:12 Why do you need this?
Yuwei 2016/06/29 23:38:02 I think after adding Initialize, the renderer can
52 }
53
47 SoftwareVideoRenderer::SoftwareVideoRenderer( 54 SoftwareVideoRenderer::SoftwareVideoRenderer(
48 scoped_refptr<base::SingleThreadTaskRunner> decode_task_runner, 55 scoped_refptr<base::SingleThreadTaskRunner> decode_task_runner,
49 protocol::FrameConsumer* consumer, 56 protocol::FrameConsumer* consumer,
50 protocol::PerformanceTracker* perf_tracker) 57 protocol::PerformanceTracker* perf_tracker)
51 : decode_task_runner_(decode_task_runner), 58 : decode_task_runner_(decode_task_runner),
52 consumer_(consumer), 59 consumer_(consumer),
53 perf_tracker_(perf_tracker), 60 perf_tracker_(perf_tracker),
54 weak_factory_(this) {} 61 weak_factory_(this) {}
55 62
56 SoftwareVideoRenderer::~SoftwareVideoRenderer() { 63 SoftwareVideoRenderer::~SoftwareVideoRenderer() {
57 if (decoder_) 64 if (decoder_)
58 decode_task_runner_->DeleteSoon(FROM_HERE, decoder_.release()); 65 decode_task_runner_->DeleteSoon(FROM_HERE, decoder_.release());
59 } 66 }
60 67
68 bool SoftwareVideoRenderer::Initialize(
69 const ClientContext& client_context,
70 protocol::PerformanceTracker* perf_tracker) {
71 DCHECK(thread_checker_.CalledOnValidThread());
72 decode_task_runner_ = client_context.decode_task_runner();
73 perf_tracker_ = perf_tracker;
74 return true;
75 }
76
61 void SoftwareVideoRenderer::OnSessionConfig( 77 void SoftwareVideoRenderer::OnSessionConfig(
62 const protocol::SessionConfig& config) { 78 const protocol::SessionConfig& config) {
63 DCHECK(thread_checker_.CalledOnValidThread()); 79 DCHECK(thread_checker_.CalledOnValidThread());
64 80
65 // Initialize decoder based on the selected codec. 81 // Initialize decoder based on the selected codec.
66 ChannelConfig::Codec codec = config.video_config().codec; 82 ChannelConfig::Codec codec = config.video_config().codec;
67 if (codec == ChannelConfig::CODEC_VERBATIM) { 83 if (codec == ChannelConfig::CODEC_VERBATIM) {
68 decoder_.reset(new VideoDecoderVerbatim()); 84 decoder_.reset(new VideoDecoderVerbatim());
69 } else if (codec == ChannelConfig::CODEC_VP8) { 85 } else if (codec == ChannelConfig::CODEC_VP8) {
70 decoder_ = VideoDecoderVpx::CreateForVP8(); 86 decoder_ = VideoDecoderVpx::CreateForVP8();
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 183
168 stats->time_rendered = base::TimeTicks::Now(); 184 stats->time_rendered = base::TimeTicks::Now();
169 if (perf_tracker_) 185 if (perf_tracker_)
170 perf_tracker_->RecordVideoFrameStats(*stats); 186 perf_tracker_->RecordVideoFrameStats(*stats);
171 187
172 if (!done.is_null()) 188 if (!done.is_null())
173 done.Run(); 189 done.Run();
174 } 190 }
175 191
176 } // namespace remoting 192 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698