blob: f7047425011d000b95d4b26ed0f9cf8a2e733b9b [file] [log] [blame]
/*
* Copyright (C) 2017-2020 Intel Corporation
*
* 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
*
* http://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.
*/
#pragma once
#include <hardware/camera3.h>
#include <unordered_map>
#include "FaceDetection.h"
#include "HALv3Header.h"
#include "ParameterHelper.h"
#include "Parameters.h"
namespace camera3 {
/**
* \class MetadataConvert
*
* This class is used to convert application metadata to HAL metadata.
*
*/
class MetadataConvert {
public:
MetadataConvert(int cameraId);
virtual ~MetadataConvert();
static int constructDefaultMetadata(int cameraId, android::CameraMetadata* settings);
static int updateDefaultRequestSettings(int cameraId, int type,
android::CameraMetadata* settings);
static int requestMetadataToHALMetadata(const android::CameraMetadata& settings,
icamera::Parameters* parameter, bool forceConvert);
static int HALMetadataToRequestMetadata(const icamera::Parameters& parameter,
android::CameraMetadata* settings, int cameraId);
static int HALCapabilityToStaticMetadata(const icamera::Parameters& parameter,
android::CameraMetadata* settings);
static void dumpMetadata(const camera_metadata_t* meta);
static void convertFaceDetectionMetadata(const icamera::CVFaceDetectionAbstractResult& fdResult,
android::CameraMetadata* settings);
private:
DISALLOW_COPY_AND_ASSIGN(MetadataConvert);
// Parameters -> Android dynamic metadata
static int convertColorCorrectionParameter(const icamera::Parameters& parameter,
android::CameraMetadata* settings);
static int convertControlParameter(const icamera::Parameters& parameter,
android::CameraMetadata* settings);
static int convertRequestParameter(const icamera::Parameters& parameter,
android::CameraMetadata* settings, int cameraId);
static int convertSensorParameter(const icamera::Parameters& parameter,
android::CameraMetadata* settings);
static int convertLensParameter(const icamera::Parameters& parameter,
android::CameraMetadata* settings);
static int convertStatisticsParameter(const icamera::Parameters& /*parameter*/,
android::CameraMetadata* settings);
static int convertTonemapParameter(const icamera::Parameters& parameter,
android::CameraMetadata* settings);
static int convertFlashParameter(const icamera::Parameters& /*parameter*/,
android::CameraMetadata* settings);
static int convertAdvancedFeatureMetadata(const android::CameraMetadata& settings,
icamera::Parameters* parameter);
static int convertAdvancedFeatureParameter(const icamera::Parameters& parameter,
android::CameraMetadata* settings);
// Android control metadata -> parameters
static int convertColorCorrectionMetadata(const android::CameraMetadata& settings,
icamera::Parameters* parameter);
static int convertControlMetadata(const android::CameraMetadata& settings,
icamera::Parameters* parameter);
static int convertEdgeMetadata(const android::CameraMetadata& settings,
icamera::Parameters* parameter);
static int convertNoiseReductionMetadata(const android::CameraMetadata& settings,
icamera::Parameters* parameter);
static int convertTonemapMetadata(const android::CameraMetadata& settings,
icamera::Parameters* parameter);
static int convertJpegMetadata(const android::CameraMetadata& settings,
icamera::Parameters* parameter);
static int convertSensorMetadata(const android::CameraMetadata& settings,
icamera::Parameters* parameter, bool forceConvert);
static int convertLensMetadata(const android::CameraMetadata& settings,
icamera::Parameters* parameter);
// Capabilities -> Android static metadata
static void fillControlStaticMetadata(const icamera::Parameters& parameter,
android::CameraMetadata* settings);
static void fillScalerStaticMetadata(const icamera::Parameters& parameter,
android::CameraMetadata* settings);
static void fillSensorStaticMetadata(const icamera::Parameters& parameter,
android::CameraMetadata* settings);
static void fillLensStaticMetadata(const icamera::Parameters& parameter,
android::CameraMetadata* settings);
static void fillRequestStaticMetadata(const icamera::Parameters& parameter,
android::CameraMetadata* settings);
static void fillStatisticsStaticMetadata(const icamera::Parameters& parameter,
android::CameraMetadata* settings);
static void fillTonemapStaticMetadata(const icamera::Parameters& parameter,
android::CameraMetadata* settings);
static void fillJpegStaticMetadata(const icamera::Parameters& parameter,
android::CameraMetadata* settings);
static void fillAdvancedFeatureStaticMetadata(const icamera::Parameters& parameter,
android::CameraMetadata* settings);
static int convertToHalWindow(const int32_t* data, int dataCount,
icamera::camera_window_list_t* windows);
static int convertToMetadataRegion(const icamera::camera_window_list_t& windows, int dataCount,
int32_t* data);
private:
int mCameraId;
};
class StaticCapability {
public:
const icamera::CameraMetadata* getCapability() { return &mMetadata; }
static StaticCapability* getInstance(int cameraId);
static void releaseInstance(int cameraId);
private:
StaticCapability(int cameraId);
virtual ~StaticCapability();
private:
// Guard for singleton instance creation.
static std::mutex sLock;
static std::unordered_map<int, StaticCapability*> sInstances;
icamera::CameraMetadata mMetadata;
int mCameraId;
};
} // namespace camera3