summaryrefslogtreecommitdiffstats
path: root/remoting/codec/video_encoder_verbatim.cc
diff options
context:
space:
mode:
authorwez <wez@chromium.org>2014-09-02 21:36:33 -0700
committerCommit bot <commit-bot@chromium.org>2014-09-03 04:39:11 +0000
commit59ed1bb4dcd82cf212e7a9b3c27e3d533e25ad2e (patch)
treef72147ee07209abe17afb82cc3791f6c2dfbcfae /remoting/codec/video_encoder_verbatim.cc
parentcda0fd0081a30ddae388d95c297e3902a6c250bf (diff)
downloadchromium_src-59ed1bb4dcd82cf212e7a9b3c27e3d533e25ad2e.zip
chromium_src-59ed1bb4dcd82cf212e7a9b3c27e3d533e25ad2e.tar.gz
chromium_src-59ed1bb4dcd82cf212e7a9b3c27e3d533e25ad2e.tar.bz2
Move common VideoPacket initialization into VideoEncoderHelper.
This avoids duplication of common VideoPacket initialization across multiple encoders, making addition of new fields (e.g. the recently added shape field) more robust. Review URL: https://codereview.chromium.org/530243002 Cr-Commit-Position: refs/heads/master@{#293064}
Diffstat (limited to 'remoting/codec/video_encoder_verbatim.cc')
-rw-r--r--remoting/codec/video_encoder_verbatim.cc40
1 files changed, 13 insertions, 27 deletions
diff --git a/remoting/codec/video_encoder_verbatim.cc b/remoting/codec/video_encoder_verbatim.cc
index 0133b3f..c7550e1 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