OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/decoder_verbatim.h" | 5 #include "remoting/client/decoder_verbatim.h" |
6 | 6 |
7 namespace remoting { | 7 namespace remoting { |
8 | 8 |
9 DecoderVerbatim::DecoderVerbatim() | 9 DecoderVerbatim::DecoderVerbatim() |
10 : updated_rects_(NULL) { | 10 : updated_rects_(NULL) { |
11 } | 11 } |
12 | 12 |
13 bool DecoderVerbatim::BeginDecode(scoped_refptr<media::VideoFrame> frame, | 13 bool DecoderVerbatim::BeginDecode(scoped_refptr<media::VideoFrame> frame, |
14 UpdatedRects* updated_rects, | 14 UpdatedRects* updated_rects, |
15 Task* partial_decode_done, | 15 Task* partial_decode_done, |
16 Task* decode_done) { | 16 Task* decode_done) { |
17 DCHECK(!partial_decode_done_.get()); | 17 DCHECK(!partial_decode_done_.get()); |
18 DCHECK(!decode_done_.get()); | 18 DCHECK(!decode_done_.get()); |
19 DCHECK(!updated_rects_); | 19 DCHECK(!updated_rects_); |
20 | 20 |
21 partial_decode_done_.reset(partial_decode_done); | 21 partial_decode_done_.reset(partial_decode_done); |
22 decode_done_.reset(decode_done); | 22 decode_done_.reset(decode_done); |
23 updated_rects_ = updated_rects; | 23 updated_rects_ = updated_rects; |
24 | 24 |
25 // TODO(hclam): Check if we can accept the color format of the video frame and | 25 // TODO(hclam): Check if we can accept the color format of the video frame |
26 // the codec. | 26 // and the codec. |
27 frame_ = frame; | 27 frame_ = frame; |
28 return true; | 28 return true; |
29 } | 29 } |
30 | 30 |
31 bool DecoderVerbatim::PartialDecode(HostMessage* message) { | 31 bool DecoderVerbatim::PartialDecode(HostMessage* message) { |
32 scoped_ptr<HostMessage> msg_deleter(message); | 32 scoped_ptr<HostMessage> msg_deleter(message); |
33 | 33 |
34 int width = message->update_stream_packet().header().width(); | 34 int width = message->update_stream_packet().header().width(); |
35 int height = message->update_stream_packet().header().height(); | 35 int height = message->update_stream_packet().header().height(); |
36 int x = message->update_stream_packet().header().x(); | 36 int x = message->update_stream_packet().header().x(); |
37 int y = message->update_stream_packet().header().y(); | 37 int y = message->update_stream_packet().header().y(); |
38 PixelFormat pixel_format = | 38 PixelFormat pixel_format = |
39 message->update_stream_packet().header().pixel_format(); | 39 message->update_stream_packet().header().pixel_format(); |
40 int bytes_per_pixel = 0; | 40 int bytes_per_pixel = 0; |
41 | 41 |
42 // TODO(hclam): Extract the following to an util function. | 42 // TODO(hclam): Extract the following to an util function. |
43 if (pixel_format == PixelFormatRgb24) { | 43 if (pixel_format == PixelFormatRgb24) { |
44 bytes_per_pixel = 3; | 44 bytes_per_pixel = 3; |
45 } else if (pixel_format == PixelFormatRgb565) { | 45 } else if (pixel_format == PixelFormatRgb565) { |
46 bytes_per_pixel = 2; | 46 bytes_per_pixel = 2; |
47 } else if (pixel_format == PixelFormatRgb32) { | 47 } else if (pixel_format == PixelFormatRgb32) { |
48 bytes_per_pixel = 4; | 48 bytes_per_pixel = 4; |
49 } else if (pixel_format != PixelFormatAscii) { | 49 } else if (pixel_format == PixelFormatAscii) { |
50 bytes_per_pixel = 1; | 50 bytes_per_pixel = 1; |
51 } else { | 51 } else { |
52 NOTREACHED() << "Pixel format not supported"; | 52 NOTREACHED() << "Pixel format not supported"; |
53 } | 53 } |
54 | 54 |
55 if (static_cast<PixelFormat>(frame_->format()) != pixel_format) { | 55 if (static_cast<PixelFormat>(frame_->format()) != pixel_format) { |
56 NOTREACHED() << "Pixel format of message doesn't match the video frame. " | 56 NOTREACHED() << "Pixel format of message doesn't match the video frame. " |
57 "Expected vs received = " | 57 "Expected vs received = " |
58 << frame_->format() << " vs " << pixel_format | 58 << frame_->format() << " vs " << pixel_format |
59 << " Color space conversion required."; | 59 << " Color space conversion required."; |
(...skipping 20 matching lines...) Expand all Loading... |
80 void DecoderVerbatim::EndDecode() { | 80 void DecoderVerbatim::EndDecode() { |
81 decode_done_->Run(); | 81 decode_done_->Run(); |
82 | 82 |
83 partial_decode_done_.reset(); | 83 partial_decode_done_.reset(); |
84 decode_done_.reset(); | 84 decode_done_.reset(); |
85 frame_ = NULL; | 85 frame_ = NULL; |
86 updated_rects_ = NULL; | 86 updated_rects_ = NULL; |
87 } | 87 } |
88 | 88 |
89 } // namespace remoting | 89 } // namespace remoting |
OLD | NEW |