rk3288 camera cif分析

来源:互联网 发布:网络错误代码-7 编辑:程序博客网 时间:2024/06/11 04:01

1#      open()==>>  file      CameraHal_Module.cpp



        // -------- RockChip specific stuff --------


        camera_device->cameraid = cameraid;
        
        camera = new android::CameraHal(cameraid);   /open()  ===>>CameraHal.cpp



2#CameraHal.cpp

CameraHal::CameraHal(int cameraId)
          :commandThreadCommandQ("commandCmdQ")
{
LOG_FUNCTION_NAME
    
{
        char trace_level[PROPERTY_VALUE_MAX];
        int level;


        property_get(CAMERAHAL_TRACE_LEVEL_PROPERTY_KEY, trace_level, "0");


        sscanf(trace_level,"%d",&level);
        
        setTracerLevel(level);


}


    mCamId = cameraId;
    mCamFd = -1;
    mCommandRunning = -1;
mCameraStatus = 0;


    #if (CONFIG_CAMERA_MEM == CAMERA_MEM_ION)
        mCamMemManager = new IonMemManager();
        LOG1("%s(%d): Camera Hal memory is alloced from ION device",__FUNCTION__,__LINE__);
#elif(CONFIG_CAMERA_MEM == CAMERA_MEM_IONDMA)
        if((strcmp(gCamInfos[cameraId].driver,"uvcvideo") == 0) //uvc camera
            //|| (gCamInfos[cameraId].pcam_total_info->mHardInfo.mSensorInfo.mPhy.type == CamSys_Phy_end)// soc cif
            ) {
            gCamInfos[cameraId].pcam_total_info->mIsIommuEnabled = (IOMMU_ENABLED == 1)? true:false;
        }
mCamMemManager = new IonDmaMemManager(gCamInfos[cameraId].pcam_total_info->mIsIommuEnabled);
        LOG1("%s(%d): Camera Hal memory is alloced from ION device",__FUNCTION__,__LINE__);
    #elif(CONFIG_CAMERA_MEM == CAMERA_MEM_PMEM)
        if(access(CAMERA_PMEM_NAME, O_RDWR) < 0) {
            LOGE("%s(%d): %s isn't registered, CameraHal_Mem current configuration isn't support ION memory!!!",
                __FUNCTION__,__LINE__,CAMERA_PMEM_NAME);
        } else {
            mCamMemManager = new PmemManager((char*)CAMERA_PMEM_NAME);
            LOG1("%s(%d): Camera Hal memory is alloced from %s device",__FUNCTION__,__LINE__,CAMERA_PMEM_NAME);
        }
    #endif
    
    mPreviewBuf = new PreviewBufferProvider(mCamMemManager);
    mVideoBuf = new BufferProvider(mCamMemManager);
    mRawBuf = new BufferProvider(mCamMemManager);
    mJpegBuf = new BufferProvider(mCamMemManager);


mPreviewBuf->is_cif_driver = false;
mVideoBuf->is_cif_driver = false;
mRawBuf->is_cif_driver = false;
mJpegBuf->is_cif_driver = false;

    char value[PROPERTY_VALUE_MAX];
    property_get(/*CAMERAHAL_TYPE_PROPERTY_KEY*/"sys.cam_hal.type", value, "none");


    if (!strcmp(value, "fakecamera")) {
        LOGD("it is a fake camera!");
        mCameraAdapter = new CameraFakeAdapter(cameraId);
    } else {
   if((strcmp(gCamInfos[cameraId].driver,"uvcvideo") == 0)) {
       LOGD("it is a uvc camera!");
       mCameraAdapter = new CameraUSBAdapter(cameraId);
   }
   else if(gCamInfos[cameraId].pcam_total_info->mHardInfo.mSensorInfo.mPhy.type == CamSys_Phy_Cif){
       LOGD("it is a isp soc camera");
       if(gCamInfos[cameraId].pcam_total_info->mHardInfo.mSensorInfo.mPhy.info.cif.fmt == CamSys_Fmt_Raw_10b
|| gCamInfos[cameraId].pcam_total_info->mHardInfo.mSensorInfo.mPhy.info.cif.fmt == CamSys_Fmt_Raw_12b)


           mCameraAdapter = new CameraIspSOCAdapter(cameraId);//=====>>>>CameraIspAdapter.cpp


       else
           mCameraAdapter = new CameraIspAdapter(cameraId);
   }
   else if(gCamInfos[cameraId].pcam_total_info->mHardInfo.mSensorInfo.mPhy.type == CamSys_Phy_Mipi){
       LOGD("it is a isp  camera");
       mCameraAdapter = new CameraIspAdapter(cameraId);
   }
   else{
       LOGD("it is a soc camera!");
       mCameraAdapter = new CameraSOCAdapter(cameraId);
//mCameraAdapter->is_cif_driver = true;
mCameraAdapter->cif_driver_iommu = gCamInfos[cameraId].pcam_total_info->mIsIommuEnabled;
mPreviewBuf->is_cif_driver = true;
mVideoBuf->is_cif_driver = true;
mRawBuf->is_cif_driver = true;
mJpegBuf->is_cif_driver = true;
   }
    }



3# CameraIspAdapter.cpp

CameraIspAdapter::CameraIspAdapter(int cameraId)
                    :CameraAdapter(cameraId), =====>>CameraAdapter.cpp
                    m_camDevice(NULL),
                    mSensorItfCur(0)
{
    LOG_FUNCTION_NAME
    mZoomVal = 100;
    mZoomMin = 100;
    mZoomMax = 240;
    mFlashStatus = false;
    mISPOutputFmt = ISP_OUT_YUV420SP;
    mISPTunningRun = false;
    mIsSendToTunningTh = false;
    mDispFrameLeak = 0;
    mVideoEncFrameLeak = 0;
    mPreviewCBFrameLeak = 0;
    mPicEncFrameLeak = 0;
mCtxCbResChange.res = 0;
mCtxCbResChange.pIspAdapter =NULL;
LOG_FUNCTION_NAME_EXIT
}
CameraIspAdapter::~CameraIspAdapter()
{


    cameraDestroy();
    if(mDispFrameLeak != 0){
        LOGE("\n\n\n\nmay have disp frame mem leak,count is %d\n\n\n\n",mDispFrameLeak);
    }

4#CameraAdapter.cpp

CameraAdapter::CameraAdapter(int cameraId):mPreviewRunning(0),
                                           mCamId(cameraId)
{
    LOG_FUNCTION_NAME
    mRefDisplayAdapter = NULL;
    mRefEventNotifier = NULL;
    mCameraPreviewThread = NULL;
    mPreviewRunning = 0;
mPictureRunning = 0;
    mPreviewBufProvider = NULL;
    mCamDrvWidth = 0;
    mCamDrvHeight = 0;
    mVideoWidth = 0;
    mVideoHeight = 0;
    mCamDriverStream = false;
    camera_device_error = false;
    mPreviewFrameIndex = 0;
    mPreviewErrorFrameCount = 0;
    mCamFd = -1;
    mCamDriverPreviewFmt = 0;
    mZoomVal = 100;
mLibstageLibHandle = NULL;


    CameraHal_SupportFmt[0] = V4L2_PIX_FMT_NV12;
    CameraHal_SupportFmt[1] = V4L2_PIX_FMT_NV16;
    CameraHal_SupportFmt[2] = V4L2_PIX_FMT_YUYV;
    CameraHal_SupportFmt[3] = V4L2_PIX_FMT_RGB565;
    CameraHal_SupportFmt[4] = 0x00;
    CameraHal_SupportFmt[5] = 0x00;


cif_driver_iommu = false;
   LOG_FUNCTION_NAME_EXIT   
}

0 0
原创粉丝点击