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

Unified Diff: remoting/base/compressor_zlib.cc

Issue 2868062: EncoderZlib/DecoderZlib for chromoting (Closed)
Patch Set: from .cc to .c Created 10 years, 5 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/compressor_zlib.h ('k') | remoting/base/compressor_zlib_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/base/compressor_zlib.cc
diff --git a/remoting/base/compressor_zlib.cc b/remoting/base/compressor_zlib.cc
index ae5b388718fa6e7eb09abca9984382a8af3f73b5..6f7007319685f87f04d89a5f79ea0b4244ba26ed 100644
--- a/remoting/base/compressor_zlib.cc
+++ b/remoting/base/compressor_zlib.cc
@@ -37,7 +37,8 @@ CompressorZlib::~CompressorZlib() {
bool CompressorZlib::Process(const uint8* input_data, int input_size,
uint8* output_data, int output_size,
- int* consumed, int* written) {
+ CompressorFlush flush, int* consumed,
+ int* written) {
DCHECK_GT(output_size, 0);
// Setup I/O parameters.
@@ -46,7 +47,18 @@ bool CompressorZlib::Process(const uint8* input_data, int input_size,
stream_->avail_out = output_size;
stream_->next_out = (Bytef*)output_data;
- int ret = deflate(stream_.get(), input_size ? Z_NO_FLUSH : Z_FINISH);
+ int z_flush = 0;
+ if (flush == CompressorSyncFlush) {
+ z_flush = Z_SYNC_FLUSH;
+ } else if (flush == CompressorFinish) {
+ z_flush = Z_FINISH;
+ } else if (flush == CompressorNoFlush) {
+ z_flush = Z_NO_FLUSH;
+ } else {
+ NOTREACHED() << "Unsupported flush mode";
+ }
+
+ int ret = deflate(stream_.get(), z_flush);
if (ret == Z_STREAM_ERROR) {
NOTREACHED() << "zlib compression failed";
}
@@ -54,9 +66,19 @@ bool CompressorZlib::Process(const uint8* input_data, int input_size,
*consumed = input_size - stream_->avail_in;
*written = output_size - stream_->avail_out;
- // Return true when we get Z_BUF_ERROR, this way we can feed more data
- // to zlib.
- return ret == Z_OK || ret == Z_BUF_ERROR;
+ // If |ret| equals Z_STREAM_END we have reached the end of stream.
+ // If |ret| equals Z_BUF_ERROR we have the end of the synchronication point.
+ // For these two cases we need to stop compressing.
+ if (ret == Z_OK) {
+ return true;
+ } else if (ret == Z_STREAM_END) {
+ return false;
+ } else if (ret == Z_BUF_ERROR) {
+ return stream_->avail_out == 0;
+ } else {
+ NOTREACHED() << "Unexpected zlib error: " << ret;
+ return false;
+ }
}
} // namespace remoting
« no previous file with comments | « remoting/base/compressor_zlib.h ('k') | remoting/base/compressor_zlib_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698