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
}
- rk3288 camera cif分析
- rk3288 android camera 模块初始化流程分析
- rk3288 ov8858 camera移植
- [RK3128][Android 6.0] 新增一个CIF Camera
- [RK3288][Android6.0] Camera驱动初始化流程
- [RK3288][Android6.0] Camera HAL流程小结
- [RK3288][Android6.0] Camera HAL流程小结
- Camera分析
- [RK3288][Android6.0] USB UVC Camera 功能支持的添加
- [RK3288][Android6.0] Camera HAL ION 使用小结
- [RK3288][Android6.0] 调试笔记 --- USB Camera旋转图像方法
- [RK3288][Android6.0] 调试笔记 --- Camera Preview原始数据帧dump
- [RK3288][Android6.0] 调试笔记 --- Camera没有权限打开问题
- [RK3288][Android6.0] 调试笔记 --- Camera配置信息dump方法
- [RK3288][Android6.0] 调试笔记 --- Camera设备节点往后偏移
- [RK3288][Android6.0] 调试笔记 --- Camera丢帧检测
- [RK3288][Android6.0] 调试笔记 --- Camera动态热插拔支持
- [RK3288][Android6.0] USB UVC Camera 功能支持的添加
- 106.Oracle数据库SQL开发之 表——向表中添加注释
- Hadoop2.6.0集群配置
- 【编译器】使用Visual Studio编写C语言程序(附若干错误解决方案)
- [Leetcode]Search for a Range
- js中循环语句浅谈
- rk3288 camera cif分析
- 107.Oracle数据库SQL开发之 表——截断、删除表
- JS截取字符串substr 和 substring方法的区别
- CCNA学习笔记四 动态路由简介、OSPF动态路由配置
- 编程艺术【转】阅后有感
- 108.Oracle数据库SQL开发之 序列
- BlotDB数据库例子
- 10020---Java WEB实现URL重写的优缺点及如何实现
- Java中参数传递机制