210 lines
6.2 KiB
C++
Executable File
210 lines
6.2 KiB
C++
Executable File
/*
|
|
* Copyright (c) 2021 Rockchip 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.
|
|
*
|
|
*/
|
|
#ifndef _MEDIA_INFO_H_
|
|
#define _MEDIA_INFO_H_
|
|
|
|
#include <v4l2_device.h>
|
|
#include <map>
|
|
#include "mediactl/mediactl-priv.h"
|
|
#include <linux/v4l2-subdev.h>
|
|
#include "xcam_thread.h"
|
|
#include "xcam_log.h"
|
|
#include "Stream.h"
|
|
#include <time.h>
|
|
#include <unistd.h>
|
|
|
|
using namespace XCam;
|
|
|
|
namespace RkRawStream {
|
|
|
|
//#define MAX_MEDIA_INDEX 16
|
|
//#define DEV_PATH_LEN 64
|
|
//#define SENSOR_ATTACHED_FLASH_MAX_NUM 2
|
|
//#define MAX_CAM_NUM 8
|
|
|
|
//#define MAX_ISP_LINKED_VICAP_CNT 4
|
|
|
|
#define STREAM_ISP_BUF_NUM 5
|
|
#define STREAM_VIPCAP_BUF_NUM 5
|
|
|
|
/*
|
|
typedef struct {
|
|
int model_idx;
|
|
int logic_id;
|
|
int phy_id; // physical isp id
|
|
int linked_sensor;
|
|
bool is_multi_isp_mode; // isp-unit mode, 2 isp to 1
|
|
bool isMultiplex; // muliplex mode, virtually sed by more than one sensor
|
|
bool linked_dvp;
|
|
bool valid;
|
|
char media_dev_path[DEV_PATH_LEN];
|
|
char isp_dev_path[DEV_PATH_LEN];
|
|
char csi_dev_path[DEV_PATH_LEN];
|
|
char mpfbc_dev_path[DEV_PATH_LEN];
|
|
char main_path[DEV_PATH_LEN];
|
|
char self_path[DEV_PATH_LEN];
|
|
char rawwr0_path[DEV_PATH_LEN];
|
|
char rawwr1_path[DEV_PATH_LEN];
|
|
char rawwr2_path[DEV_PATH_LEN];
|
|
char rawwr3_path[DEV_PATH_LEN];
|
|
char dma_path[DEV_PATH_LEN];
|
|
char rawrd0_m_path[DEV_PATH_LEN];
|
|
char rawrd1_l_path[DEV_PATH_LEN];
|
|
char rawrd2_s_path[DEV_PATH_LEN];
|
|
char stats_path[DEV_PATH_LEN];
|
|
char input_params_path[DEV_PATH_LEN];
|
|
char mipi_luma_path[DEV_PATH_LEN];
|
|
char mipi_dphy_rx_path[DEV_PATH_LEN];
|
|
char linked_vicap[MAX_ISP_LINKED_VICAP_CNT][DEV_PATH_LEN];
|
|
} rk_aiq_isp_t;
|
|
|
|
typedef struct {
|
|
int model_idx;
|
|
bool valid;
|
|
char media_dev_path[DEV_PATH_LEN];
|
|
char pp_input_image_path[DEV_PATH_LEN];
|
|
char pp_m_bypass_path[DEV_PATH_LEN];
|
|
char pp_scale0_path[DEV_PATH_LEN];
|
|
char pp_scale1_path[DEV_PATH_LEN];
|
|
char pp_scale2_path[DEV_PATH_LEN];
|
|
char pp_input_params_path[DEV_PATH_LEN];
|
|
char pp_stats_path[DEV_PATH_LEN];
|
|
char pp_tnr_params_path[DEV_PATH_LEN];
|
|
char pp_tnr_stats_path[DEV_PATH_LEN];
|
|
char pp_nr_params_path[DEV_PATH_LEN];
|
|
char pp_nr_stats_path[DEV_PATH_LEN];
|
|
char pp_fec_params_path[DEV_PATH_LEN];
|
|
char pp_dev_path[DEV_PATH_LEN];
|
|
} rk_aiq_ispp_t;
|
|
|
|
typedef struct {
|
|
int isp_ver;
|
|
int awb_ver;
|
|
int aec_ver;
|
|
int afc_ver;
|
|
int ahdr_ver;
|
|
int blc_ver;
|
|
int dpcc_ver;
|
|
int anr_ver;
|
|
int debayer_ver;
|
|
int lsc_ver;
|
|
int ccm_ver;
|
|
int gamma_ver;
|
|
int gic_ver;
|
|
int sharp_ver;
|
|
int dehaze_ver;
|
|
} rk_aiq_hw_ver_t;
|
|
|
|
typedef struct {
|
|
rk_aiq_isp_t isp_info[MAX_CAM_NUM];
|
|
rk_aiq_ispp_t ispp_info[MAX_CAM_NUM];
|
|
rk_aiq_hw_ver_t hw_ver_info;
|
|
} rk_aiq_isp_hw_info_t;
|
|
|
|
typedef struct {
|
|
int model_idx;
|
|
char media_dev_path[DEV_PATH_LEN];
|
|
char mipi_id0[DEV_PATH_LEN];
|
|
char mipi_id1[DEV_PATH_LEN];
|
|
char mipi_id2[DEV_PATH_LEN];
|
|
char mipi_id3[DEV_PATH_LEN];
|
|
char mipi_scl0[DEV_PATH_LEN];
|
|
char mipi_scl1[DEV_PATH_LEN];
|
|
char mipi_scl2[DEV_PATH_LEN];
|
|
char mipi_scl3[DEV_PATH_LEN];
|
|
char dvp_id0[DEV_PATH_LEN];
|
|
char dvp_id1[DEV_PATH_LEN];
|
|
char dvp_id2[DEV_PATH_LEN];
|
|
char dvp_id3[DEV_PATH_LEN];
|
|
char mipi_dphy_rx_path[DEV_PATH_LEN];
|
|
char mipi_csi2_sd_path[DEV_PATH_LEN];
|
|
char lvds_sd_path[DEV_PATH_LEN];
|
|
char mipi_luma_path[DEV_PATH_LEN];
|
|
char stream_cif_path[DEV_PATH_LEN];
|
|
char dvp_sof_sd_path[DEV_PATH_LEN];
|
|
char model_str[DEV_PATH_LEN];
|
|
} rk_aiq_cif_info_t;
|
|
|
|
typedef struct {
|
|
rk_aiq_cif_info_t cif_info[MAX_CAM_NUM];
|
|
rk_aiq_hw_ver_t hw_ver_info;
|
|
} rk_aiq_cif_hw_info_t;
|
|
|
|
typedef struct {
|
|
bool pdaf_support;
|
|
uint32_t pdaf_vc;
|
|
uint32_t pdaf_width;
|
|
uint32_t pdaf_height;
|
|
uint32_t pdaf_pixelformat;
|
|
uint32_t pdaf_code;
|
|
char pdaf_vdev[DEV_PATH_LEN];
|
|
} rk_sensor_pdaf_info_t;
|
|
|
|
typedef struct {
|
|
std::string sensor_name;
|
|
std::string device_name;
|
|
std::string len_name;
|
|
std::string parent_media_dev;
|
|
int media_node_index;
|
|
int csi_port;
|
|
std::string module_lens_dev_name; // matched using mPhyModuleIndex
|
|
std::string module_ircut_dev_name;
|
|
int flash_num;
|
|
std::string module_flash_dev_name[SENSOR_ATTACHED_FLASH_MAX_NUM]; // matched using mPhyModuleIndex
|
|
bool fl_strth_adj_sup;
|
|
int flash_ir_num;
|
|
std::string module_flash_ir_dev_name[SENSOR_ATTACHED_FLASH_MAX_NUM];
|
|
bool fl_ir_strth_adj_sup;
|
|
std::string module_real_sensor_name; //parsed frome sensor entity name
|
|
std::string module_index_str; // parsed from sensor entity name
|
|
char phy_module_orient; // parsed from sensor entity name
|
|
std::vector<rk_frame_fmt_t> frame_size;
|
|
rk_aiq_isp_t *isp_info;
|
|
rk_aiq_cif_info_t *cif_info;
|
|
rk_aiq_ispp_t *ispp_info;
|
|
bool linked_to_isp;
|
|
bool dvp_itf;
|
|
struct rkmodule_inf mod_info;
|
|
} rk_sensor_full_info_t;
|
|
*/
|
|
|
|
int8_t pixFmt2Bpp(uint32_t pixFmt);
|
|
|
|
|
|
class MediaInfo
|
|
{
|
|
public:
|
|
MediaInfo();
|
|
virtual ~MediaInfo();
|
|
rk_aiq_isp_hw_info_t mIspHwInfos;
|
|
rk_aiq_cif_hw_info_t mCifHwInfos;
|
|
std::map<std::string, SmartPtr<rk_aiq_static_info_t>> mCamHwInfos;
|
|
std::map<std::string, SmartPtr<rk_sensor_full_info_t>> mSensorHwInfos;
|
|
bool mIsMultiIspMode;
|
|
uint16_t mMultiIspExtendedPixel;
|
|
void findAttachedSubdevs(struct media_device *device, uint32_t count, rk_sensor_full_info_t *s_info);
|
|
XCamReturn initCamHwInfos();
|
|
rk_aiq_static_info_t* getStaticCamHwInfo(const char* sns_ent_name, uint16_t index = 0);
|
|
XCamReturn clearStaticCamHwInfo();
|
|
void getCamHwEntNames(char buf[12][32]);
|
|
rk_sensor_full_info_t* getSensorFullInfo(char* sns_ent_name, uint16_t index);
|
|
void offline(const char* isp_driver, const char* offline_sns_ent_name);
|
|
};
|
|
|
|
}
|
|
#endif
|