blob: 56d94cb85cf7da074009773dde1f3e19c63706cd [file] [log] [blame]
/*
* Copyright 2018 The Chromium OS 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 CAMERA_HAL_ADAPTER_REPROCESS_EFFECT_PORTRAIT_MODE_EFFECT_H_
#define CAMERA_HAL_ADAPTER_REPROCESS_EFFECT_PORTRAIT_MODE_EFFECT_H_
#include <string>
#include <utility>
#include <vector>
#include <base/bind.h>
#include <base/callback_helpers.h>
#include <base/synchronization/condition_variable.h>
#include <base/synchronization/lock.h>
#include <base/process/process.h>
#include "cros-camera/camera_buffer_manager.h"
#include "hal_adapter/reprocess_effect/gpu_algo_manager.h"
#include "hal_adapter/reprocess_effect/reprocess_effect.h"
namespace cros {
class PortraitModeEffect final
: public ReprocessEffect,
public base::SupportsWeakPtr<PortraitModeEffect> {
public:
PortraitModeEffect();
PortraitModeEffect(const PortraitModeEffect&) = delete;
PortraitModeEffect& operator=(const PortraitModeEffect&) = delete;
~PortraitModeEffect() = default;
int32_t InitializeAndGetVendorTags(
std::vector<VendorTagInfo>* request_vendor_tags,
std::vector<VendorTagInfo>* result_vendor_tags,
CameraMojoChannelManager* mojo_manager);
int32_t SetVendorTags(uint32_t request_vendor_tag_start,
uint32_t request_vendor_tag_count,
uint32_t result_vendor_tag_start,
uint32_t result_vendor_tag_count);
int32_t ReprocessRequest(const camera_metadata_t& settings,
ScopedYUVBufferHandle* input_buffer,
uint32_t width,
uint32_t height,
uint32_t orientation,
uint32_t v4l2_format,
android::CameraMetadata* result_metadata,
ScopedYUVBufferHandle* output_buffer);
private:
void UpdateResultMetadata(android::CameraMetadata* result_metadata,
const int* result);
int ConvertYUVToRGB(uint32_t v4l2_format,
const android_ycbcr& ycbcr,
void* rgb_buf_addr,
uint32_t rgb_buf_stride,
uint32_t width,
uint32_t height);
int ConvertRGBToYUV(void* rgb_buf_addr,
uint32_t rgb_buf_stride,
uint32_t v4l2_format,
const android_ycbcr& ycbcr,
uint32_t width,
uint32_t height);
void ReturnCallback(uint32_t status, int32_t buffer_handle);
uint32_t enable_vendor_tag_;
enum class SegmentationResult : uint8_t { kSuccess, kFailure, kTimeout };
uint32_t result_vendor_tag_;
CameraBufferManager* buffer_manager_;
GPUAlgoManager* gpu_algo_manager_;
base::Lock lock_;
base::ConditionVariable condvar_;
int32_t return_status_;
};
} // namespace cros
#endif // CAMERA_HAL_ADAPTER_REPROCESS_EFFECT_PORTRAIT_MODE_EFFECT_H_