// Copyright 2022 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef CONTRIB_LIBRAW_UTILS_UTILS_LIBRAW_H_ #define CONTRIB_LIBRAW_UTILS_UTILS_LIBRAW_H_ #include #include "contrib/libraw/sandboxed.h" enum LibRaw_errors { LIBRAW_SUCCESS = 0, LIBRAW_UNSPECIFIED_ERROR = -1, LIBRAW_FILE_UNSUPPORTED = -2, LIBRAW_REQUEST_FOR_NONEXISTENT_IMAGE = -3, LIBRAW_OUT_OF_ORDER_CALL = -4, LIBRAW_NO_THUMBNAIL = -5, LIBRAW_UNSUPPORTED_THUMBNAIL = -6, LIBRAW_INPUT_CLOSED = -7, LIBRAW_NOT_IMPLEMENTED = -8, LIBRAW_UNSUFFICIENT_MEMORY = -100007, LIBRAW_DATA_ERROR = -100008, LIBRAW_IO_ERROR = -100009, LIBRAW_CANCELLED_BY_CALLBACK = -100010, LIBRAW_BAD_CROP = -100011, LIBRAW_TOO_BIG = -100012, LIBRAW_MEMPOOL_OVERFLOW = -100013 }; class LibRaw { public: LibRaw(LibRawSapiSandbox* sandbox, const std::string& file_name) : sandbox_(CHECK_NOTNULL(sandbox)), api_(sandbox_), file_name_(file_name) { init_status_ = InitLibRaw(); } ~LibRaw(); absl::Status CheckIsInit(); bool IsInit(); libraw_data_t GetImgData(); absl::StatusOr> RawData(); absl::Status OpenFile(); absl::Status Unpack(); absl::Status SubtractBlack(); absl::StatusOr> GetCameraList(); absl::StatusOr COLOR(int row, int col); absl::StatusOr GetRawHeight(); absl::StatusOr GetRawWidth(); absl::StatusOr GetCBlack(int channel); int GetColorCount(); private: absl::Status InitLibRaw(); LibRawSapiSandbox* sandbox_; LibRawApi api_; absl::Status init_status_; std::string file_name_; sapi::v::Struct sapi_libraw_data_t_; }; #endif // CONTRIB_LIBRAW_UTILS_UTILS_LIBRAW_H_