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

Unified Diff: remoting/codec/video_encoder_verbatim.cc

Issue 530243002: Move common VideoPacket initialization into VideoEncoderHelper. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add unit tests Created 6 years, 3 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 side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698