Index: remoting/codec/video_encoder_verbatim.cc |
diff --git a/remoting/codec/video_encoder_verbatim.cc b/remoting/codec/video_encoder_verbatim.cc |
index 0133b3f4f499b56c4c774a02e517c82d8df48432..c7550e1713397f9d836ac71d439d4641b4e31046 100644 |
--- a/remoting/codec/video_encoder_verbatim.cc |
+++ b/remoting/codec/video_encoder_verbatim.cc |
@@ -10,9 +10,16 @@ |
#include "remoting/base/util.h" |
#include "remoting/proto/video.pb.h" |
#include "third_party/webrtc/modules/desktop_capture/desktop_frame.h" |
+#include "third_party/webrtc/modules/desktop_capture/desktop_geometry.h" |
+#include "third_party/webrtc/modules/desktop_capture/desktop_region.h" |
namespace remoting { |
+static uint8_t* GetPacketOutputBuffer(VideoPacket* packet, size_t size) { |
+ packet->mutable_data()->resize(size); |
+ return reinterpret_cast<uint8_t*>(string_as_array(packet->mutable_data())); |
+} |
+ |
VideoEncoderVerbatim::VideoEncoderVerbatim() {} |
VideoEncoderVerbatim::~VideoEncoderVerbatim() {} |
@@ -21,15 +28,10 @@ scoped_ptr<VideoPacket> VideoEncoderVerbatim::Encode( |
CHECK(frame.data()); |
base::Time encode_start_time = base::Time::Now(); |
- scoped_ptr<VideoPacket> packet(new VideoPacket()); |
- VideoPacketFormat* format = packet->mutable_format(); |
- format->set_encoding(VideoPacketFormat::ENCODING_VERBATIM); |
- if (!frame.size().equals(screen_size_)) { |
- screen_size_ = frame.size(); |
- format->set_screen_width(screen_size_.width()); |
- format->set_screen_height(screen_size_.height()); |
- } |
+ // Create a VideoPacket with common fields (e.g. DPI, rects, shape) set. |
+ scoped_ptr<VideoPacket> packet(helper_.CreateVideoPacket(frame)); |
+ packet->mutable_format()->set_encoding(VideoPacketFormat::ENCODING_VERBATIM); |
// Calculate output size. |
size_t output_size = 0; |
@@ -40,10 +42,10 @@ scoped_ptr<VideoPacket> VideoEncoderVerbatim::Encode( |
webrtc::DesktopFrame::kBytesPerPixel; |
} |
- uint8_t* out = GetOutputBuffer(packet.get(), output_size); |
+ uint8_t* out = GetPacketOutputBuffer(packet.get(), output_size); |
const int in_stride = frame.stride(); |
- // Store all changed rectangles in the packet. |
+ // Encode pixel data for all changed rectangles into the packet. |
for (webrtc::DesktopRegion::Iterator iter(frame.updated_region()); |
!iter.IsAtEnd(); iter.Advance()) { |
const webrtc::DesktopRect& rect = iter.rect(); |
@@ -55,29 +57,13 @@ scoped_ptr<VideoPacket> VideoEncoderVerbatim::Encode( |
out += row_size; |
in += in_stride; |
} |
- |
- Rect* dirty_rect = packet->add_dirty_rects(); |
- dirty_rect->set_x(rect.left()); |
- dirty_rect->set_y(rect.top()); |
- dirty_rect->set_width(rect.width()); |
- dirty_rect->set_height(rect.height()); |
} |
- packet->set_capture_time_ms(frame.capture_time_ms()); |
+ // Note the time taken to encode the pixel data. |
packet->set_encode_time_ms( |
(base::Time::Now() - encode_start_time).InMillisecondsRoundedUp()); |
- if (!frame.dpi().is_zero()) { |
- packet->mutable_format()->set_x_dpi(frame.dpi().x()); |
- packet->mutable_format()->set_y_dpi(frame.dpi().y()); |
- } |
return packet.Pass(); |
} |
-uint8_t* VideoEncoderVerbatim::GetOutputBuffer(VideoPacket* packet, |
- size_t size) { |
- packet->mutable_data()->resize(size); |
- return reinterpret_cast<uint8_t*>(string_as_array(packet->mutable_data())); |
-} |
- |
} // namespace remoting |