Android7.1 [Camera] cam_board.xml文件解析源代码分析(二)

本文详细介绍了在Android 7.1系统中,如何在rk3399平台上解析cam_board.xml文件,特别是在camera_get_number_of_cameras函数中相机数量的获取过程。解析主要在CameraHal_Module.cpp的camera_board_profiles::getInstance()函数中进行,通过CameraHal_board_xml_parse.cpp的createInstance()函数和cam_board.xml文件进行。解析过程中,使用XML解析库处理文件中的各个标签,如Sensor和Flash等,并将其信息保存在相应的结构体中。
摘要由CSDN通过智能技术生成

        源码平台:rk3399

        该文件在hardware/rockchip/camera/CameraHal/CameraHal_Module.cpp 中的camera_get_number_of_cameras函数获取摄像头数量的时候会解析,camera_board_profiles::getInstance();

 770                                                                       
 771     memset(&camInfoTmp[0],0x00,sizeof(rk_cam_info_t));                
 772     memset(&camInfoTmp[1],0x00,sizeof(rk_cam_info_t));                
 773                                                                       
 774     profiles = camera_board_profiles::getInstance();                  
 775     nCamDev = profiles->mDevieVector.size();                          
 776     LOGE("board profiles cam num %d\n", nCamDev);                     
 777 //if uvc got 2 , ignore csi                                           

        camera_board_profiles::getInstance()在hardware/rockchip/camera/CameraHal/CameraHal_board_xml_parse.cpp

1061 } 
1062   
1063 camera_board_profiles* camera_board_profiles::getInstance()
1064 { 
1065     camera_board_profiles *profiles = createInstance();
1066   
1067     return profiles;
1068 } 
1069   

        接着看createInstance()

1003 camera_board_profiles* camera_board_profiles::createInstance()
1004 {
1005     FILE *fp = NULL;
1006 
1007     camera_board_profiles *profiles = new camera_board_profiles();
1008 
1009     fp = fopen(RK_BOARD_XML_PATH, "r");
1010     if(!fp){
1011         LOGD("This machine have not dvp/mipi camera!!\n");
1012         return profiles;
1013     }
1014 
1015     LOGD("open xml file(%s) success\n", RK_BOARD_XML_PATH);
1016 
1017     XML_Parser parser = XML_ParserCreate(NULL);
1018     if(parser==NULL){
1019         ALOGE("XML_ParserCreate failed\n");
1020         return NULL;
1021     }
1022 
1023     XML_SetUserData(parser, profiles);
1024     XML_SetElementHandler(parser, StartElementHandler, NULL);
1025 
1026     const int BUFF_SIZE = 512;
1027     for (;;) {
1028         void *buff = ::XML_GetBuffer(parser, BUFF_SIZE);
1029         if (buff == NULL) {
1030             ALOGE("failed to in call to XML_GetBuffer()");
1031             goto exit;
1032         }
1033 
1034         int bytes_read = ::fread(buff, 1, BUFF_SIZE, fp);
1035         if (bytes_read < 0) {
1036             ALOGE("failed in call to read");
1037             goto exit;
1038         }
1039 
1040         int res = XML_ParseBuffer(parser, bytes_read, bytes_read == 0);
1041   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值