blob: 1fb4ed262100040a52c2521b131925c714cad4a3 [file] [log] [blame]
/*
* Copyright (C) 2019-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.
*/
#define LOG_TAG "GraphConfig"
#include "src/platformdata/gc/GraphConfig.h"
#include "PlatformData.h"
#include "iutils/CameraLog.h"
using std::vector;
using std::map;
using std::string;
namespace icamera {
GraphConfig::GraphConfig(int32_t camId, ConfigMode mode) :
mCameraId(camId) {
mGraphConfigImpl = std::unique_ptr<GraphConfigImpl>(new GraphConfigImpl(camId, mode,
PlatformData::getGraphSettingsType(camId)));
}
GraphConfig::GraphConfig() :
mCameraId(-1) {
mGraphConfigImpl = std::unique_ptr<GraphConfigImpl>(new GraphConfigImpl());
}
GraphConfig::~GraphConfig() {
}
void GraphConfig::addCustomKeyMap() {
mGraphConfigImpl->addCustomKeyMap();
}
status_t GraphConfig::parse(int cameraId, const char *settingsXmlFile) {
string graphDescFile = PlatformData::getGraphDescFilePath();
string settingsFile = PlatformData::getGraphSettingFilePath() + settingsXmlFile;
return mGraphConfigImpl->parse(cameraId, graphDescFile.c_str(), settingsFile.c_str());
}
void GraphConfig::releaseGraphNodes() {
mGraphConfigImpl->releaseGraphNodes();
}
status_t GraphConfig::configStreams(const vector<HalStream*> &activeStreams) {
LOG1("@%s", __func__);
int ret = mGraphConfigImpl->configStreams(activeStreams);
CheckError(ret != OK, UNKNOWN_ERROR, "%s, Failed to config streams", __func__);
ret = mGraphConfigImpl->getGraphConfigData(&mGraphData);
CheckError(ret != OK, UNKNOWN_ERROR, "%s, Failed to get the static graph config data", __func__);
return OK;
}
status_t GraphConfig::getGdcKernelSetting(uint32_t *kernelId,
ia_isp_bxt_resolution_info_t *resolution) {
LOG1("@%s", __func__);
CheckError(!kernelId || !resolution, UNKNOWN_ERROR, "kernelId or resolution is nullptr");
if ((mGraphData.gdcReso.input_width == 0) || (mGraphData.gdcReso.input_height == 0) ||
(mGraphData.gdcReso.output_width == 0) || (mGraphData.gdcReso.output_height == 0)) {
LOG2("%s, Failed to get gdc InReso: w: %d, h: %d; OutReso: w: %d, h: %d; ", __func__,
mGraphData.gdcReso.input_width, mGraphData.gdcReso.input_height,
mGraphData.gdcReso.output_width, mGraphData.gdcReso.output_height);
return NO_ENTRY;
}
*kernelId = mGraphData.gdcKernelId;
*resolution = mGraphData.gdcReso;
return OK;
}
status_t GraphConfig::graphGetStreamIds(vector<int32_t> &streamIds) {
LOG1("@%s", __func__);
CheckError(mGraphData.streamIds.empty(), UNKNOWN_ERROR, "%s, The streamIds vector is empty", __func__);
streamIds = mGraphData.streamIds;
return OK;
}
int GraphConfig::getStreamIdByPgName(string pgName) {
LOG1("@%s", __func__);
CheckError(mGraphData.pgInfo.empty(), -1, "%s, The pgInfo vector is empty", __func__);
for (auto &info : mGraphData.pgInfo) {
if (info.pgName == pgName) {
return info.streamId;
}
}
LOGE("%s, Failed to get stream id for pgName: %s", __func__, pgName.c_str());
return -1;
}
int GraphConfig::getPgIdByPgName(string pgName) {
LOG1("@%s", __func__);
CheckError(mGraphData.pgInfo.empty(), -1, "%s, The pgInfo vector is empty", __func__);
for (auto &info : mGraphData.pgInfo) {
if (info.pgName == pgName) {
return info.pgId;
}
}
LOGE("%s, Failed to get pg id for pgName: %s", __func__, pgName.c_str());
return -1;
}
ia_isp_bxt_program_group* GraphConfig::getProgramGroup(int32_t streamId) {
LOG1("@%s", __func__);
CheckError(mGraphData.programGroup.empty(), nullptr, "%s, The programGroup vector is empty", __func__);
for (auto &info : mGraphData.programGroup) {
if (info.streamId == streamId && info.pgPtr != nullptr) {
return info.pgPtr;
}
}
LOGE("%s, Failed to get programGroup for streamId", __func__, streamId);
return nullptr;
}
status_t GraphConfig::getMBRData(int32_t streamId, ia_isp_bxt_gdc_limits *data) {
LOG1("@%s", __func__);
for (auto &info : mGraphData.mbrInfo) {
if (streamId == info.streamId) {
data = &info.data;
return OK;
}
}
return BAD_VALUE;
}
status_t GraphConfig::getPgNames(vector<string>* pgNames) {
LOG1("@%s", __func__);
CheckError(mGraphData.pgNames.empty(), UNKNOWN_ERROR, "%s, The pgNames vector is empty", __func__);
*pgNames = mGraphData.pgNames;
return OK;
}
status_t GraphConfig::getPgRbmValue(string pgName, IGraphType::StageAttr *stageAttr) {
LOG1("@%s", __func__);
CheckError(mGraphData.pgInfo.empty(), UNKNOWN_ERROR, "%s, The pgInfo vector is empty", __func__);
for (auto &info : mGraphData.pgInfo) {
if (info.pgName == pgName && info.rbmValue.rbm != nullptr) {
*stageAttr = info.rbmValue;
return OK;
}
}
return BAD_VALUE;
}
int GraphConfig::getProgramGroup(string pgName, ia_isp_bxt_program_group* programGroupForPG) {
LOG1("@%s", __func__);
return mGraphConfigImpl->getProgramGroup(pgName, programGroupForPG);
}
status_t GraphConfig::pipelineGetConnections(const vector<string>& pgList,
vector<IGraphType::PipelineConnection> *confVector) {
LOG1("@%s", __func__);
CheckError(!confVector, UNKNOWN_ERROR, "%s, The confVector is nullptr", __func__);
status_t ret;
std::vector<IGraphType::ScalerInfo> scalerInfo;
ret = mGraphConfigImpl->pipelineGetConnections(pgList, &scalerInfo, confVector);
CheckError(ret != OK, ret, "%s, Failed to pipelineGetConnections", __func__);
CheckError(mCameraId == -1, UNKNOWN_ERROR, "%s: mCameraId is -1", __func__);
PlatformData::setScalerInfo(mCameraId, scalerInfo);
return OK;
}
status_t GraphConfig::getPgIdForKernel(const uint32_t streamId, const int32_t kernelId, int32_t *pgId) {
LOG1("@%s", __func__);
CheckError(!pgId, UNKNOWN_ERROR, "%s, the pgId is nullptr", __func__);
return mGraphConfigImpl->getPgIdForKernel(streamId, kernelId, pgId);
}
} // icamera