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

Unified Diff: src/core/SkOrderedWriteBuffer.cpp

Issue 14230022: Fixes for piping bitmaps with encoded data. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 7 years, 8 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 | « src/core/SkOrderedReadBuffer.cpp ('k') | src/pipe/SkGPipeRead.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/core/SkOrderedWriteBuffer.cpp
diff --git a/src/core/SkOrderedWriteBuffer.cpp b/src/core/SkOrderedWriteBuffer.cpp
index e458bfe597595c584b9e9d747a9bd6e6f4631b2d..d4de7a0b76f760b415b0d7b09b6f7c57c42f6a6b 100644
--- a/src/core/SkOrderedWriteBuffer.cpp
+++ b/src/core/SkOrderedWriteBuffer.cpp
@@ -145,6 +145,10 @@ bool SkOrderedWriteBuffer::writeToStream(SkWStream* stream) {
}
void SkOrderedWriteBuffer::writeBitmap(const SkBitmap& bitmap) {
+ // Record the width and height.
+ this->writeInt(bitmap.width());
+ this->writeInt(bitmap.height());
+
// Record information about the bitmap in one of three ways, in order of priority:
// 1. If there is an SkBitmapHeap, store it in the heap. The client can avoid serializing the
// bitmap entirely or serialize it later as desired.
@@ -159,6 +163,9 @@ void SkOrderedWriteBuffer::writeBitmap(const SkBitmap& bitmap) {
SkASSERT(NULL == fBitmapEncoder);
// Bitmap was not encoded. Record a zero, implying that the reader need not decode.
this->writeUInt(0);
djsollen 2013/04/25 19:20:36 Per our discussion, since we are updating the pict
scroggo 2013/04/25 20:19:13 Done.
+ // Record a bool value of true, to state that an SkBitmapHeap was used to store the
+ // SkBitmap. A value of false would have been written if the SkBitmapHeap was not used.
+ this->writeBool(true);
int32_t slot = fBitmapHeap->insert(bitmap);
fWriter.write32(slot);
// crbug.com/155875
@@ -180,7 +187,7 @@ void SkOrderedWriteBuffer::writeBitmap(const SkBitmap& bitmap) {
// Write the length to indicate that the bitmap was encoded successfully, followed
// by the actual data. This must match the case where fBitmapEncoder is used so the
// reader need not know the difference.
- this->writeUInt(data->size());
+ this->writeUInt(SkToU32(data->size()));
fWriter.writePad(data->data(), data->size());
encoded = true;
}
@@ -194,7 +201,7 @@ void SkOrderedWriteBuffer::writeBitmap(const SkBitmap& bitmap) {
// by the actual data. This must match the case where the original data is used so the
// reader need not know the difference.
size_t length = stream.getOffset();
- this->writeUInt(length);
+ this->writeUInt(SkToU32(length));
if (stream.read(fWriter.reservePad(length), 0, length)) {
encoded = true;
} else {
@@ -203,13 +210,11 @@ void SkOrderedWriteBuffer::writeBitmap(const SkBitmap& bitmap) {
}
}
}
- if (encoded) {
- // Write the width and height in case the reader does not have a decoder.
- this->writeInt(bitmap.width());
- this->writeInt(bitmap.height());
- } else {
+ if (!encoded) {
// Bitmap was not encoded. Record a zero, implying that the reader need not decode.
this->writeUInt(0);
+ // An SkBitmapHeap was not used. Record a boolean value of false.
+ this->writeBool(false);
bitmap.flatten(*this);
}
}
« no previous file with comments | « src/core/SkOrderedReadBuffer.cpp ('k') | src/pipe/SkGPipeRead.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698