diff options
author | wez <wez@chromium.org> | 2014-09-02 21:36:33 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-09-03 04:39:11 +0000 |
commit | 59ed1bb4dcd82cf212e7a9b3c27e3d533e25ad2e (patch) | |
tree | f72147ee07209abe17afb82cc3791f6c2dfbcfae /remoting/codec/video_encoder_verbatim.cc | |
parent | cda0fd0081a30ddae388d95c297e3902a6c250bf (diff) | |
download | chromium_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.cc | 40 |
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 |