| Index: blimp/client/feature/compositor/client_image_serialization_processor.cc
|
| diff --git a/blimp/client/feature/compositor/client_image_serialization_processor.cc b/blimp/client/feature/compositor/client_image_serialization_processor.cc
|
| index df41181c8b694ccc586514edacdac2c17a194b0d..797f2ce2e13f076fc018de871f2f2329d0f1b9a8 100644
|
| --- a/blimp/client/feature/compositor/client_image_serialization_processor.cc
|
| +++ b/blimp/client/feature/compositor/client_image_serialization_processor.cc
|
| @@ -4,27 +4,84 @@
|
|
|
| #include "blimp/client/feature/compositor/client_image_serialization_processor.h"
|
|
|
| -#include "blimp/client/feature/compositor/blimp_image_decoder.h"
|
| -#include "third_party/skia/include/core/SkPicture.h"
|
| +#include <stddef.h>
|
| +#include <string>
|
| +#include <vector>
|
|
|
| -class SkPixelSerializer;
|
| +#include "base/logging.h"
|
| +#include "base/memory/ref_counted.h"
|
| +#include "base/sha1.h"
|
| +#include "base/strings/string_number_conversions.h"
|
| +#include "blimp/client/feature/compositor/blimp_image_decoder.h"
|
| +#include "blimp/common/blob_cache/blob_cache.h"
|
| +#include "blimp/common/blob_cache/id_util.h"
|
| +#include "blimp/common/proto/blob_cache.pb.h"
|
| +#include "blimp/net/blob_channel/blob_channel_receiver.h"
|
|
|
| namespace blimp {
|
| namespace client {
|
|
|
| -ClientImageSerializationProcessor::ClientImageSerializationProcessor() {
|
| - pixel_deserializer_ = &BlimpImageDecoder;
|
| -}
|
| +ClientImageSerializationProcessor::ClientImageSerializationProcessor() {}
|
|
|
| ClientImageSerializationProcessor::~ClientImageSerializationProcessor() {}
|
|
|
| +ClientImageSerializationProcessor*
|
| +ClientImageSerializationProcessor::GetInstance() {
|
| + return base::Singleton<ClientImageSerializationProcessor>::get();
|
| +}
|
| +
|
| +// static
|
| +bool ClientImageSerializationProcessor::InstallPixelRefProc(const void* input,
|
| + size_t input_size,
|
| + SkBitmap* bitmap) {
|
| + DCHECK(input);
|
| + DCHECK(bitmap);
|
| +
|
| + return ClientImageSerializationProcessor::GetInstance()->GetAndDecodeBlob(
|
| + input, input_size, bitmap);
|
| +}
|
| +
|
| +bool ClientImageSerializationProcessor::GetAndDecodeBlob(const void* input,
|
| + size_t input_size,
|
| + SkBitmap* bitmap) {
|
| + BlobCacheImageMetadata parsed_metadata;
|
| + if (!parsed_metadata.ParseFromArray(input, input_size)) {
|
| + LOG(ERROR) << "Couldn't parse blob metadata structure.";
|
| + error_delegate_->OnImageDecodeError();
|
| + return false;
|
| + }
|
| + if (!IsValidBlobId(parsed_metadata.id())) {
|
| + LOG(ERROR) << "Image payload is not a valid blob ID.";
|
| + error_delegate_->OnImageDecodeError();
|
| + return false;
|
| + }
|
| +
|
| + // Get the image blob synchronously.
|
| + // TODO(kmarshall): Add support for asynchronous Get() completion after Skia
|
| + // supports image replacement.
|
| + BlobDataPtr blob = blob_receiver_->Get(parsed_metadata.id());
|
| + if (!blob) {
|
| + LOG(ERROR) << "No blob found with ID: "
|
| + << BlobIdToString(parsed_metadata.id());
|
| + error_delegate_->OnImageDecodeError();
|
| + return false;
|
| + }
|
| +
|
| + DVLOG(1) << "GetAndDecodeBlob(" << BlobIdToString(parsed_metadata.id())
|
| + << ")";
|
| +
|
| + return BlimpImageDecoder(reinterpret_cast<const void*>(&blob->data[0]),
|
| + blob->data.size(), bitmap);
|
| +}
|
| +
|
| SkPixelSerializer* ClientImageSerializationProcessor::GetPixelSerializer() {
|
| + NOTREACHED();
|
| return nullptr;
|
| }
|
|
|
| SkPicture::InstallPixelRefProc
|
| ClientImageSerializationProcessor::GetPixelDeserializer() {
|
| - return pixel_deserializer_;
|
| + return &ClientImageSerializationProcessor::InstallPixelRefProc;
|
| }
|
|
|
| } // namespace client
|
|
|