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

Unified Diff: remoting/base/encoder_zlib.cc

Issue 3305001: Move decoder into separate thread, clean up API layering, and redo update protocl (Closed)
Patch Set: Fix compile error. Created 10 years, 2 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
« no previous file with comments | « remoting/base/encoder_zlib.h ('k') | remoting/base/protocol_decoder.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/base/encoder_zlib.cc
diff --git a/remoting/base/encoder_zlib.cc b/remoting/base/encoder_zlib.cc
index 05533a92c48a2eea76c6b4797c4b3cdce01330dc..390a46ad52d79aed4f55a8a8fccaaf0b4f77ff10 100644
--- a/remoting/base/encoder_zlib.cc
+++ b/remoting/base/encoder_zlib.cc
@@ -49,13 +49,14 @@ void EncoderZlib::EncodeRect(CompressorZlib* compressor,
const int bytes_per_pixel = GetBytesPerPixel(capture_data_->pixel_format());
const int row_size = bytes_per_pixel * rect.width();
- ChromotingHostMessage* message = PrepareMessage(&rect);
- const uint8 * in = capture_data_->data_planes().data[0] +
- rect.y() * strides +
- rect.x() * bytes_per_pixel;
+ ChromotingHostMessage* message = new ChromotingHostMessage();
+ RectangleUpdatePacket* update = message->mutable_rectangle_update();
+ PrepareUpdateStart(rect, update);
+ const uint8* in = capture_data_->data_planes().data[0] +
+ rect.y() * strides +
+ rect.x() * bytes_per_pixel;
// TODO(hclam): Fill in the sequence number.
- uint8* out = (uint8*)message->mutable_update_stream_packet()->
- mutable_rect_data()->mutable_data()->data();
+ uint8* out = GetOutputBuffer(update, packet_size_);
int filled = 0;
int row_x = 0;
int row_y = 0;
@@ -63,9 +64,9 @@ void EncoderZlib::EncodeRect(CompressorZlib* compressor,
while (compress_again) {
// Prepare a message for sending out.
if (!message) {
- message = PrepareMessage(NULL);
- out = (uint8*)(message->mutable_update_stream_packet()->
- mutable_rect_data()->mutable_data()->data());
+ message = new ChromotingHostMessage();
+ update = message->mutable_rectangle_update();
+ out = GetOutputBuffer(update, packet_size_);
filled = 0;
}
@@ -88,13 +89,13 @@ void EncoderZlib::EncodeRect(CompressorZlib* compressor,
// We have reached the end of stream.
if (!compress_again) {
- message->mutable_update_stream_packet()->mutable_end_rect();
+ update->set_flags(update->flags() | RectangleUpdatePacket::LAST_PACKET);
}
// If we have filled the message or we have reached the end of stream.
if (filled == packet_size_ || !compress_again) {
- message->mutable_update_stream_packet()->mutable_rect_data()->
- mutable_data()->resize(filled);
+ message->mutable_rectangle_update()->mutable_encoded_rect()->
+ resize(filled);
SubmitMessage(message, rect_index);
message = NULL;
}
@@ -108,33 +109,40 @@ void EncoderZlib::EncodeRect(CompressorZlib* compressor,
}
}
-ChromotingHostMessage* EncoderZlib::PrepareMessage(const gfx::Rect* rect) {
- ChromotingHostMessage* message = new ChromotingHostMessage();
- UpdateStreamPacketMessage* packet = message->mutable_update_stream_packet();
-
- // Prepare the begin rect content.
- if (rect != NULL) {
- packet->mutable_begin_rect()->set_x(rect->x());
- packet->mutable_begin_rect()->set_y(rect->y());
- packet->mutable_begin_rect()->set_width(rect->width());
- packet->mutable_begin_rect()->set_height(rect->height());
- packet->mutable_begin_rect()->set_encoding(EncodingZlib);
- packet->mutable_begin_rect()->set_pixel_format(
- capture_data_->pixel_format());
- }
+void EncoderZlib::PrepareUpdateStart(const gfx::Rect& rect,
+ RectangleUpdatePacket* update) {
+
+ update->set_flags(update->flags() | RectangleUpdatePacket::FIRST_PACKET);
+ RectangleFormat* format = update->mutable_format();
- packet->mutable_rect_data()->mutable_data()->resize(packet_size_);
- return message;
+ format->set_x(rect.x());
+ format->set_y(rect.y());
+ format->set_width(rect.width());
+ format->set_height(rect.height());
+ format->set_encoding(EncodingZlib);
+ format->set_pixel_format(capture_data_->pixel_format());
+}
+
+uint8* EncoderZlib::GetOutputBuffer(RectangleUpdatePacket* update,
+ size_t size) {
+ update->mutable_encoded_rect()->resize(size);
+ // TODO(ajwong): Is there a better way to do this at all???
+ return const_cast<uint8*>(reinterpret_cast<const uint8*>(
+ update->mutable_encoded_rect()->data()));
}
void EncoderZlib::SubmitMessage(ChromotingHostMessage* message,
size_t rect_index) {
EncodingState state = EncodingInProgress;
- if (rect_index == 0 && message->update_stream_packet().has_begin_rect())
+ const RectangleUpdatePacket& update = message->rectangle_update();
+ if (rect_index == 0 &&
+ (update.flags() | RectangleUpdatePacket::FIRST_PACKET)) {
state |= EncodingStarting;
+ }
if (rect_index == capture_data_->dirty_rects().size() - 1 &&
- message->update_stream_packet().has_end_rect())
+ (update.flags() | RectangleUpdatePacket::LAST_PACKET)) {
state |= EncodingEnded;
+ }
callback_->Run(message, state);
}
« no previous file with comments | « remoting/base/encoder_zlib.h ('k') | remoting/base/protocol_decoder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698