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 1298863003: Remove VideoDecoder::Initialize(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 4 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
« no previous file with comments | « no previous file | remoting/codec/codec_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <list> 7 #include <list>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 19 matching lines...) Expand all
30 // This class wraps a VideoDecoder and byte-swaps the pixels for compatibility 30 // This class wraps a VideoDecoder and byte-swaps the pixels for compatibility
31 // with the android.graphics.Bitmap class. 31 // with the android.graphics.Bitmap class.
32 // TODO(lambroslambrou): Refactor so that the VideoDecoder produces data 32 // TODO(lambroslambrou): Refactor so that the VideoDecoder produces data
33 // in the right byte-order, instead of swapping it here. 33 // in the right byte-order, instead of swapping it here.
34 class RgbToBgrVideoDecoderFilter : public VideoDecoder { 34 class RgbToBgrVideoDecoderFilter : public VideoDecoder {
35 public: 35 public:
36 RgbToBgrVideoDecoderFilter(scoped_ptr<VideoDecoder> parent) 36 RgbToBgrVideoDecoderFilter(scoped_ptr<VideoDecoder> parent)
37 : parent_(parent.Pass()) { 37 : parent_(parent.Pass()) {
38 } 38 }
39 39
40 void Initialize(const webrtc::DesktopSize& screen_size) override {
41 parent_->Initialize(screen_size);
42 }
43
44 bool DecodePacket(const VideoPacket& packet) override { 40 bool DecodePacket(const VideoPacket& packet) override {
45 return parent_->DecodePacket(packet); 41 return parent_->DecodePacket(packet);
46 } 42 }
47 43
48 void Invalidate(const webrtc::DesktopSize& view_size, 44 void Invalidate(const webrtc::DesktopSize& view_size,
49 const webrtc::DesktopRegion& region) override { 45 const webrtc::DesktopRegion& region) override {
50 return parent_->Invalidate(view_size, region); 46 return parent_->Invalidate(view_size, region);
51 } 47 }
52 48
53 void RenderFrame(const webrtc::DesktopSize& view_size, 49 void RenderFrame(const webrtc::DesktopSize& view_size,
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 scoped_ptr<VideoDecoder> wrapper( 154 scoped_ptr<VideoDecoder> wrapper(
159 new RgbToBgrVideoDecoderFilter(decoder_.Pass())); 155 new RgbToBgrVideoDecoderFilter(decoder_.Pass()));
160 decoder_ = wrapper.Pass(); 156 decoder_ = wrapper.Pass();
161 } 157 }
162 } 158 }
163 159
164 void SoftwareVideoRenderer::Core::DecodePacket(scoped_ptr<VideoPacket> packet, 160 void SoftwareVideoRenderer::Core::DecodePacket(scoped_ptr<VideoPacket> packet,
165 const base::Closure& done) { 161 const base::Closure& done) {
166 DCHECK(decode_task_runner_->BelongsToCurrentThread()); 162 DCHECK(decode_task_runner_->BelongsToCurrentThread());
167 163
168 bool decoder_needs_reset = false;
169 bool notify_size_or_dpi_change = false; 164 bool notify_size_or_dpi_change = false;
170 165
171 // If the packet includes screen size or DPI information, store them. 166 // If the packet includes screen size or DPI information, store them.
172 if (packet->format().has_screen_width() && 167 if (packet->format().has_screen_width() &&
173 packet->format().has_screen_height()) { 168 packet->format().has_screen_height()) {
174 webrtc::DesktopSize source_size(packet->format().screen_width(), 169 webrtc::DesktopSize source_size(packet->format().screen_width(),
175 packet->format().screen_height()); 170 packet->format().screen_height());
176 if (!source_size_.equals(source_size)) { 171 if (!source_size_.equals(source_size)) {
177 source_size_ = source_size; 172 source_size_ = source_size;
178 decoder_needs_reset = true;
179 notify_size_or_dpi_change = true; 173 notify_size_or_dpi_change = true;
180 } 174 }
181 } 175 }
182 if (packet->format().has_x_dpi() && packet->format().has_y_dpi()) { 176 if (packet->format().has_x_dpi() && packet->format().has_y_dpi()) {
183 webrtc::DesktopVector source_dpi(packet->format().x_dpi(), 177 webrtc::DesktopVector source_dpi(packet->format().x_dpi(),
184 packet->format().y_dpi()); 178 packet->format().y_dpi());
185 if (!source_dpi.equals(source_dpi_)) { 179 if (!source_dpi.equals(source_dpi_)) {
186 source_dpi_ = source_dpi; 180 source_dpi_ = source_dpi;
187 notify_size_or_dpi_change = true; 181 notify_size_or_dpi_change = true;
188 } 182 }
189 } 183 }
190 184
191 // If we've never seen a screen size, ignore the packet. 185 // If we've never seen a screen size, ignore the packet.
192 if (source_size_.is_empty()) { 186 if (source_size_.is_empty()) {
193 main_task_runner_->PostTask(FROM_HERE, base::Bind(done)); 187 main_task_runner_->PostTask(FROM_HERE, base::Bind(done));
194 return; 188 return;
195 } 189 }
196 190
197 if (decoder_needs_reset)
198 decoder_->Initialize(source_size_);
199 if (notify_size_or_dpi_change) 191 if (notify_size_or_dpi_change)
200 consumer_->SetSourceSize(source_size_, source_dpi_); 192 consumer_->SetSourceSize(source_size_, source_dpi_);
201 193
202 if (decoder_->DecodePacket(*packet.get())) { 194 if (decoder_->DecodePacket(*packet.get())) {
203 SchedulePaint(); 195 SchedulePaint();
204 } else { 196 } else {
205 LOG(ERROR) << "DecodePacket() failed."; 197 LOG(ERROR) << "DecodePacket() failed.";
206 } 198 }
207 199
208 main_task_runner_->PostTask(FROM_HERE, base::Bind(done)); 200 main_task_runner_->PostTask(FROM_HERE, base::Bind(done));
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
403 DCHECK(CalledOnValidThread()); 395 DCHECK(CalledOnValidThread());
404 396
405 // Record the latency between the packet being received and presented. 397 // Record the latency between the packet being received and presented.
406 base::TimeDelta decode_time = base::Time::Now() - decode_start; 398 base::TimeDelta decode_time = base::Time::Now() - decode_start;
407 stats_.RecordDecodeTime(decode_time.InMilliseconds()); 399 stats_.RecordDecodeTime(decode_time.InMilliseconds());
408 400
409 decode_task_runner_->PostTask(FROM_HERE, done); 401 decode_task_runner_->PostTask(FROM_HERE, done);
410 } 402 }
411 403
412 } // namespace remoting 404 } // namespace remoting
OLDNEW
« no previous file with comments | « no previous file | remoting/codec/codec_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698