// Copyright 2020 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.

// API exposed by the OCR Service daemon. This API is normally consumed by
// the browser and command line tools.

// NOTE: This mojom should be kept in sync between Chromium and
// Chromium OS repos.

module chromeos.ocr.mojom;

// Enumeration of each of the possible results of performing OCR.
[Extensible]
enum OcrResultEnum {
  SUCCESS = 0,
  LANGUAGE_NOT_SUPPORTED_ERROR = 1,
  INPUT_FILE_ERROR = 2,
  OUTPUT_FILE_ERROR = 3,
  PROCESS_PAGE_ERROR = 4,
};

// Parameters for searchable PDF rendering.
struct PdfRendererConfig {
  // JPEG compression quality. The range is from 0 to 100.
  // Used by Tesseract for converting some images that cannot be inlined
  // to PDF objects.
  uint8 jpg_quality = 85;
  // Skip images if true.
  bool textonly = false;
};

// Parameters for Tesseract OCR.
struct OcrConfig{
  // Input text language.
  string language = "eng";
  // Timeout for processing a page (in msec).
  uint64 timeout_ms = 5000;
};

// Response type for Optical Character Recognition service.
struct OpticalCharacterRecognitionServiceResponse {
    // Whether tesseract OCR processed the image successfully
    // or there was an error.
    OcrResultEnum result;
    // More detailed description of result.
    string result_message;
};

// Optical Character Recognition interface exposed by OCR Service daemon.
interface OpticalCharacterRecognitionService {
  // Performs OCR on an input image file to generate a searchable PDF file.
  //
  // The request:
  // * |input_fd_handle| - input image file descriptor
  // * |output_fd_handle| - output PDF file descriptor
  // * |ocr_config| - tesseract OCR configuration parameters
  // * |pdf_renderer_config| - configuration for output PDF rendering
  // The response:
  // * |response| - processing routine status
  GenerateSearchablePdfFromImage(handle input_fd_handle,
                                 handle output_fd_handle,
                                 OcrConfig ocr_config,
                                 PdfRendererConfig pdf_renderer_config)
      => (OpticalCharacterRecognitionServiceResponse response);
};
