blob: 3d306fa2eacc78f084e69a99d477e488862837f3 [file] [log] [blame]
/*
* Copyright 2019 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_COMMON_CAMERA_GPU_ALGORITHM_H_
#define CAMERA_COMMON_CAMERA_GPU_ALGORITHM_H_
#include <map>
#include <memory>
#include <vector>
#include <base/memory/unsafe_shared_memory_region.h>
#include <base/posix/eintr_wrapper.h>
#include <base/synchronization/lock.h>
#include <base/threading/thread.h>
#include "cros-camera/camera_algorithm.h"
#include "cros-camera/camera_gpu_algo_header.h"
#include "cros-camera/portrait_cros_wrapper.h"
namespace cros {
class CameraGPUAlgorithm {
public:
static CameraGPUAlgorithm* GetInstance();
int32_t Initialize(const camera_algorithm_callback_ops_t* callback_ops);
int32_t RegisterBuffer(int buffer_fd);
void Request(uint32_t req_id,
const uint8_t req_header[],
uint32_t size,
int32_t buffer_handle);
void DeregisterBuffers(const int32_t buffer_handles[], uint32_t size);
private:
CameraGPUAlgorithm();
void InitializeOnThread();
void RequestOnThread(uint32_t req_id,
std::vector<uint8_t> req_header,
int32_t buffer_handle);
base::Thread thread_;
const camera_algorithm_callback_ops_t* callback_ops_;
creative_camera::PortraitCrosWrapper portrait_processor_;
bool is_initialized_;
// Lock to protect the shared memory map
base::Lock map_lock_;
// Store shared memory region with fd as the key
std::map<int32_t, base::UnsafeSharedMemoryRegion> shm_region_map_;
};
} // namespace cros
#endif // CAMERA_COMMON_CAMERA_GPU_ALGORITHM_H_