/* 
 | 
 *  Copyright (c) 2019 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. 
 | 
 * 
 | 
 */ 
 | 
  
 | 
#include "FakeCamHwIsp20.h" 
 | 
#include "FakeSensorHw.h" 
 | 
#include "Isp20PollThread.h" 
 | 
#include "rk_isp20_hw.h" 
 | 
#include "Isp20_module_dbg.h" 
 | 
#include "mediactl/mediactl-priv.h" 
 | 
#include <linux/v4l2-subdev.h> 
 | 
#include <sys/mman.h> 
 | 
#include <sys/stat.h> 
 | 
  
 | 
namespace RkCam { 
 | 
FakeCamHwIsp20::FakeCamHwIsp20() 
 | 
{ 
 | 
    ENTER_CAMHW_FUNCTION(); 
 | 
    _rx_memory_type = V4L2_MEMORY_DMABUF; 
 | 
    _tx_memory_type = V4L2_MEMORY_DMABUF; 
 | 
    EXIT_CAMHW_FUNCTION(); 
 | 
} 
 | 
  
 | 
FakeCamHwIsp20::~FakeCamHwIsp20() 
 | 
{ 
 | 
    ENTER_CAMHW_FUNCTION(); 
 | 
    EXIT_CAMHW_FUNCTION(); 
 | 
} 
 | 
  
 | 
XCamReturn 
 | 
FakeCamHwIsp20::init(const char* sns_ent_name) 
 | 
{ 
 | 
    XCamReturn ret = XCAM_RETURN_NO_ERROR; 
 | 
    SmartPtr<Isp20PollThread> isp20Pollthread; 
 | 
    SmartPtr<PollThread> isp20LumaPollthread; 
 | 
    SmartPtr<PollThread> isp20IsppPollthread; 
 | 
    SmartPtr<BaseSensorHw> sensorHw; 
 | 
    SmartPtr<LensHw> lensHw; 
 | 
    std::string sensor_name(sns_ent_name); 
 | 
  
 | 
    ENTER_CAMHW_FUNCTION(); 
 | 
  
 | 
  
 | 
    std::map<std::string, SmartPtr<rk_sensor_full_info_t>>::iterator it; 
 | 
    if ((it = mSensorHwInfos.find(sensor_name)) == mSensorHwInfos.end()) { 
 | 
        LOGE_CAMHW_SUBM(FAKECAM_SUBM, "can't find sensor %s", sns_ent_name); 
 | 
        return XCAM_RETURN_ERROR_SENSOR; 
 | 
    } 
 | 
    rk_sensor_full_info_t *s_info = it->second.ptr(); 
 | 
    sensorHw = new FakeSensorHw(); 
 | 
    mSensorDev = sensorHw; 
 | 
    mSensorDev->open(); 
 | 
    strncpy(sns_name, sns_ent_name, sizeof(sns_name)); 
 | 
  
 | 
    if (s_info->linked_to_isp) 
 | 
        _linked_to_isp = true; 
 | 
  
 | 
    mIspCoreDev = new V4l2SubDevice(s_info->isp_info->isp_dev_path); 
 | 
    mIspCoreDev->open(); 
 | 
    if (s_info->linked_to_isp) 
 | 
        mIspCoreDev->subscribe_event(V4L2_EVENT_FRAME_SYNC); 
 | 
  
 | 
    if (_linked_to_isp) { 
 | 
        mIspLumaDev = new V4l2Device(s_info->isp_info->mipi_luma_path); 
 | 
    } else 
 | 
        mIspLumaDev = new V4l2Device(s_info->cif_info->mipi_luma_path); 
 | 
    mIspLumaDev->open(); 
 | 
  
 | 
    _ispp_sd = new V4l2SubDevice(s_info->ispp_info->pp_dev_path); 
 | 
    _ispp_sd ->open(); 
 | 
    LOGI_CAMHW_SUBM(FAKECAM_SUBM, "pp_dev_path: %s\n", s_info->ispp_info->pp_dev_path); 
 | 
  
 | 
#ifndef DISABLE_PP_STATS 
 | 
    mIsppStatsDev = new V4l2Device(s_info->ispp_info->pp_stats_path); 
 | 
    mIsppStatsDev->open(); 
 | 
#endif 
 | 
    mIsppParamsDev = new V4l2Device (s_info->ispp_info->pp_input_params_path); 
 | 
    mIsppParamsDev->open(); 
 | 
  
 | 
    mIspStatsDev = new V4l2Device (s_info->isp_info->stats_path); 
 | 
    mIspStatsDev->open(); 
 | 
    mIspParamsDev = new V4l2Device (s_info->isp_info->input_params_path); 
 | 
    mIspParamsDev->open(); 
 | 
  
 | 
    if (!s_info->module_lens_dev_name.empty()) { 
 | 
        lensHw = new LensHw(s_info->module_lens_dev_name.c_str()); 
 | 
        mLensDev = lensHw; 
 | 
        mLensDev->open(); 
 | 
    } 
 | 
  
 | 
    if(!s_info->module_ircut_dev_name.empty()) { 
 | 
        mIrcutDev = new V4l2SubDevice(s_info->module_ircut_dev_name.c_str()); 
 | 
        mIrcutDev->open(); 
 | 
    } 
 | 
  
 | 
    if (!_linked_to_isp) { 
 | 
        if (strlen(s_info->cif_info->mipi_csi2_sd_path) > 0) 
 | 
            _cif_csi2_sd = new V4l2SubDevice (s_info->cif_info->mipi_csi2_sd_path); 
 | 
        else if (strlen(s_info->cif_info->lvds_sd_path) > 0) 
 | 
            _cif_csi2_sd = new V4l2SubDevice (s_info->cif_info->lvds_sd_path); 
 | 
        else 
 | 
            LOGW_CAMHW_SUBM(FAKECAM_SUBM, "_cif_csi2_sd is null! \n"); 
 | 
  
 | 
        _cif_csi2_sd->open(); 
 | 
        _cif_csi2_sd->subscribe_event(V4L2_EVENT_FRAME_SYNC); 
 | 
    } 
 | 
  
 | 
    isp20Pollthread = new Isp20PollThread(); 
 | 
    isp20Pollthread->set_event_handle_dev(sensorHw); 
 | 
    if(lensHw.ptr()) { 
 | 
        isp20Pollthread->set_focus_handle_dev(lensHw); 
 | 
        //isp20Pollthread->set_iris_handle_dev(lensHw); 
 | 
    } 
 | 
  
 | 
    mPollthread = isp20Pollthread; 
 | 
    if (_linked_to_isp) 
 | 
        mPollthread->set_event_device(mIspCoreDev); 
 | 
    else 
 | 
        mPollthread->set_event_device(_cif_csi2_sd); 
 | 
    mPollthread->set_isp_stats_device(mIspStatsDev); 
 | 
    mPollthread->set_isp_params_devices(mIspParamsDev, mIsppParamsDev); 
 | 
    mPollthread->set_poll_callback (this); 
 | 
  
 | 
    isp20LumaPollthread = new PollThread(); 
 | 
    mPollLumathread = isp20LumaPollthread; 
 | 
    mPollLumathread->set_isp_luma_device(mIspLumaDev); 
 | 
    mPollLumathread->set_poll_callback (this); 
 | 
  
 | 
#ifndef DISABLE_PP 
 | 
#ifndef DISABLE_PP_STATS 
 | 
    isp20IsppPollthread = new PollThread(); 
 | 
    mPollIsppthread = isp20IsppPollthread; 
 | 
    mPollIsppthread->set_ispp_stats_device(mIsppStatsDev); 
 | 
    mPollIsppthread->set_poll_callback (this); 
 | 
#endif 
 | 
#endif 
 | 
  
 | 
    if (s_info->flash_num) { 
 | 
        mFlashLight = new FlashLightHw(s_info->module_flash_dev_name, s_info->flash_num); 
 | 
        mFlashLight->init(s_info->flash_num); 
 | 
    } 
 | 
    if (s_info->flash_ir_num) { 
 | 
        mFlashLightIr = new FlashLightHw(s_info->module_flash_ir_dev_name, s_info->flash_ir_num); 
 | 
        mFlashLightIr->init(s_info->flash_ir_num); 
 | 
    } 
 | 
  
 | 
    xcam_mem_clear (_full_active_isp_params); 
 | 
    xcam_mem_clear (_full_active_ispp_params); 
 | 
  
 | 
    _state = CAM_HW_STATE_INITED; 
 | 
  
 | 
    EXIT_CAMHW_FUNCTION(); 
 | 
  
 | 
    return XCAM_RETURN_NO_ERROR; 
 | 
} 
 | 
  
 | 
XCamReturn 
 | 
FakeCamHwIsp20::prepare(uint32_t width, uint32_t height, int mode, int t_delay, int g_delay) 
 | 
{ 
 | 
    XCamReturn ret = XCAM_RETURN_NO_ERROR; 
 | 
    SmartPtr<Isp20PollThread> isp20Pollthread; 
 | 
    SmartPtr<BaseSensorHw> sensorHw; 
 | 
  
 | 
    ENTER_CAMHW_FUNCTION(); 
 | 
  
 | 
    XCAM_ASSERT (mCalibDb); 
 | 
  
 | 
    _hdr_mode = mode; 
 | 
  
 | 
    Isp20Params::set_working_mode(_hdr_mode); 
 | 
  
 | 
    std::map<std::string, SmartPtr<rk_sensor_full_info_t>>::iterator it; 
 | 
    if ((it = mSensorHwInfos.find(sns_name)) == mSensorHwInfos.end()) { 
 | 
        LOGE_CAMHW_SUBM(FAKECAM_SUBM, "can't find sensor %s", sns_name); 
 | 
        return XCAM_RETURN_ERROR_SENSOR; 
 | 
    } 
 | 
  
 | 
    rk_sensor_full_info_t *s_info = it->second.ptr(); 
 | 
    int isp_index = s_info->isp_info->model_idx; 
 | 
    LOGI_CAMHW_SUBM(FAKECAM_SUBM, "sensor_name(%s) is linked to isp_index(%d)", 
 | 
                    sns_name, isp_index); 
 | 
    if (_linked_to_isp) { 
 | 
        if (_hdr_mode != RK_AIQ_WORKING_MODE_NORMAL) { 
 | 
            setupHdrLink(RK_AIQ_WORKING_MODE_ISP_HDR3, isp_index, true); 
 | 
        } else { 
 | 
            if (mNoReadBack) 
 | 
                setupHdrLink(RK_AIQ_WORKING_MODE_ISP_HDR3, isp_index, false); 
 | 
            else 
 | 
                setupHdrLink(RK_AIQ_WORKING_MODE_ISP_HDR3, isp_index, true); 
 | 
        } 
 | 
    } else { 
 | 
        setupHdrLink(RK_AIQ_WORKING_MODE_ISP_HDR3, isp_index, true); 
 | 
        int cif_index = s_info->cif_info->model_idx; 
 | 
        setupHdrLink_vidcap(_hdr_mode, cif_index, true); 
 | 
    } 
 | 
  
 | 
    sensorHw = mSensorDev.dynamic_cast_ptr<BaseSensorHw>(); 
 | 
    ret = sensorHw->set_working_mode(mode); 
 | 
    if (ret) { 
 | 
        LOGW_CAMHW_SUBM(FAKECAM_SUBM, "set sensor mode error !"); 
 | 
        return ret; 
 | 
    } 
 | 
  
 | 
    setExpDelayInfo(mode); 
 | 
    setLensVcmCfg(); 
 | 
    init_mipi_devices(s_info); 
 | 
  
 | 
    isp20Pollthread = mPollthread.dynamic_cast_ptr<Isp20PollThread>(); 
 | 
    isp20Pollthread->set_working_mode(mode, _linked_to_isp, false); 
 | 
    isp20Pollthread->setCamHw(this); 
 | 
    isp20Pollthread->set_mipi_devs(_mipi_tx_devs, _mipi_rx_devs, mIspCoreDev); 
 | 
  
 | 
    SmartPtr<FakeSensorHw> fakeSensorHw = mSensorDev.dynamic_cast_ptr<FakeSensorHw>(); 
 | 
    fakeSensorHw->set_mipi_tx_devs(_mipi_tx_devs); 
 | 
  
 | 
    _ispp_module_init_ens = 0; 
 | 
  
 | 
    ret = setupPipelineFmt(); 
 | 
    if (ret < 0) { 
 | 
        LOGE_CAMHW_SUBM(FAKECAM_SUBM, "setupPipelineFmt err: %d\n", ret); 
 | 
    } 
 | 
  
 | 
    if (!_linked_to_isp) 
 | 
        prepare_cif_mipi(); 
 | 
  
 | 
    isp20Pollthread->set_event_handle_dev(sensorHw); 
 | 
  
 | 
    _state = CAM_HW_STATE_PREPARED; 
 | 
    EXIT_CAMHW_FUNCTION(); 
 | 
    return ret; 
 | 
} 
 | 
  
 | 
XCamReturn 
 | 
FakeCamHwIsp20::init_mipi_devices(rk_sensor_full_info_t *s_info) 
 | 
{ 
 | 
    /* 
 | 
     * for _mipi_tx_devs, index 0 refer to short frame always, inedex 1 refer 
 | 
     * to middle frame always, index 2 refert to long frame always. 
 | 
     * for CIF usecase, because mipi_id0 refert to long frame always, so we 
 | 
     * should know the HDR mode firstly befor building the relationship between 
 | 
     * _mipi_tx_devs array and mipi_idx. here we just set the mipi_idx to 
 | 
     * _mipi_tx_devs, we will build the real relation in start. 
 | 
     * for CIF usecase, rawwr2_path is always connected to _mipi_tx_devs[0], 
 | 
     * rawwr0_path is always connected to _mipi_tx_devs[1], and rawwr1_path is always 
 | 
     * connected to _mipi_tx_devs[0] 
 | 
     */ 
 | 
    //short frame 
 | 
    _mipi_tx_devs[0] = new FakeV4l2Device (); 
 | 
    _mipi_tx_devs[0]->open(); 
 | 
    _mipi_tx_devs[0]->set_mem_type(_tx_memory_type); 
 | 
    _mipi_tx_devs[0]->set_buf_type(V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE); 
 | 
  
 | 
    _mipi_rx_devs[0] = new V4l2Device (s_info->isp_info->rawrd2_s_path);//rkisp_rawrd2_s 
 | 
    _mipi_rx_devs[0]->open(); 
 | 
    _mipi_rx_devs[0]->set_mem_type(_rx_memory_type); 
 | 
    //mid frame 
 | 
    _mipi_tx_devs[1] = new FakeV4l2Device (); 
 | 
    _mipi_tx_devs[1]->open(); 
 | 
    _mipi_tx_devs[1]->set_mem_type(_tx_memory_type); 
 | 
    _mipi_tx_devs[1]->set_buf_type(V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE); 
 | 
  
 | 
    _mipi_rx_devs[1] = new V4l2Device (s_info->isp_info->rawrd0_m_path);//rkisp_rawrd0_m 
 | 
    _mipi_rx_devs[1]->open(); 
 | 
    _mipi_rx_devs[1]->set_mem_type(_rx_memory_type); 
 | 
    //long frame 
 | 
    _mipi_tx_devs[2] = new FakeV4l2Device (); 
 | 
    _mipi_tx_devs[2]->open(); 
 | 
    _mipi_tx_devs[2]->set_mem_type(_tx_memory_type); 
 | 
    _mipi_tx_devs[2]->set_buf_type(V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE); 
 | 
  
 | 
    _mipi_rx_devs[2] = new V4l2Device (s_info->isp_info->rawrd1_l_path);//rkisp_rawrd1_l 
 | 
    _mipi_rx_devs[2]->open(); 
 | 
    _mipi_rx_devs[2]->set_mem_type(_rx_memory_type); 
 | 
    for (int i = 0; i < 3; i++) { 
 | 
        if (_linked_to_isp) { 
 | 
            if (_rawbuf_type == RK_AIQ_RAW_FILE) { 
 | 
                _mipi_tx_devs[0]->set_use_type(2); 
 | 
                _mipi_tx_devs[i]->set_buffer_count(1); 
 | 
                _mipi_rx_devs[i]->set_buffer_count(1); 
 | 
            } else if (_rawbuf_type == RK_AIQ_RAW_ADDR) { 
 | 
                 _mipi_tx_devs[0]->set_use_type(1); 
 | 
                _mipi_tx_devs[i]->set_buffer_count(ISP_TX_BUF_NUM); 
 | 
                _mipi_rx_devs[i]->set_buffer_count(ISP_TX_BUF_NUM); 
 | 
            } else { 
 | 
                _mipi_tx_devs[i]->set_buffer_count(ISP_TX_BUF_NUM); 
 | 
                _mipi_rx_devs[i]->set_buffer_count(ISP_TX_BUF_NUM); 
 | 
            } 
 | 
        } else { 
 | 
            _mipi_tx_devs[i]->set_buffer_count(VIPCAP_TX_BUF_NUM); 
 | 
            _mipi_rx_devs[i]->set_buffer_count(VIPCAP_TX_BUF_NUM); 
 | 
        } 
 | 
        _mipi_tx_devs[i]->set_buf_sync (true); 
 | 
        _mipi_rx_devs[i]->set_buf_sync (true); 
 | 
    } 
 | 
    return XCAM_RETURN_NO_ERROR; 
 | 
} 
 | 
  
 | 
XCamReturn 
 | 
FakeCamHwIsp20::enqueueRawBuffer(void *rawdata, bool sync) 
 | 
{ 
 | 
    ENTER_XCORE_FUNCTION(); 
 | 
    XCamReturn ret = XCAM_RETURN_NO_ERROR; 
 | 
    struct rk_aiq_vbuf vbuf; 
 | 
    memset(&vbuf, 0, sizeof(vbuf)); 
 | 
    parse_rk_rawdata(rawdata, &vbuf); 
 | 
    SmartPtr<FakeSensorHw> fakeSensor = mSensorDev.dynamic_cast_ptr<FakeSensorHw>(); 
 | 
    fakeSensor->enqueue_rawbuffer(&vbuf, sync); 
 | 
    EXIT_XCORE_FUNCTION(); 
 | 
    return ret; 
 | 
} 
 | 
  
 | 
XCamReturn 
 | 
FakeCamHwIsp20::enqueueRawFile(const char *path) 
 | 
{ 
 | 
    ENTER_XCORE_FUNCTION(); 
 | 
    XCamReturn ret = XCAM_RETURN_NO_ERROR; 
 | 
    struct rk_aiq_vbuf vbuf; 
 | 
    memset(&vbuf, 0, sizeof(vbuf)); 
 | 
    if (0 != access(path, F_OK)) { 
 | 
        LOGE_CAMHW_SUBM(FAKECAM_SUBM, "file: %s is not exist!", path); 
 | 
        return XCAM_RETURN_ERROR_PARAM; 
 | 
    } 
 | 
  
 | 
    FILE *fp = fopen(path, "rb"); 
 | 
    if (!fp) { 
 | 
        LOGE_CAMHW_SUBM(FAKECAM_SUBM, "open file: %s failed", path); 
 | 
        return XCAM_RETURN_ERROR_FAILED; 
 | 
    } 
 | 
  
 | 
    parse_rk_rawfile(fp, &vbuf); 
 | 
    fclose(fp); 
 | 
    SmartPtr<FakeSensorHw> fakeSensor = mSensorDev.dynamic_cast_ptr<FakeSensorHw>(); 
 | 
    fakeSensor->enqueue_rawbuffer(&vbuf, true); 
 | 
    EXIT_XCORE_FUNCTION(); 
 | 
    return ret; 
 | 
} 
 | 
  
 | 
void 
 | 
FakeCamHwIsp20::parse_rk_rawdata(void *rawdata, struct rk_aiq_vbuf *vbuf) 
 | 
{ 
 | 
    unsigned short tag = 0; 
 | 
    struct _block_header header; 
 | 
    uint8_t *p = (uint8_t *)rawdata; 
 | 
    uint8_t *actual_raw[3]; 
 | 
    int actual_raw_len[3]; 
 | 
    bool is_actual_rawdata = false; 
 | 
    bool bExit = false; 
 | 
    while(!bExit){ 
 | 
        tag = *((unsigned short*)p); 
 | 
        LOGD_CAMHW_SUBM(FAKECAM_SUBM, "tag=0x%04x\n",tag); 
 | 
        switch (tag) 
 | 
        { 
 | 
            case START_TAG: 
 | 
                p = p+TAG_BYTE_LEN; 
 | 
                memset(_st_addr, 0, sizeof(_st_addr)); 
 | 
                memset(&_rawfmt, 0, sizeof(_rawfmt)); 
 | 
                memset(&_finfo, 0, sizeof(_finfo)); 
 | 
                break; 
 | 
            case NORMAL_RAW_TAG: 
 | 
            { 
 | 
                header = *((struct _block_header *)p); 
 | 
                p = p + sizeof(struct _block_header); 
 | 
                if (header.block_length == sizeof(struct _st_addrinfo)) { 
 | 
                    _st_addr[0] = *((struct _st_addrinfo*)p); 
 | 
                }else{ 
 | 
                    //actual raw data 
 | 
                    is_actual_rawdata = true; 
 | 
                    actual_raw[0] = p; 
 | 
                    actual_raw_len[0] = header.block_length; 
 | 
                } 
 | 
                p = p + header.block_length; 
 | 
  
 | 
                break; 
 | 
            } 
 | 
            case HDR_S_RAW_TAG: 
 | 
            { 
 | 
                header = *((struct _block_header *)p); 
 | 
                p = p + sizeof(struct _block_header); 
 | 
                if (header.block_length == sizeof(struct _st_addrinfo)) { 
 | 
                    _st_addr[0] = *((struct _st_addrinfo*)p); 
 | 
                }else{ 
 | 
                    //actual raw data 
 | 
                    is_actual_rawdata = true; 
 | 
                    actual_raw[0] = p; 
 | 
                    actual_raw_len[0] = header.block_length; 
 | 
                } 
 | 
                p = p + header.block_length; 
 | 
                break; 
 | 
            } 
 | 
            case HDR_M_RAW_TAG: 
 | 
            { 
 | 
                header = *((struct _block_header *)p); 
 | 
                p = p + sizeof(struct _block_header); 
 | 
                if (header.block_length == sizeof(struct _st_addrinfo)) { 
 | 
                    _st_addr[1] = *((struct _st_addrinfo*)p); 
 | 
                }else{ 
 | 
                    //actual raw data 
 | 
                    is_actual_rawdata = true; 
 | 
                    actual_raw[1] = p; 
 | 
                    actual_raw_len[1] = header.block_length; 
 | 
                } 
 | 
                p = p + header.block_length; 
 | 
                break; 
 | 
            } 
 | 
            case HDR_L_RAW_TAG: 
 | 
            { 
 | 
                header = *((struct _block_header *)p); 
 | 
                p = p + sizeof(struct _block_header); 
 | 
                if (header.block_length == sizeof(struct _st_addrinfo)) { 
 | 
                    _st_addr[2] = *((struct _st_addrinfo*)p); 
 | 
                }else{ 
 | 
                    //actual raw data 
 | 
                    is_actual_rawdata = true; 
 | 
                    actual_raw[2] = p; 
 | 
                    actual_raw_len[2] = header.block_length; 
 | 
                } 
 | 
                p = p + header.block_length; 
 | 
                break; 
 | 
            } 
 | 
            case FORMAT_TAG: 
 | 
            { 
 | 
                _rawfmt = *((struct _raw_format *)p); 
 | 
                LOGD_CAMHW_SUBM(FAKECAM_SUBM, "hdr_mode=%d,bayer_fmt=%d\n",_rawfmt.hdr_mode,_rawfmt.bayer_fmt); 
 | 
                p = p + sizeof(struct _block_header) + _rawfmt.size; 
 | 
                break; 
 | 
            } 
 | 
            case STATS_TAG: 
 | 
            { 
 | 
                _finfo = *((struct _frame_info *)p); 
 | 
                p = p + sizeof(struct _block_header) + _finfo.size; 
 | 
                break; 
 | 
            } 
 | 
            case ISP_REG_FMT_TAG: 
 | 
            { 
 | 
                header = *((struct _block_header *)p); 
 | 
                p += sizeof(struct _block_header); 
 | 
                p = p + header.block_length; 
 | 
                break; 
 | 
            } 
 | 
            case ISP_REG_TAG: 
 | 
            { 
 | 
                header = *((struct _block_header *)p); 
 | 
                p += sizeof(struct _block_header); 
 | 
                p = p + header.block_length; 
 | 
                break; 
 | 
            } 
 | 
            case ISPP_REG_FMT_TAG: 
 | 
            { 
 | 
                header = *((struct _block_header *)p); 
 | 
                p += sizeof(struct _block_header); 
 | 
                p = p + header.block_length; 
 | 
                break; 
 | 
            } 
 | 
            case ISPP_REG_TAG: 
 | 
            { 
 | 
                header = *((struct _block_header *)p); 
 | 
                p += sizeof(struct _block_header); 
 | 
                p = p + header.block_length; 
 | 
                break; 
 | 
            } 
 | 
            case PLATFORM_TAG: 
 | 
            { 
 | 
                header = *((struct _block_header *)p); 
 | 
                p += sizeof(struct _block_header); 
 | 
                p = p + header.block_length; 
 | 
                break; 
 | 
            } 
 | 
            case END_TAG: 
 | 
            { 
 | 
                bExit = true; 
 | 
                break; 
 | 
            } 
 | 
            default: 
 | 
            { 
 | 
                LOGE_CAMHW_SUBM(FAKECAM_SUBM, "Not support TAG(0x%04x)\n", tag); 
 | 
                bExit = true; 
 | 
                break; 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
     vbuf->frame_width = _rawfmt.width; 
 | 
     vbuf->frame_height = _rawfmt.height; 
 | 
     vbuf->base_addr = rawdata; 
 | 
     if (_rawfmt.hdr_mode == 1) { 
 | 
         if (is_actual_rawdata) { 
 | 
            vbuf->buf_info[0].data_addr = actual_raw[0]; 
 | 
            vbuf->buf_info[0].data_fd = 0; 
 | 
            vbuf->buf_info[0].data_length = actual_raw_len[0]; 
 | 
         }else{ 
 | 
             if (_rawbuf_type == RK_AIQ_RAW_ADDR) { 
 | 
                 if (sizeof(uint8_t*) == 4) 
 | 
                    vbuf->buf_info[0].data_addr = (uint8_t*)(_st_addr[0].laddr); 
 | 
                 else if (sizeof(uint8_t*) == 8) 
 | 
                    vbuf->buf_info[0].data_addr = (uint8_t*)(((uint64_t)_st_addr[0].haddr << 32) + _st_addr[0].laddr); 
 | 
  
 | 
                vbuf->buf_info[0].data_fd = 0; 
 | 
             } else if (_rawbuf_type == RK_AIQ_RAW_FD) { 
 | 
                 vbuf->buf_info[0].data_fd = _st_addr[0].fd; 
 | 
                 vbuf->buf_info[0].data_addr = NULL; 
 | 
             } 
 | 
             vbuf->buf_info[0].data_length = _st_addr[0].size; 
 | 
         } 
 | 
          LOGD_CAMHW_SUBM(FAKECAM_SUBM,"data_addr=%p,fd=%d,length=%d\n", 
 | 
                                       vbuf->buf_info[0].data_addr, 
 | 
                                       vbuf->buf_info[0].data_fd, 
 | 
                                       vbuf->buf_info[0].data_length); 
 | 
  
 | 
         vbuf->buf_info[0].frame_id = _rawfmt.frame_id; 
 | 
         vbuf->buf_info[0].exp_gain = (uint32_t)_finfo.normal_gain_reg; 
 | 
         vbuf->buf_info[0].exp_time = (uint32_t)_finfo.normal_exp_reg; 
 | 
         vbuf->buf_info[0].valid = true; 
 | 
         LOGD_CAMHW_SUBM(FAKECAM_SUBM,"gain:0x%x,time:0x%x\n", 
 | 
                                      vbuf->buf_info[0].exp_gain, 
 | 
                                      vbuf->buf_info[0].exp_time); 
 | 
    }else if (_rawfmt.hdr_mode == 2) { 
 | 
         if (is_actual_rawdata) { 
 | 
            vbuf->buf_info[0].data_addr = actual_raw[0]; 
 | 
            vbuf->buf_info[0].data_fd = 0; 
 | 
            vbuf->buf_info[0].data_length = actual_raw_len[0]; 
 | 
         } else { 
 | 
            if (_rawbuf_type == RK_AIQ_RAW_ADDR) { 
 | 
             if (sizeof(uint8_t*) == 4) 
 | 
                vbuf->buf_info[0].data_addr = (uint8_t*)(_st_addr[0].laddr); 
 | 
             else if (sizeof(uint8_t*) == 8) 
 | 
                vbuf->buf_info[0].data_addr = (uint8_t*)(((uint64_t)_st_addr[0].haddr << 32) + _st_addr[0].laddr); 
 | 
                vbuf->buf_info[0].data_fd = 0; 
 | 
             } else if (_rawbuf_type == RK_AIQ_RAW_FD) { 
 | 
                vbuf->buf_info[0].data_addr = NULL; 
 | 
                vbuf->buf_info[0].data_fd = _st_addr[0].fd; 
 | 
             } 
 | 
             vbuf->buf_info[0].data_length = _st_addr[0].size; 
 | 
         } 
 | 
         vbuf->buf_info[0].frame_id = _rawfmt.frame_id; 
 | 
         vbuf->buf_info[0].exp_gain = (uint32_t)_finfo.hdr_gain_s_reg; 
 | 
         vbuf->buf_info[0].exp_time = (uint32_t)_finfo.hdr_exp_s_reg; 
 | 
         vbuf->buf_info[0].valid = true; 
 | 
         LOGD_CAMHW_SUBM(FAKECAM_SUBM,"data_addr[0]=%p,fd[0]=%d,,length=%d\n", 
 | 
                                      vbuf->buf_info[0].data_addr, 
 | 
                                      vbuf->buf_info[0].data_fd, 
 | 
                                      vbuf->buf_info[0].data_length); 
 | 
         LOGD_CAMHW_SUBM(FAKECAM_SUBM,"gain[0]:0x%x,time[0]:0x%x\n", 
 | 
                                      vbuf->buf_info[0].exp_gain, 
 | 
                                      vbuf->buf_info[0].exp_time); 
 | 
         if (is_actual_rawdata) { 
 | 
            vbuf->buf_info[1].data_addr = actual_raw[2];//actual_raw[1] 
 | 
            vbuf->buf_info[1].data_fd = 0; 
 | 
            vbuf->buf_info[1].data_length = actual_raw_len[2];//actual_raw_len[1] 
 | 
         } else { 
 | 
             if (_rawbuf_type == RK_AIQ_RAW_ADDR) { 
 | 
                 if (sizeof(uint8_t*) == 4) 
 | 
                    vbuf->buf_info[1].data_addr = (uint8_t*)(_st_addr[1].laddr); 
 | 
                 else if (sizeof(uint8_t*) == 8) 
 | 
                    vbuf->buf_info[1].data_addr = (uint8_t*)(((uint64_t)_st_addr[1].haddr << 32) + _st_addr[1].laddr); 
 | 
                 vbuf->buf_info[1].data_fd = 0; 
 | 
              } else if (_rawbuf_type == RK_AIQ_RAW_FD) { 
 | 
                vbuf->buf_info[1].data_addr = NULL; 
 | 
                vbuf->buf_info[1].data_fd = _st_addr[1].fd; 
 | 
              } 
 | 
              vbuf->buf_info[1].data_length = _st_addr[1].size; 
 | 
         } 
 | 
         vbuf->buf_info[1].frame_id = _rawfmt.frame_id; 
 | 
         vbuf->buf_info[1].exp_gain = (uint32_t)_finfo.hdr_gain_m_reg; 
 | 
         vbuf->buf_info[1].exp_time = (uint32_t)_finfo.hdr_exp_m_reg; 
 | 
         vbuf->buf_info[1].valid = true; 
 | 
         LOGD_CAMHW_SUBM(FAKECAM_SUBM,"data_addr[1]=%p,fd[1]=%d,,length=%d\n", 
 | 
                                      vbuf->buf_info[1].data_addr, 
 | 
                                      vbuf->buf_info[1].data_fd, 
 | 
                                      vbuf->buf_info[1].data_length); 
 | 
         LOGD_CAMHW_SUBM(FAKECAM_SUBM,"gain[1]:0x%x,time[1]:0x%x\n", 
 | 
                                      vbuf->buf_info[1].exp_gain, 
 | 
                                      vbuf->buf_info[1].exp_time); 
 | 
    }else if (_rawfmt.hdr_mode == 3) { 
 | 
         if (is_actual_rawdata) { 
 | 
            vbuf->buf_info[0].data_addr = actual_raw[0]; 
 | 
            vbuf->buf_info[0].data_fd = 0; 
 | 
            vbuf->buf_info[0].data_length = actual_raw_len[0]; 
 | 
         } else { 
 | 
            if (_rawbuf_type == RK_AIQ_RAW_ADDR) { 
 | 
             if (sizeof(uint8_t*) == 4) 
 | 
                vbuf->buf_info[0].data_addr = (uint8_t*)(_st_addr[0].laddr); 
 | 
             else if (sizeof(uint8_t*) == 8) 
 | 
                vbuf->buf_info[0].data_addr = (uint8_t*)(((uint64_t)_st_addr[0].haddr << 32) + _st_addr[0].laddr); 
 | 
                vbuf->buf_info[0].data_fd = 0; 
 | 
             } else if (_rawbuf_type == RK_AIQ_RAW_FD) { 
 | 
                vbuf->buf_info[0].data_addr = NULL; 
 | 
                vbuf->buf_info[0].data_fd = _st_addr[0].fd; 
 | 
             } 
 | 
             vbuf->buf_info[0].data_length = _st_addr[0].size; 
 | 
         } 
 | 
         vbuf->buf_info[0].frame_id = _rawfmt.frame_id; 
 | 
         vbuf->buf_info[0].exp_gain = (uint32_t)_finfo.hdr_gain_s_reg; 
 | 
         vbuf->buf_info[0].exp_time = (uint32_t)_finfo.hdr_exp_s_reg; 
 | 
         vbuf->buf_info[0].valid = true; 
 | 
         LOGD_CAMHW_SUBM(FAKECAM_SUBM,"data_addr[0]=%p,fd[0]=%d,,length=%d\n", 
 | 
                                      vbuf->buf_info[0].data_addr, 
 | 
                                      vbuf->buf_info[0].data_fd, 
 | 
                                      vbuf->buf_info[0].data_length); 
 | 
         LOGD_CAMHW_SUBM(FAKECAM_SUBM,"gain[0]:0x%x,time[0]:0x%x\n", 
 | 
                                      vbuf->buf_info[0].exp_gain, 
 | 
                                      vbuf->buf_info[0].exp_time); 
 | 
  
 | 
         if (is_actual_rawdata) { 
 | 
            vbuf->buf_info[1].data_addr = actual_raw[1]; 
 | 
            vbuf->buf_info[1].data_fd = 0; 
 | 
            vbuf->buf_info[1].data_length = actual_raw_len[1]; 
 | 
         } else { 
 | 
             if (_rawbuf_type == RK_AIQ_RAW_ADDR) { 
 | 
                 if (sizeof(uint8_t*) == 4) 
 | 
                    vbuf->buf_info[1].data_addr = (uint8_t*)(_st_addr[1].laddr); 
 | 
                 else if (sizeof(uint8_t*) == 8) 
 | 
                    vbuf->buf_info[1].data_addr = (uint8_t*)(((uint64_t)_st_addr[1].haddr << 32) + _st_addr[1].laddr); 
 | 
                 vbuf->buf_info[1].data_fd = 0; 
 | 
              } else if (_rawbuf_type == RK_AIQ_RAW_FD) { 
 | 
                vbuf->buf_info[1].data_addr = NULL; 
 | 
                vbuf->buf_info[1].data_fd = _st_addr[1].fd; 
 | 
              } 
 | 
              vbuf->buf_info[1].data_length = _st_addr[1].size; 
 | 
         } 
 | 
         vbuf->buf_info[1].frame_id = _rawfmt.frame_id; 
 | 
         vbuf->buf_info[1].exp_gain = (uint32_t)_finfo.hdr_gain_m_reg; 
 | 
         vbuf->buf_info[1].exp_time = (uint32_t)_finfo.hdr_exp_m_reg; 
 | 
         vbuf->buf_info[1].valid = true; 
 | 
         LOGD_CAMHW_SUBM(FAKECAM_SUBM,"data_addr[1]=%p,fd[1]=%d,,length=%d\n", 
 | 
                                      vbuf->buf_info[1].data_addr, 
 | 
                                      vbuf->buf_info[1].data_fd, 
 | 
                                      vbuf->buf_info[1].data_length); 
 | 
         LOGD_CAMHW_SUBM(FAKECAM_SUBM,"gain[1]:0x%x,time[1]:0x%x\n", 
 | 
                                      vbuf->buf_info[1].exp_gain, 
 | 
                                      vbuf->buf_info[1].exp_time); 
 | 
  
 | 
         if (is_actual_rawdata) { 
 | 
            vbuf->buf_info[2].data_addr = actual_raw[2]; 
 | 
            vbuf->buf_info[2].data_fd = 0; 
 | 
            vbuf->buf_info[2].data_length = actual_raw_len[2]; 
 | 
         }else{ 
 | 
             if (_rawbuf_type == RK_AIQ_RAW_ADDR) { 
 | 
                 if (sizeof(uint8_t*) == 4) 
 | 
                    vbuf->buf_info[2].data_addr = (uint8_t*)(_st_addr[2].laddr); 
 | 
                 else if (sizeof(uint8_t*) == 8) 
 | 
                    vbuf->buf_info[2].data_addr = (uint8_t*)(((uint64_t)_st_addr[2].haddr << 32) + _st_addr[2].laddr); 
 | 
                 vbuf->buf_info[2].data_fd = 0; 
 | 
             } else if (_rawbuf_type == RK_AIQ_RAW_FD) { 
 | 
                    vbuf->buf_info[2].data_addr = NULL; 
 | 
                    vbuf->buf_info[2].data_fd = _st_addr[2].fd; 
 | 
             } 
 | 
             vbuf->buf_info[2].data_length = _st_addr[2].size; 
 | 
         } 
 | 
         vbuf->buf_info[2].frame_id = _rawfmt.frame_id; 
 | 
         vbuf->buf_info[2].exp_gain = (uint32_t)_finfo.hdr_gain_l_reg; 
 | 
         vbuf->buf_info[2].exp_time = (uint32_t)_finfo.hdr_exp_l_reg; 
 | 
         vbuf->buf_info[2].valid = true; 
 | 
         LOGD_CAMHW_SUBM(FAKECAM_SUBM,"data_addr[2]=%p,fd[2]=%d,,length=%d\n", 
 | 
                                      vbuf->buf_info[2].data_addr, 
 | 
                                      vbuf->buf_info[2].data_fd, 
 | 
                                      vbuf->buf_info[2].data_length); 
 | 
         LOGD_CAMHW_SUBM(FAKECAM_SUBM,"gain[2]:0x%x,time[2]:0x%x\n", 
 | 
                                      vbuf->buf_info[2].exp_gain, 
 | 
                                      vbuf->buf_info[2].exp_time); 
 | 
    } 
 | 
  
 | 
} 
 | 
  
 | 
void 
 | 
FakeCamHwIsp20::parse_rk_rawfile(FILE *fp, struct rk_aiq_vbuf *vbuf) 
 | 
{ 
 | 
    unsigned short tag = 0; 
 | 
    struct _block_header header; 
 | 
    bool bExit = false; 
 | 
    while(!bExit){ 
 | 
        fread(&tag, sizeof(tag), 1, fp); 
 | 
        fseek(fp, TAG_BYTE_LEN*(-1), SEEK_CUR);//backforwad to tag start 
 | 
        LOGD_CAMHW_SUBM(FAKECAM_SUBM, "tag=0x%04x\n",tag); 
 | 
        switch (tag) 
 | 
        { 
 | 
            case START_TAG: 
 | 
                fseek(fp, TAG_BYTE_LEN, SEEK_CUR); 
 | 
                memset(_st_addr, 0, sizeof(_st_addr)); 
 | 
                memset(&_rawfmt, 0, sizeof(_rawfmt)); 
 | 
                memset(&_finfo, 0, sizeof(_finfo)); 
 | 
                break; 
 | 
            case NORMAL_RAW_TAG: 
 | 
            { 
 | 
                fread(&header, sizeof(header), 1, fp); 
 | 
                if (header.block_length > 0) { 
 | 
                    vbuf->buf_info[0].data_addr = (uint8_t*)_mipi_rx_devs[0]->get_buffer_by_index(0)->get_expbuf_usrptr(); 
 | 
                    fread(vbuf->buf_info[0].data_addr, header.block_length, 1, fp); 
 | 
                    vbuf->buf_info[0].data_length = header.block_length; 
 | 
                } 
 | 
                break; 
 | 
            } 
 | 
            case HDR_S_RAW_TAG: 
 | 
            { 
 | 
                fread(&header, sizeof(header), 1, fp); 
 | 
                if (header.block_length > 0) { 
 | 
                    vbuf->buf_info[0].data_addr = (uint8_t*)_mipi_rx_devs[0]->get_buffer_by_index(0)->get_expbuf_usrptr(); 
 | 
                    fread(vbuf->buf_info[0].data_addr, header.block_length, 1, fp); 
 | 
                    vbuf->buf_info[0].data_length = header.block_length; 
 | 
                } 
 | 
                break; 
 | 
            } 
 | 
            case HDR_M_RAW_TAG: 
 | 
            { 
 | 
                fread(&header, sizeof(header), 1, fp); 
 | 
                if (header.block_length > 0) { 
 | 
                    vbuf->buf_info[1].data_addr = (uint8_t*)_mipi_rx_devs[1]->get_buffer_by_index(0)->get_expbuf_usrptr(); 
 | 
                    fread(vbuf->buf_info[1].data_addr, header.block_length, 1, fp); 
 | 
                    vbuf->buf_info[1].data_length = header.block_length; 
 | 
                } 
 | 
                break; 
 | 
            } 
 | 
            case HDR_L_RAW_TAG: 
 | 
            { 
 | 
                fread(&header, sizeof(header), 1, fp); 
 | 
                if (header.block_length > 0) { 
 | 
                    vbuf->buf_info[1].data_addr = (uint8_t*)_mipi_rx_devs[1]->get_buffer_by_index(0)->get_expbuf_usrptr(); 
 | 
                    fread(vbuf->buf_info[1].data_addr, header.block_length, 1, fp); 
 | 
                    vbuf->buf_info[1].data_length = header.block_length; 
 | 
                } 
 | 
                break; 
 | 
            } 
 | 
            case FORMAT_TAG: 
 | 
            { 
 | 
                fread(&_rawfmt, sizeof(_rawfmt), 1, fp); 
 | 
                LOGD_CAMHW_SUBM(FAKECAM_SUBM, "hdr_mode=%d,bayer_fmt=%d\n",_rawfmt.hdr_mode,_rawfmt.bayer_fmt); 
 | 
                break; 
 | 
            } 
 | 
            case STATS_TAG: 
 | 
            { 
 | 
                fread(&_finfo, sizeof(_finfo), 1, fp); 
 | 
                break; 
 | 
            } 
 | 
            case ISP_REG_FMT_TAG: 
 | 
            { 
 | 
                fread(&header, sizeof(header), 1, fp); 
 | 
                fseek(fp, header.block_length, SEEK_CUR); 
 | 
                break; 
 | 
            } 
 | 
            case ISP_REG_TAG: 
 | 
            { 
 | 
                fread(&header, sizeof(header), 1, fp); 
 | 
                fseek(fp, header.block_length, SEEK_CUR); 
 | 
                break; 
 | 
            } 
 | 
            case ISPP_REG_FMT_TAG: 
 | 
            { 
 | 
                fread(&header, sizeof(header), 1, fp); 
 | 
                fseek(fp, header.block_length, SEEK_CUR); 
 | 
                break; 
 | 
            } 
 | 
            case ISPP_REG_TAG: 
 | 
            { 
 | 
                fread(&header, sizeof(header), 1, fp); 
 | 
                fseek(fp, header.block_length, SEEK_CUR); 
 | 
                break; 
 | 
            } 
 | 
            case PLATFORM_TAG: 
 | 
            { 
 | 
                fread(&header, sizeof(header), 1, fp); 
 | 
                fseek(fp, header.block_length, SEEK_CUR); 
 | 
                break; 
 | 
            } 
 | 
            case END_TAG: 
 | 
            { 
 | 
                bExit = true; 
 | 
                break; 
 | 
            } 
 | 
            default: 
 | 
            { 
 | 
                LOGE_CAMHW_SUBM(FAKECAM_SUBM, "Not support TAG(0x%04x)\n", tag); 
 | 
                bExit = true; 
 | 
                break; 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
     vbuf->frame_width = _rawfmt.width; 
 | 
     vbuf->frame_height = _rawfmt.height; 
 | 
     if (_rawfmt.hdr_mode == 1) { 
 | 
          LOGD_CAMHW_SUBM(FAKECAM_SUBM,"data_addr=%p,fd=%d,length=%d\n", 
 | 
                                       vbuf->buf_info[0].data_addr, 
 | 
                                       vbuf->buf_info[0].data_fd, 
 | 
                                       vbuf->buf_info[0].data_length); 
 | 
  
 | 
         vbuf->buf_info[0].frame_id = _rawfmt.frame_id; 
 | 
         vbuf->buf_info[0].exp_gain = (uint32_t)_finfo.normal_gain_reg; 
 | 
         vbuf->buf_info[0].exp_time = (uint32_t)_finfo.normal_exp_reg; 
 | 
         vbuf->buf_info[0].valid = true; 
 | 
         LOGD_CAMHW_SUBM(FAKECAM_SUBM,"gain:0x%x,time:0x%x\n", 
 | 
                                      vbuf->buf_info[0].exp_gain, 
 | 
                                      vbuf->buf_info[0].exp_time); 
 | 
    }else if (_rawfmt.hdr_mode == 2) { 
 | 
         vbuf->buf_info[0].frame_id = _rawfmt.frame_id; 
 | 
         vbuf->buf_info[0].exp_gain = (uint32_t)_finfo.hdr_gain_s_reg; 
 | 
         vbuf->buf_info[0].exp_time = (uint32_t)_finfo.hdr_exp_s_reg; 
 | 
         vbuf->buf_info[0].valid = true; 
 | 
         LOGD_CAMHW_SUBM(FAKECAM_SUBM,"data_addr[0]=%p,fd[0]=%d,,length=%d\n", 
 | 
                                      vbuf->buf_info[0].data_addr, 
 | 
                                      vbuf->buf_info[0].data_fd, 
 | 
                                      vbuf->buf_info[0].data_length); 
 | 
         LOGD_CAMHW_SUBM(FAKECAM_SUBM,"gain[0]:0x%x,time[0]:0x%x\n", 
 | 
                                      vbuf->buf_info[0].exp_gain, 
 | 
                                      vbuf->buf_info[0].exp_time); 
 | 
  
 | 
         vbuf->buf_info[1].frame_id = _rawfmt.frame_id; 
 | 
         vbuf->buf_info[1].exp_gain = (uint32_t)_finfo.hdr_gain_l_reg; 
 | 
         vbuf->buf_info[1].exp_time = (uint32_t)_finfo.hdr_exp_l_reg; 
 | 
         vbuf->buf_info[1].valid = true; 
 | 
         LOGD_CAMHW_SUBM(FAKECAM_SUBM,"data_addr[1]=%p,fd[1]=%d,,length=%d\n", 
 | 
                                      vbuf->buf_info[1].data_addr, 
 | 
                                      vbuf->buf_info[1].data_fd, 
 | 
                                      vbuf->buf_info[1].data_length); 
 | 
         LOGD_CAMHW_SUBM(FAKECAM_SUBM,"gain[1]:0x%x,time[1]:0x%x\n", 
 | 
                                      vbuf->buf_info[1].exp_gain, 
 | 
                                      vbuf->buf_info[1].exp_time); 
 | 
    }else if (_rawfmt.hdr_mode == 3) { 
 | 
         vbuf->buf_info[0].frame_id = _rawfmt.frame_id; 
 | 
         vbuf->buf_info[0].exp_gain = (uint32_t)_finfo.hdr_gain_s_reg; 
 | 
         vbuf->buf_info[0].exp_time = (uint32_t)_finfo.hdr_exp_s_reg; 
 | 
         vbuf->buf_info[0].valid = true; 
 | 
         LOGD_CAMHW_SUBM(FAKECAM_SUBM,"data_addr[0]=%p,fd[0]=%d,,length=%d\n", 
 | 
                                      vbuf->buf_info[0].data_addr, 
 | 
                                      vbuf->buf_info[0].data_fd, 
 | 
                                      vbuf->buf_info[0].data_length); 
 | 
         LOGD_CAMHW_SUBM(FAKECAM_SUBM,"gain[0]:0x%x,time[0]:0x%x\n", 
 | 
                                      vbuf->buf_info[0].exp_gain, 
 | 
                                      vbuf->buf_info[0].exp_time); 
 | 
  
 | 
         vbuf->buf_info[1].frame_id = _rawfmt.frame_id; 
 | 
         vbuf->buf_info[1].exp_gain = (uint32_t)_finfo.hdr_gain_m_reg; 
 | 
         vbuf->buf_info[1].exp_time = (uint32_t)_finfo.hdr_exp_m_reg; 
 | 
         vbuf->buf_info[1].valid = true; 
 | 
         LOGD_CAMHW_SUBM(FAKECAM_SUBM,"data_addr[1]=%p,fd[1]=%d,,length=%d\n", 
 | 
                                      vbuf->buf_info[1].data_addr, 
 | 
                                      vbuf->buf_info[1].data_fd, 
 | 
                                      vbuf->buf_info[1].data_length); 
 | 
         LOGD_CAMHW_SUBM(FAKECAM_SUBM,"gain[1]:0x%x,time[1]:0x%x\n", 
 | 
                                      vbuf->buf_info[1].exp_gain, 
 | 
                                      vbuf->buf_info[1].exp_time); 
 | 
  
 | 
         vbuf->buf_info[2].frame_id = _rawfmt.frame_id; 
 | 
         vbuf->buf_info[2].exp_gain = (uint32_t)_finfo.hdr_gain_l_reg; 
 | 
         vbuf->buf_info[2].exp_time = (uint32_t)_finfo.hdr_exp_l_reg; 
 | 
         vbuf->buf_info[2].valid = true; 
 | 
         LOGD_CAMHW_SUBM(FAKECAM_SUBM,"data_addr[2]=%p,fd[2]=%d,,length=%d\n", 
 | 
                                      vbuf->buf_info[2].data_addr, 
 | 
                                      vbuf->buf_info[2].data_fd, 
 | 
                                      vbuf->buf_info[2].data_length); 
 | 
         LOGD_CAMHW_SUBM(FAKECAM_SUBM,"gain[2]:0x%x,time[2]:0x%x\n", 
 | 
                                      vbuf->buf_info[2].exp_gain, 
 | 
                                      vbuf->buf_info[2].exp_time); 
 | 
    } 
 | 
  
 | 
} 
 | 
  
 | 
XCamReturn 
 | 
FakeCamHwIsp20::registRawdataCb(void (*callback)(void *)) 
 | 
{ 
 | 
    ENTER_XCORE_FUNCTION(); 
 | 
    XCamReturn ret = XCAM_RETURN_NO_ERROR; 
 | 
    SmartPtr<FakeSensorHw> fakeSensor = mSensorDev.dynamic_cast_ptr<FakeSensorHw>(); 
 | 
    ret = fakeSensor->register_rawdata_callback(callback); 
 | 
    EXIT_XCORE_FUNCTION(); 
 | 
    return ret; 
 | 
} 
 | 
  
 | 
XCamReturn 
 | 
FakeCamHwIsp20::rawdataPrepare(rk_aiq_raw_prop_t prop) 
 | 
{ 
 | 
    ENTER_XCORE_FUNCTION(); 
 | 
    XCamReturn ret = XCAM_RETURN_NO_ERROR; 
 | 
  
 | 
  
 | 
    _rawbuf_type = prop.rawbuf_type; 
 | 
    if (_rawbuf_type == RK_AIQ_RAW_ADDR) 
 | 
    { 
 | 
        _rx_memory_type = V4L2_MEMORY_USERPTR; 
 | 
        _tx_memory_type = V4L2_MEMORY_USERPTR; 
 | 
    } 
 | 
    else if (_rawbuf_type == RK_AIQ_RAW_FD) 
 | 
    { 
 | 
        _rx_memory_type = V4L2_MEMORY_DMABUF; 
 | 
        _tx_memory_type = V4L2_MEMORY_DMABUF; 
 | 
    } 
 | 
    else if(_rawbuf_type == RK_AIQ_RAW_DATA) 
 | 
    { 
 | 
        _rx_memory_type = V4L2_MEMORY_MMAP; 
 | 
        _tx_memory_type = V4L2_MEMORY_USERPTR; 
 | 
    } 
 | 
    else if(_rawbuf_type == RK_AIQ_RAW_FILE) 
 | 
    { 
 | 
        _rx_memory_type = V4L2_MEMORY_MMAP; 
 | 
        _tx_memory_type = V4L2_MEMORY_USERPTR; 
 | 
    } 
 | 
    else { 
 | 
        LOGE_CAMHW_SUBM(FAKECAM_SUBM,"Not support raw data type:%d", _rawbuf_type); 
 | 
        return XCAM_RETURN_ERROR_PARAM; 
 | 
    } 
 | 
    SmartPtr<FakeSensorHw> fakeSensor = mSensorDev.dynamic_cast_ptr<FakeSensorHw>(); 
 | 
    ret = fakeSensor->prepare(prop); 
 | 
    EXIT_XCORE_FUNCTION(); 
 | 
    return ret; 
 | 
} 
 | 
}; //namspace RkCam 
 |