android13/hardware/rockchip/camera/common/gcss/gcss.h

233 lines
6.9 KiB
C++

/*
* Copyright (C) 2016-2017 Intel Corporation
* Copyright (c) 2017, Fuzhou Rockchip Electronics Co., Ltd
*
* 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.
*/
#ifndef __GCSS_H__
#define __GCSS_H__
#include <ia_tools/css_types.h>
#include <ia_cipf/ia_cipf_types.h>
#ifdef __cplusplus
#include <string>
#include <map>
#include <utility>
#include <vector>
namespace GCSS {
/* For now there is no C API to GCSS so exposing the ItemUID and IGraphConfig
* here */
class ItemUID
{
public:
static ia_uid str2key(const std::string&);
static const char* key2str(const ia_uid key);
static ia_uid generateKey(const std::string&);
static void addCustomKeyMap(std::map<std::string, ia_uid> &osMap);
ItemUID(std::initializer_list<ia_uid> uids) {
mUids.insert(mUids.end(), uids.begin(), uids.end());
};
ItemUID() {};
void pop_back() { mUids.pop_back(); };
void push_back( const ia_uid& iuid) { mUids.push_back(iuid); };
bool operator == (const ItemUID& v) const {
return v.mUids == mUids;
}
std::string toString() const;
std::size_t size() const { return mUids.size(); };
ItemUID(const ItemUID &ref) { mUids = ref.mUids; };
ia_uid& operator[](std::size_t idx) { return mUids[idx]; }
const ia_uid& operator[](std::size_t idx) const
{ return mUids[idx]; }
private:
friend bool operator<(const ItemUID &r, const ItemUID &l);
friend bool operator>(const ItemUID &r, const ItemUID &l);
std::vector<ia_uid> mUids;
};
class IGraphConfig
{
public:
virtual ~IGraphConfig() {}
/**
* Get root level node of the graph
*
* \ingroup gcss
*
* \return pointer to root node on success
* \return nullptr if error
*/
virtual IGraphConfig* getRoot(void) const = 0;
/*
* Get ancestor for the node
*
* \ingroup gcss
*
* \return pointer to ancestor node on success
* \return nullptr if error
*/
virtual IGraphConfig* getAncestor(void) const = 0;
/**
* Iterate descendants by index
*
* \ingroup gcss
*
* Iterates descendants from the given index and returns pointer to the
* first descendant that matches given gcss key. Index is
* being moved to match the returned descendant. Returns nullptr if no
* descendant is found.
* \param[in] the gcss key of the attribute by which we want to search.
* ie. GCSS_KEY_TYPE, when iterating descendants by type.
* \param[in/out] index position, advanced to index of found descendant
* \return pointer to IGraphConfig at the iterator location
*/
virtual IGraphConfig* iterateDescendantByIndex(const ia_uid,
uint32_t &index) const = 0;
/**
* Iterates descendants starting from the given index and returns pointer
* to the first descendant where attribute and its value match the ones given
* as parameters. Index is being moved to match the returned descendant.
* Returns nullptr if no descendant is found.
* \param[in] the gcss key of the attribute by which we want to search.
* ie. GCSS_KEY_TYPE, when iterating descendants by type.
* \param[in] value to search for. For string type keys ie. GCSS_KEY_TYPE,
* the value is given as GCSS_KEY. When searching for type kernel,
* the value should be GCSS_KEY_KERNEL. For int type keys ie.
* GCSS_KEY_ID, the value can be int.
* \param[in/out] index position, advanced to index of found descendant
* \return pointer to IGraphConfig at the iterator location
* \return nullptr if error
*/
virtual IGraphConfig* iterateDescendantByIndex(const ia_uid key,
const ia_uid value,
uint32_t &index) const = 0;
virtual uint32_t getDescendantCount() const = 0;
/**
* Get descendant by GCSS_KEY
*
* \ingroup gcss
*
* \return pointer to the descendant if success
* \return nullptr if error
*/
virtual IGraphConfig* getDescendant(ia_uid) const = 0;
/**
* Get descendant by GCSS_KEY, or array of keys
*
* \ingroup gcss
*
* possible usages:
* getDescendant(GCSS_KEY_GRAPH);
* getDescendant({GCSS_KEY_GRAPH, GCSS_KEY_CONNECTION});
*
* \return pointer to the descendant if success
* \return nullptr if error
*/
virtual IGraphConfig* getDescendant(const ItemUID&) const = 0;
/**
* DEPRECATED
* Get descendant by string
*
* \ingroup gcss
*
* \return pointer to the descendant if success
* \return nullptr if error
*/
virtual IGraphConfig* getDescendantByString(const std::string &str) const = 0;
/**
* Get int value for an attribute given as GCSS_KEY
*
* \ingroup gcss
*
* \param[in] gcss key
* \param[out] int value
* \return css_err_none if success
*/
virtual css_err_t getValue(ia_uid, int&) const = 0;
virtual css_err_t getValue(const ItemUID&, int&) const = 0;
/**
* Get str value for an attribute given as GCSS_KEY
*
* \ingroup gcss
*
* \param[in] gcss key
* \param[out] str value
* \return css_err_none if success
*/
virtual css_err_t getValue(ia_uid, std::string&) const = 0;
virtual css_err_t getValue(const ItemUID&, std::string&) const = 0;
/**
* Set int value for an attribute given as GCSS_KEY
*
* \ingroup gcss
*
* \param[in] gcss key
* \param[in] int value
* \return css_err_none if success
*/
virtual css_err_t setValue(ia_uid, int) = 0;
virtual css_err_t setValue(const ItemUID&, int) = 0;
/**
* Set str value for an attribute given as GCSS_KEY
*
* \ingroup gcss
*
* \param[in] gcss key
* \param[in] str value
* \return css_err_none if success
*/
virtual css_err_t setValue(ia_uid, const std::string&) = 0;
virtual css_err_t setValue(const ItemUID&, const std::string&) = 0;
};
} // namespace
extern "C" {
#endif
#define GCSS_KEY(key, str) GCSS_KEY_##key,
#define GCSS_KEY_SECTION_START(key, str, val) GCSS_KEY_##key = val,
typedef enum _GraphConfigKey {
#include "gcss_keys.h"
GCSS_KEY_START_CUSTOM_KEYS = 0x8000,
} GraphConfigKey;
#undef GCSS_KEY
#undef GCSS_KEY_SECTION_START
#ifdef __cplusplus
}
#endif
#endif