blob: 6fb4ce0e35f37f39087c708dce8bc1fb5ee4c419 [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SERVICES_IMAGE_ANNOTATION_PUBLIC_CPP_IMAGE_PROCESSOR_H_
#define SERVICES_IMAGE_ANNOTATION_PUBLIC_CPP_IMAGE_PROCESSOR_H_
#include "base/callback.h"
#include "base/gtest_prod_util.h"
#include "base/macros.h"
#include "base/memory/scoped_refptr.h"
#include "base/sequenced_task_runner.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver_set.h"
#include "services/image_annotation/public/mojom/image_annotation.mojom.h"
#include "third_party/skia/include/core/SkBitmap.h"
namespace image_annotation {
// Handles local (i.e. out-of-service) processing of an image on behalf of the
// image annotation service.
class ImageProcessor : public mojom::ImageProcessor {
public:
// We accept a "get pixels" callback so we don't have to store the pixel data
// for (potentially huge) images.
//
// TODO(crbug.com/916420): accept a more sophisticated interface to fetch
// pixels; this will be required for iOS, where pixel
// access entails a full image redownload.
explicit ImageProcessor(base::RepeatingCallback<SkBitmap()> get_pixels);
~ImageProcessor() override;
// Reencodes the image data for transmission to the service. Will be called by
// the service if pixel data is needed.
void GetJpgImageData(GetJpgImageDataCallback callback) override;
// Returns a new pending remote to the Mojo interface for this image
// processor.
mojo::PendingRemote<mojom::ImageProcessor> GetPendingRemote();
private:
// TODO(crbug.com/916420): tune these values.
// The maximum number of pixels to transmit to the service. Images with too
// many pixels will be scaled down prior to transmission.
static constexpr int kMaxPixels = 512 * 512;
// The quality parameter to use when encoding images before transmission.
static constexpr int kJpgQuality = 65;
const base::RepeatingCallback<SkBitmap()> get_pixels_;
scoped_refptr<base::SequencedTaskRunner> background_task_runner_;
mojo::ReceiverSet<mojom::ImageProcessor> receivers_;
FRIEND_TEST_ALL_PREFIXES(ImageProcessorTest, ImageContent);
DISALLOW_COPY_AND_ASSIGN(ImageProcessor);
};
} // namespace image_annotation
#endif // SERVICES_IMAGE_ANNOTATION_PUBLIC_CPP_IMAGE_PROCESSOR_H_