当前位置: 首页 > news >正文

网站开发有什么用如何查询百度搜索关键词排名

网站开发有什么用,如何查询百度搜索关键词排名,商用营销型网站建设,广州企业网站设计制作1、Camera成像原理介绍 Camera工作流程图 Camera的成像原理可以简单概括如下#xff1a; 景物(SCENE)通过镜头#xff08;LENS#xff09;生成的光学图像投射到图像传感器(Sensor)表面上#xff0c;然后转为电信号#xff0c;经过A/D#xff08;模数转换#xff09;转换…1、Camera成像原理介绍 Camera工作流程图     Camera的成像原理可以简单概括如下 景物(SCENE)通过镜头LENS生成的光学图像投射到图像传感器(Sensor)表面上然后转为电信号经过A/D模数转换转换后变为数字 图像信号再送到数字信号处理芯片DSP中加工处理再通过IO接口传输到CPU中处理通过DISPLAY就可以看到图像了。 电荷耦合器件(CCD)或互补金属氧化物半导体CMOS接收光学镜头传递来的影像经模/数转换器(A/D)转换成数字信号经过编码后存储。 流程如下 1、CCD/CMOS将被摄体的光信号转变为电信号—电子图像模拟信号 2、由模/数转换器ADC芯片来将模拟信号转化为数字信号 3、数字信号形成后由DSP或编码库对信号进行压缩并转化为特定的图像文件格式储存 数码相机的光学镜头与传统相机相同将影像聚到感光器件上即(光)电荷耦合器件(CCD) 。CCD替代了传统相机中的感光胶片的位置其功能是将光信号转换成电信号与电视摄像相同。 CCD是半导体器件是数码相机的核心其内含器件的单元数量决定了数码相机的成像质量——像素单元越多即像素数高成像质量越好通常情况下像素的高低代表了数码相机的档次和技术指标。     2、Android Camera框架 Android的Camera子系统提供一个拍照和录制视频的框架。 它将Camera的上层应用与Application Framework、用户库串接起来而正是这个用户库来与Camera的硬件层通信从而实现操作camera硬件。       --------------------------------------------------------------------------------------------   -----------------------------------------------------------------------------------------------       3.Camera HAL层部分 代码存放目录hardware\rk29\camera编译   [cpp] view plaincopy LOCAL_PATH: $(call my-dir)  include $(CLEAR_VARS)  LOCAL_SRC_FILES:\      CameraHal_Module.cpp\      CameraHal.cpp\      CameraHal_Utils.cpp\      MessageQueue.cpp\      CameraHal_Mem.cpp  ...................  ifeq ($(strip $(TARGET_BOARD_HARDWARE)),rk30board)  LOCAL_MODULE: camera.rk30board   为了实现一个具体功能的Camera在HAL层需要一个硬件相关的Camera库例如通过调用video for linux驱动程序和Jpeg编码程序实现或者直接用各个chip厂商实现的私有库来实现比如Qualcomm实现的libcamera.so和 libqcamera.so此处为camera.rk30board.so实现CameraHardwareInterface规定的接口来调用相 关的库驱动相关的driver实现对camera硬件的操作。这个库将被Camera的服务库libcameraservice.so调用。   3.1CameraHal_Module.cpp主要是Camera HAL对上层提供的接口和实际设备无关上层的本地库都直接调用这个文件里面提供的接口。 [cpp] view plaincopy static int camera_device_open(const hw_module_t* module, const char* name,                  hw_device_t** device);  static int camera_device_close(hw_device_t* device);  static int camera_get_number_of_cameras(void);  static int camera_get_camera_info(int camera_id, struct camera_info *info);      static struct hw_module_methods_t camera_module_methods  {          open: camera_device_open  };      camera_module_t HAL_MODULE_INFO_SYM  {      common: {           tag: HARDWARE_MODULE_TAG,           version_major: ((CONFIG_CAMERAHAL_VERSION0xff00)8),           version_minor: CONFIG_CAMERAHAL_VERSION0xff,           id: CAMERA_HARDWARE_MODULE_ID,           name: CAMERA_MODULE_NAME,           author: RockChip,           methods: camera_module_methods,           dso: NULL, /* remove compilation warnings */           reserved: {0}, /* remove compilation warnings */      },      get_number_of_cameras: camera_get_number_of_cameras,      get_camera_info: camera_get_camera_info,  };   //CAMERA_DEVICE_NAME              /dev/video 以下都是通过读取节点信息来获取摄像头的数目及摄像头设备信息 [cpp] view plaincopy int camera_device_close(hw_device_t* device)  {      int ret  0;      rk_camera_device_t* rk_dev  NULL;        LOGD(%s, __FUNCTION__);        android::Mutex::Autolock lock(gCameraHalDeviceLock);        if (!device) {          ret  -EINVAL;          goto done;      }        rk_dev  (rk_camera_device_t*) device;        if (rk_dev) {          if (gCameraHals[rk_dev-cameraid]) {              delete gCameraHals[rk_dev-cameraid];              gCameraHals[rk_dev-cameraid]  NULL;              gCamerasOpen--;          }            if (rk_dev-base.ops) {              free(rk_dev-base.ops);          }          free(rk_dev);      }  done:        return ret;  }    /*******************************************************************  * implementation of camera_module functions  *******************************************************************/    /* open device handle to one of the cameras  *  * assume camera service will keep singleton of each camera  * so this function will always only be called once per camera instance  */    int camera_device_open(const hw_module_t* module, const char* name,                  hw_device_t** device)  {      int rv  0;      int cameraid;      rk_camera_device_t* camera_device  NULL;      camera_device_ops_t* camera_ops  NULL;      android::CameraHal* camera  NULL;        android::Mutex::Autolock lock(gCameraHalDeviceLock);        LOGI(camera_device open);        if (name ! NULL) {          cameraid  atoi(name);            if(cameraid  gCamerasNumber) {              LOGE(camera service provided cameraid out of bounds,                       cameraid  %d, num supported  %d,                      cameraid, gCamerasNumber);              rv  -EINVAL;              goto fail;          }            if(gCamerasOpen  CAMERAS_SUPPORTED_SIMUL_MAX) {              LOGE(maximum number(%d) of cameras already open,gCamerasOpen);              rv  -ENOMEM;              goto fail;          }            camera_device  (rk_camera_device_t*)malloc(sizeof(*camera_device));          if(!camera_device) {              LOGE(camera_device allocation fail);              rv  -ENOMEM;              goto fail;          }            camera_ops  (camera_device_ops_t*)malloc(sizeof(*camera_ops));          if(!camera_ops) {              LOGE(camera_ops allocation fail);              rv  -ENOMEM;              goto fail;          }            memset(camera_device, 0, sizeof(*camera_device));          memset(camera_ops, 0, sizeof(*camera_ops));            camera_device-base.common.tag  HARDWARE_DEVICE_TAG;          camera_device-base.common.version  0;          camera_device-base.common.module  (hw_module_t *)(module);          camera_device-base.common.close  camera_device_close;          camera_device-base.ops  camera_ops;            camera_ops-set_preview_window  camera_set_preview_window;          camera_ops-set_callbacks  camera_set_callbacks;          camera_ops-enable_msg_type  camera_enable_msg_type;          camera_ops-disable_msg_type  camera_disable_msg_type;          camera_ops-msg_type_enabled  camera_msg_type_enabled;          camera_ops-start_preview  camera_start_preview;          camera_ops-stop_preview  camera_stop_preview;          camera_ops-preview_enabled  camera_preview_enabled;          camera_ops-store_meta_data_in_buffers  camera_store_meta_data_in_buffers;          camera_ops-start_recording  camera_start_recording;          camera_ops-stop_recording  camera_stop_recording;          camera_ops-recording_enabled  camera_recording_enabled;          camera_ops-release_recording_frame  camera_release_recording_frame;          camera_ops-auto_focus  camera_auto_focus;          camera_ops-cancel_auto_focus  camera_cancel_auto_focus;          camera_ops-take_picture  camera_take_picture;          camera_ops-cancel_picture  camera_cancel_picture;          camera_ops-set_parameters  camera_set_parameters;          camera_ops-get_parameters  camera_get_parameters;          camera_ops-put_parameters  camera_put_parameters;          camera_ops-send_command  camera_send_command;          camera_ops-release  camera_release;          camera_ops-dump  camera_dump;            *device  camera_device-base.common;            // -------- RockChip specific stuff --------            camera_device-cameraid  cameraid;                    camera  new android::CameraHal(cameraid);            if(!camera) {              LOGE(Couldnt create instance of CameraHal class);              rv  -ENOMEM;              goto fail;          }            gCameraHals[cameraid]  camera;          gCamerasOpen;      }        return rv;    fail:      if(camera_device) {          free(camera_device);          camera_device  NULL;      }      if(camera_ops) {          free(camera_ops);          camera_ops  NULL;      }      if(camera) {          delete camera;          camera  NULL;      }      *device  NULL;      return rv;  }    int camera_get_number_of_cameras(void)  {      char cam_path[20];      char cam_num[3],i;      int cam_cnt0,fd-1,rk29_cam[CAMERAS_SUPPORT_MAX];      struct v4l2_capability capability;      rk_cam_info_t camInfoTmp[CAMERAS_SUPPORT_MAX];      char *ptr,**ptrr;      char version[PROPERTY_VALUE_MAX];        if (gCamerasNumber  0)          goto camera_get_number_of_cameras_end;            memset(version,0x00,sizeof(version));      sprintf(version,%d.%d.%d,((CONFIG_CAMERAHAL_VERSION0xff0000)16),          ((CONFIG_CAMERAHAL_VERSION0xff00)8),CONFIG_CAMERAHAL_VERSION0xff);      property_set(CAMERAHAL_VERSION_PROPERTY_KEY,version);            memset(camInfoTmp[0],0x00,sizeof(rk_cam_info_t));      memset(camInfoTmp[1],0x00,sizeof(rk_cam_info_t));            for (i0; i10; i) {          cam_path[0]  0x00;          strcat(cam_path, CAMERA_DEVICE_NAME);          sprintf(cam_num, %d, i);          strcat(cam_path,cam_num);          fd  open(cam_path, O_RDONLY);          if (fd  0)              break;            memset(capability, 0, sizeof(struct v4l2_capability));          if (ioctl(fd, VIDIOC_QUERYCAP, capability)  0) {              LOGE(Video device(%s): query capability not supported.\n,cam_path);              goto loop_continue;          }                    if ((capability.capabilities  (V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING)) ! (V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING)) {              LOGD(Video device(%s): video capture not supported.\n,cam_path);          } else {              memset(camInfoTmp[cam_cnt0x01].device_path,0x00, sizeof(camInfoTmp[cam_cnt0x01].device_path));              strcat(camInfoTmp[cam_cnt0x01].device_path,cam_path);              memset(camInfoTmp[cam_cnt0x01].fival_list,0x00, sizeof(camInfoTmp[cam_cnt0x01].fival_list));              memcpy(camInfoTmp[cam_cnt0x01].driver,capability.driver, sizeof(camInfoTmp[cam_cnt0x01].driver));              camInfoTmp[cam_cnt0x01].version  capability.version;              if (strstr((char*)capability.card[0], front) ! NULL) {                  camInfoTmp[cam_cnt0x01].facing_info.facing  CAMERA_FACING_FRONT;              } else {                  camInfoTmp[cam_cnt0x01].facing_info.facing  CAMERA_FACING_BACK;              }                ptr  strstr((char*)capability.card[0],-);              if (ptr ! NULL) {                  ptr;                  camInfoTmp[cam_cnt0x01].facing_info.orientation  atoi(ptr);              } else {                  camInfoTmp[cam_cnt0x01].facing_info.orientation  0;              }              cam_cnt;                memset(version,0x00,sizeof(version));              sprintf(version,%d.%d.%d,((capability.version0xff0000)16),                  ((capability.version0xff00)8),capability.version0xff);              property_set(CAMERADRIVER_VERSION_PROPERTY_KEY,version);                LOGD(%s(%d): %s:%s,__FUNCTION__,__LINE__,CAMERADRIVER_VERSION_PROPERTY_KEY,version);                            if (cam_cnt  CAMERAS_SUPPORT_MAX)                  i  10;          }  loop_continue:          if (fd  0) {              close(fd);              fd  -1;          }          continue;          }      //zyc , change the camera infomation if there is a usb camera      if((strcmp(camInfoTmp[0].driver,uvcvideo)  0)) {          camInfoTmp[0].facing_info.facing  (camInfoTmp[1].facing_info.facing  CAMERA_FACING_FRONT) ? CAMERA_FACING_BACK:CAMERA_FACING_FRONT;          camInfoTmp[0].facing_info.orientation  (camInfoTmp[0].facing_info.facing  CAMERA_FACING_FRONT)?270:90;      } else if((strcmp(camInfoTmp[1].driver,uvcvideo)  0)) {          camInfoTmp[1].facing_info.facing  (camInfoTmp[0].facing_info.facing  CAMERA_FACING_FRONT) ? CAMERA_FACING_BACK:CAMERA_FACING_FRONT;          camInfoTmp[1].facing_info.orientation  (camInfoTmp[1].facing_info.facing  CAMERA_FACING_FRONT)?270:90;      }      gCamerasNumber  cam_cnt;    #if CONFIG_AUTO_DETECT_FRAMERATE      rk29_cam[0]  0xff;      rk29_cam[1]  0xff;      for (i0; icam_cnt; i) {   span        if (strcmp((char*)camInfoTmp[i].driver[0],rk29xx-camera)  0) {              if (strcmp((char*)camInfoTmp[i].driver[0],(char*)gCamInfos[i].driver[0]) ! 0) {                  rk29_cam[i]  i;               }          } else {              rk29_cam[i]  0xff;          }      }        if ((rk29_cam[0] ! 0xff) || (rk29_cam[1] ! 0xff)) {          if (gCameraFpsDetectThread  NULL) {              gCameraFpsDetectThread  new CameraFpsDetectThread();              LOGD(%s create CameraFpsDetectThread for enum camera framerate!!,__FUNCTION__);              gCameraFpsDetectThread-run(CameraFpsDetectThread, ANDROID_PRIORITY_AUDIO);          }      }  #endif      #if CONFIG_CAMERA_SINGLE_SENSOR_FORCE_BACK_FOR_CTS      if ((gCamerasNumber1)  (camInfoTmp[0].facing_info.facingCAMERA_FACING_FRONT)) {          gCamerasNumber  2;          memcpy(camInfoTmp[1],camInfoTmp[0], sizeof(rk_cam_info_t));          camInfoTmp[1].facing_info.facing  CAMERA_FACING_BACK;      }      #endif            memcpy(gCamInfos[0], camInfoTmp[0], sizeof(rk_cam_info_t));      memcpy(gCamInfos[1], camInfoTmp[1], sizeof(rk_cam_info_t));        camera_get_number_of_cameras_end:      LOGD(%s(%d): Current board have %d cameras attached.,__FUNCTION__, __LINE__, gCamerasNumber);      return gCamerasNumber;  }    int camera_get_camera_info(int camera_id, struct camera_info *info)  {      int rv  0,fp;      int face_value  CAMERA_FACING_BACK;      int orientation  0;      char process_name[30];                if(camera_id  gCamerasNumber) {          LOGE(%s camera_id out of bounds, camera_id  %d, num supported  %d,__FUNCTION__,                  camera_id, gCamerasNumber);          rv  -EINVAL;          goto end;      }        info-facing  gCamInfos[camera_id].facing_info.facing;      info-orientation  gCamInfos[camera_id].facing_info.orientation;         end:      LOGD(%s(%d): camera_%d facing(%d), orientation(%d),__FUNCTION__,__LINE__,camera_id,info-facing,info-orientation);      return rv;  }   而对于为上层提供的HAL层接口函数并不直接操作节点而是间接的去调用CameraHal.cpp去操作节点。 [cpp] view plaincopy int camera_start_preview(struct camera_device * device)  {      int rv  -EINVAL;      rk_camera_device_t* rk_dev  NULL;        LOGV(%s, __FUNCTION__);        if(!device)          return rv;        rk_dev  (rk_camera_device_t*) device;        rv  gCameraHals[rk_dev-cameraid]-startPreview();        return rv;  }    void camera_stop_preview(struct camera_device * device)  {      rk_camera_device_t* rk_dev  NULL;        LOGV(%s, __FUNCTION__);        if(!device)          return;        rk_dev  (rk_camera_device_t*) device;        gCameraHals[rk_dev-cameraid]-stopPreview();  }   3.2CameraHal.cpp去操作节点来进行实际的操作。//这个几个线程很关键分别对应着各种不同的情况但是一直在运行 [cpp] view plaincopy CameraHal::CameraHal(int cameraId)              :mParameters(),              mSnapshotRunning(-1),              mCommandRunning(-1),              mPreviewRunning(STA_PREVIEW_PAUSE),              mPreviewLock(),              mPreviewCond(),              mDisplayRuning(STA_DISPLAY_PAUSE),              mDisplayLock(),              mDisplayCond(),              mANativeWindowLock(),              mANativeWindowCond(),              mANativeWindow(NULL),              mPreviewErrorFrameCount(0),              mPreviewFrameSize(0),              mCamDriverFrmHeightMax(0),              mCamDriverFrmWidthMax(0),              mPreviewBufferCount(0),              mCamDriverPreviewFmt(0),              mCamDriverPictureFmt(0),              mCamDriverV4l2BufferLen(0),              mPreviewMemory(NULL),              mRawBufferSize(0),              mJpegBufferSize(0),              mMsgEnabled(0),              mEffect_number(0),              mScene_number(0),              mWhiteBalance_number(0),              mFlashMode_number(0),              mGps_latitude(-1),              mGps_longitude(-1),              mGps_altitude(-1),              mGps_timestamp(-1),              displayThreadCommandQ(displayCmdQ),              displayThreadAckQ(displayAckQ),                          previewThreadCommandQ(previewCmdQ),              previewThreadAckQ(previewAckQ),              commandThreadCommandQ(commandCmdQ),              commandThreadAckQ(commandAckQ),              snapshotThreadCommandQ(snapshotCmdQ),              snapshotThreadAckQ(snapshotAckQ),              mCamBuffer(NULL)  {      int fp,i;            cameraCallProcess[0]  0x00;       sprintf(cameraCallProcess,/proc/%d/cmdline,getCallingPid());      fp  open(cameraCallProcess, O_RDONLY);      if (fp  0) {          memset(cameraCallProcess,0x00,sizeof(cameraCallProcess));          LOGE(Obtain calling process info failed);      } else {          memset(cameraCallProcess,0x00,sizeof(cameraCallProcess));          read(fp, cameraCallProcess, 30);          close(fp);          fp  -1;          LOGD(Calling process is: %s,cameraCallProcess);      }            iCamFd  -1;      memset(mCamDriverSupportFmt[0],0, sizeof(mCamDriverSupportFmt));      mRecordRunning  false;      mPictureRunning  STA_PICTURE_STOP;      mExitAutoFocusThread  false;      mDriverMirrorSupport  false;      mDriverFlipSupport  false;      mPreviewCmdReceived  false;      mPreviewStartTimes  0x00;          memset(mCamDriverV4l2Buffer, 0x00, sizeof(mCamDriverV4l2Buffer));      memset(mDisplayFormat,0x00,sizeof(mDisplayFormat));      for (i0; iconfig_camera_prview_buf_cnt; i) {   span        mPreviewBufferMap[i]  NULL;          mDisplayBufferMap[i]  NULL;          memset(mGrallocBufferMap[i],0x00,sizeof(rk_previewbuf_info_t));          mPreviewBufs[i]  NULL;          mVideoBufs[i]  NULL;            mPreviewBuffer[i]  NULL;      }            //open the rga device,zyc      mRGAFd  -1;        if (cameraCreate(cameraId)  0) {          initDefaultParameters();            cameraRawJpegBufferCreate(mRawBufferSize,mJpegBufferSize);            mDisplayThread  new DisplayThread(this);            mPreviewThread  new PreviewThread(this);          mCommandThread  new CommandThread(this);          mPictureThread  new PictureThread(this);      mSnapshotThread  new SnapshotThread(this);          mAutoFocusThread  new AutoFocusThread(this);          mDisplayThread-run(CameraDispThread,ANDROID_PRIORITY_URGENT_DISPLAY);          mPreviewThread-run(CameraPreviewThread,ANDROID_PRIORITY_DISPLAY);          mCommandThread-run(CameraCmdThread, ANDROID_PRIORITY_URGENT_DISPLAY);          mAutoFocusThread-run(CameraAutoFocusThread, ANDROID_PRIORITY_DISPLAY);          mSnapshotThread-run(CameraSnapshotThread, ANDROID_PRIORITY_NORMAL);            LOGD(CameraHal create success!);      } else {          mPreviewThread  NULL;          mDisplayThread  NULL;          mCommandThread  NULL;          mPictureThread  NULL;          mSnapshotThread  NULL;               mAutoFocusThread  NULL;      }    }   初始化时参数的配置默认参数图片大小分辨率帧等 [cpp] view plaincopy void CameraHal::initDefaultParameters()  {      CameraParameters params;      String8 parameterString;      int i,j,previewFrameSizeMax;      char cur_param[32],cam_size[10];      char str_picturesize[100];//We support at most 4 resolutions: 2592x1944,2048x1536,1600x1200,1024x768       int ret,picture_size_bit;      struct v4l2_format fmt;                LOG_FUNCTION_NAME          memset(str_picturesize,0x00,sizeof(str_picturesize));      if (CAMERA_IS_UVC_CAMERA()) {          /*preview size setting*/          struct v4l2_frmsizeenum fsize;                                    memset(fsize, 0, sizeof(fsize));                   picture_size_bit  0;          fsize.index  0;                 fsize.pixel_format  mCamDriverPreviewFmt;          while ((ret  ioctl(iCamFd, VIDIOC_ENUM_FRAMESIZES, fsize))  0) {              if (fsize.type  V4L2_FRMSIZE_TYPE_DISCRETE) {                                   if ((fsize.discrete.width  320)  (fsize.discrete.height  240)) {                      if (strcmp(cameraCallProcess,com.tencent.android.pad)  0) {                          fsize.index;                          continue;                      }                  }                  memset(cam_size,0x00,sizeof(cam_size));                  if (parameterString.size() ! 0)                       cam_size[0],;                  sprintf((char*)(cam_size[strlen(cam_size)]),%d,fsize.discrete.width);                  strcat(cam_size, x);                  sprintf((char*)(cam_size[strlen(cam_size)]),%d,fsize.discrete.height);                  parameterString.append((const char*)cam_size);                    if ((strlen(str_picturesize)strlen(cam_size))sizeof(str_picturesize)) {                      if (fsize.discrete.width  2592) {                          strcat(str_picturesize, cam_size);                          if (fsize.discrete.width  mCamDriverFrmWidthMax) {                              mCamDriverFrmWidthMax  fsize.discrete.width;                              mCamDriverFrmHeightMax  fsize.discrete.height;                          }                       }                  } else {                      break;                  }              } else if (fsize.type  V4L2_FRMSIZE_TYPE_CONTINUOUS) {                    break;              } else if (fsize.type  V4L2_FRMSIZE_TYPE_STEPWISE) {                                    break;              }              fsize.index;          }          if (ret ! 0  errno ! EINVAL) {              LOGE(ERROR enumerating frame sizes: %d\n, errno);          }            params.set(CameraParameters::KEY_SUPPORTED_PREVIEW_SIZES, parameterString.string());          params.setPreviewSize(640,480);          /*picture size setting*/                params.set(CameraParameters::KEY_SUPPORTED_PICTURE_SIZES, str_picturesize);                  params.setPictureSize(mCamDriverFrmWidthMax,  mCamDriverFrmHeightMax);                    if (mCamDriverFrmWidthMax  1024) {              mRawBufferSize  RAW_BUFFER_SIZE_1M;              mJpegBufferSize  JPEG_BUFFER_SIZE_1M;          } else if (mCamDriverFrmWidthMax  1600) {              mRawBufferSize  RAW_BUFFER_SIZE_2M;              mJpegBufferSize  JPEG_BUFFER_SIZE_2M;          } else if (mCamDriverFrmWidthMax  2048) {              mRawBufferSize  RAW_BUFFER_SIZE_3M;              mJpegBufferSize  JPEG_BUFFER_SIZE_3M;          } else if (mCamDriverFrmWidthMax  2592) {                                            mRawBufferSize  RAW_BUFFER_SIZE_5M;              mJpegBufferSize  JPEG_BUFFER_SIZE_5M;          } else {              LOGE(%s(%d):Camera Hal is only support 5Mega camera, but the uvc camera is %dx%d,                   __FUNCTION__,__LINE__,mCamDriverFrmWidthMax, mCamDriverFrmHeightMax);              mRawBufferSize  RAW_BUFFER_SIZE_5M;              mJpegBufferSize  JPEG_BUFFER_SIZE_5M;          }                    /* set framerate */          struct v4l2_streamparm setfps;                              memset(setfps, 0, sizeof(struct v4l2_streamparm));          setfps.type  V4L2_BUF_TYPE_VIDEO_CAPTURE;          setfps.parm.capture.timeperframe.numerator1;          setfps.parm.capture.timeperframe.denominator15;          ret  ioctl(iCamFd, VIDIOC_S_PARM, setfps);             /*frame rate setting*/              params.set(CameraParameters::KEY_SUPPORTED_PREVIEW_FRAME_RATES, 15);          params.setPreviewFrameRate(15);          /*frame per second setting*/          parameterString  15000,15000;          params.set(CameraParameters::KEY_PREVIEW_FPS_RANGE, parameterString.string());          parameterString  (15000,15000);          params.set(CameraParameters::KEY_SUPPORTED_PREVIEW_FPS_RANGE, parameterString.string());          /*not support zoom */          params.set(CameraParameters::KEY_ZOOM_SUPPORTED, false);        } else if (CAMERA_IS_RKSOC_CAMERA()) {                fmt.type  V4L2_BUF_TYPE_VIDEO_CAPTURE;          fmt.fmt.pix.pixelformat mCamDriverPreviewFmt;          fmt.fmt.pix.field  V4L2_FIELD_NONE;                    /*picture size setting*/          fmt.fmt.pix.width  10000;          fmt.fmt.pix.height  10000;          ret  ioctl(iCamFd, VIDIOC_TRY_FMT, fmt);                    mCamDriverFrmWidthMax  fmt.fmt.pix.width;          mCamDriverFrmHeightMax  fmt.fmt.pix.height;                    if (mCamDriverFrmWidthMax  2592) {              LOGE(Camera driver support maximum resolution(%dx%d) is overflow 5Mega!,mCamDriverFrmWidthMax,mCamDriverFrmHeightMax);              mCamDriverFrmWidthMax  2592;              mCamDriverFrmHeightMax  1944;          }                    /*preview size setting*/           if (mCamDriverFrmWidthMax  176) {                          fmt.fmt.pix.width  176;              fmt.fmt.pix.height  144;              if (ioctl(iCamFd, VIDIOC_TRY_FMT, fmt)  0) {                  if ((fmt.fmt.pix.width  176)  (fmt.fmt.pix.height  144)) {                      parameterString.append(176x144);                      params.setPreviewSize(176, 144);                      previewFrameSizeMax   PAGE_ALIGN(176*144*2)*2;          // 176*144*2     rgb565                      //params.set(CameraParameters::KEY_PREFERRED_PREVIEW_SIZE_FOR_VIDEO,176x144);                  }              }          }            if ((mCamDriverCapability.version  0xff)  0x07) {              int tmp0,tmp1;              if (cameraFramerateQuery(mCamDriverPreviewFmt, 240,160,tmp1,tmp0)  0) {                  if (mCamDriverFrmWidthMax  240) {                                  fmt.fmt.pix.width  240;                      fmt.fmt.pix.height  160;                      if (ioctl(iCamFd, VIDIOC_TRY_FMT, fmt)  0) {                          if ((fmt.fmt.pix.width  240)  (fmt.fmt.pix.height  160)) {                              parameterString.append(,240x160);                              params.setPreviewSize(240, 160);                              previewFrameSizeMax   PAGE_ALIGN(240*160*2)*2;          // 240*160*2     rgb565                                                        }                      }                  }              }          }                    if (strcmp(cameraCallProcess,com.tencent.android.pad)) {              if (mCamDriverFrmWidthMax  320) {                              fmt.fmt.pix.width  320;                  fmt.fmt.pix.height  240;                  if (ioctl(iCamFd, VIDIOC_TRY_FMT, fmt)  0) {                      if ((fmt.fmt.pix.width  320)  (fmt.fmt.pix.height  240)) {                          parameterString.append(,320x240);                          params.setPreviewSize(320, 240);                          previewFrameSizeMax   PAGE_ALIGN(320*240*2)*2;          // 320*240*2                                                }                  }              }          }          if (mCamDriverFrmWidthMax  352) {                          fmt.fmt.pix.width  352;              fmt.fmt.pix.height  288;              if (ioctl(iCamFd, VIDIOC_TRY_FMT, fmt)  0) {                  if ((fmt.fmt.pix.width  352)  (fmt.fmt.pix.height  288)) {                      parameterString.append(,352x288);                      params.setPreviewSize(352, 288);                      previewFrameSizeMax   PAGE_ALIGN(352*288*2)*2;          // 352*288*1.5*2                                        }              }          }                    if (mCamDriverFrmWidthMax  640) {                          fmt.fmt.pix.width  640;              fmt.fmt.pix.height  480;              if (ioctl(iCamFd, VIDIOC_TRY_FMT, fmt)  0) {                  if ((fmt.fmt.pix.width  640)  (fmt.fmt.pix.height  480)) {                      parameterString.append(,640x480);                      params.setPreviewSize(640, 480);                      previewFrameSizeMax   PAGE_ALIGN(640*480*2)*2;          // 640*480*1.5*2                                        }              }          }            if (mCamDriverFrmWidthMax  720) {              fmt.fmt.pix.width  720;              fmt.fmt.pix.height  480;              if (ioctl(iCamFd, VIDIOC_TRY_FMT, fmt)  0) {                  if ((fmt.fmt.pix.width  720)  (fmt.fmt.pix.height  480)) {                      parameterString.append(,720x480);                      previewFrameSizeMax   PAGE_ALIGN(720*480*2)*2;          // 720*480*1.5*2                                        }              }          }            if (mCamDriverFrmWidthMax  1280) {              fmt.fmt.pix.width  1280;              fmt.fmt.pix.height  720;              if (ioctl(iCamFd, VIDIOC_TRY_FMT, fmt)  0) {                  if ((fmt.fmt.pix.width  1280)  (fmt.fmt.pix.height  720)) {                      parameterString.append(,1280x720);                      previewFrameSizeMax   PAGE_ALIGN(1280*720*2)*2;          // 1280*720*1.5*2                                        }              }          }          mSupportPreviewSizeReally  parameterString;          /* ddlrock-chips.com: Facelock speed is low, so scale down preview data to facelock for speed up */          if ((strcmp(cameraCallProcess,com.android.facelock)0)) {                          if (strstr(mSupportPreviewSizeReally.string(),640x480)||                  strstr(mSupportPreviewSizeReally.string(),320x240)) {                  parameterString  160x120;                  params.setPreviewSize(160, 120);                  }          }          params.set(CameraParameters::KEY_SUPPORTED_PREVIEW_SIZES, parameterString.string());                    strcat(str_picturesize,parameterString.string());          strcat(str_picturesize,,);          if(mCamDriverFrmWidthMax  640){              strcat( str_picturesize,640x480,320x240);              mRawBufferSize  RAW_BUFFER_SIZE_0M3;              mJpegBufferSize  JPEG_BUFFER_SIZE_0M3;              params.setPictureSize(640,480);          }else if (mCamDriverFrmWidthMax  1280) {              strcat( str_picturesize,1024x768,640x480,320x240);              mRawBufferSize  RAW_BUFFER_SIZE_1M;              mJpegBufferSize  JPEG_BUFFER_SIZE_1M;              params.setPictureSize(1024,768);          } else if (mCamDriverFrmWidthMax  1600) {              strcat( str_picturesize,1600x1200,1024x768,640x480);              mRawBufferSize  RAW_BUFFER_SIZE_2M;              mJpegBufferSize  JPEG_BUFFER_SIZE_2M;              params.setPictureSize(1600,1200);          } else if (mCamDriverFrmWidthMax  2048) {              strcat( str_picturesize,2048x1536,1600x1200,1024x768);              mRawBufferSize  RAW_BUFFER_SIZE_3M;              mJpegBufferSize  JPEG_BUFFER_SIZE_3M;                params.setPictureSize(2048,1536);          } else if (mCamDriverFrmWidthMax  2592) {                                            strcat( str_picturesize,2592x1944,2048x1536,1600x1200,1024x768);              params.setPictureSize(2592,1944);              mRawBufferSize  RAW_BUFFER_SIZE_5M;              mJpegBufferSize  JPEG_BUFFER_SIZE_5M;          } else {              sprintf(str_picturesize, %dx%d, mCamDriverFrmWidthMax,mCamDriverFrmHeightMax);              mRawBufferSize  RAW_BUFFER_SIZE_5M;              mJpegBufferSize  JPEG_BUFFER_SIZE_5M;              params.setPictureSize(mCamDriverFrmWidthMax,mCamDriverFrmHeightMax);          }                    params.set(CameraParameters::KEY_SUPPORTED_PICTURE_SIZES, str_picturesize);            /*frame rate setting*/          cameraFpsInfoSet(params);                    /*zoom setting*/          struct v4l2_queryctrl zoom;          char str_zoom_max[3],str_zoom_element[5];          char str_zoom[200];          strcpy(str_zoom, );//default zoom          int max;            zoom.id  V4L2_CID_ZOOM_ABSOLUTE;          if (!ioctl(iCamFd, VIDIOC_QUERYCTRL, zoom)) {              mZoomMax  zoom.maximum;              mZoomMin zoom.minimum;              mZoomStep  zoom.step;                  max  (mZoomMax - mZoomMin)/mZoomStep;              sprintf(str_zoom_max,%d,max);              params.set(CameraParameters::KEY_ZOOM_SUPPORTED, true);              params.set(CameraParameters::KEY_MAX_ZOOM, str_zoom_max);              params.set(CameraParameters::KEY_ZOOM, 0);              for (imZoomMin; imZoomMax; imZoomStep) {                  sprintf(str_zoom_element,%d,, i);                  strcat(str_zoom,str_zoom_element);              }              params.set(CameraParameters::KEY_ZOOM_RATIOS, str_zoom);          }      }      /*preview format setting*/      params.set(CameraParameters::KEY_SUPPORTED_PREVIEW_FORMATS, yuv420sp,rgb565,yuv420p);      params.set(CameraParameters::KEY_VIDEO_FRAME_FORMAT,CameraParameters::PIXEL_FORMAT_YUV420SP);      if (strcmp(cameraCallProcess,com.android.camera)0) {    //for PanoramaActivity          params.setPreviewFormat(CameraParameters::PIXEL_FORMAT_RGB565);         } else {          params.setPreviewFormat(CameraParameters::PIXEL_FORMAT_YUV420SP);         }      /* zycrock-chips.com: preset the displayformat for cts */      strcpy(mDisplayFormat,CAMERA_DISPLAY_FORMAT_NV12);          params.set(CameraParameters::KEY_VIDEO_FRAME_FORMAT,CameraParameters::PIXEL_FORMAT_YUV420SP);        /*picture format setting*/      params.set(CameraParameters::KEY_SUPPORTED_PICTURE_FORMATS, CameraParameters::PIXEL_FORMAT_JPEG);      params.setPictureFormat(CameraParameters::PIXEL_FORMAT_JPEG);        /*jpeg quality setting*/      params.set(CameraParameters::KEY_JPEG_QUALITY, 70);        /*white balance setting*/      struct v4l2_queryctrl whiteBalance;      struct v4l2_querymenu *whiteBalance_menu  mWhiteBalance_menu;      char str_whitebalance[200];      strcpy(str_whitebalance, );//default whitebalance      whiteBalance.id  V4L2_CID_DO_WHITE_BALANCE;      if (!ioctl(iCamFd, VIDIOC_QUERYCTRL, whiteBalance)) {          for (i  whiteBalance.minimum; i  whiteBalance.maximum; i  whiteBalance.step) {              whiteBalance_menu-id  V4L2_CID_DO_WHITE_BALANCE;              whiteBalance_menu-index  i;              if (!ioctl(iCamFd, VIDIOC_QUERYMENU, whiteBalance_menu)) {                  if (i ! whiteBalance.minimum)                      strcat(str_whitebalance, ,);                  strcat(str_whitebalance, (char *)whiteBalance_menu-name);                  if (whiteBalance.default_value  i) {                      strcpy(cur_param, (char *)whiteBalance_menu-name);                  }                  mWhiteBalance_number;              }              whiteBalance_menu;          }          params.set(CameraParameters::KEY_SUPPORTED_WHITE_BALANCE, str_whitebalance);          params.set(CameraParameters::KEY_WHITE_BALANCE, cur_param);      }        /*color effect setting*/      struct v4l2_queryctrl effect;      struct v4l2_querymenu *effect_menu  mEffect_menu;      char str_effect[200];      strcpy(str_effect, );//default effect      effect.id  V4L2_CID_EFFECT;      if (!ioctl(iCamFd, VIDIOC_QUERYCTRL, effect)) {          for (i  effect.minimum; i  effect.maximum; i  effect.step) {              effect_menu-id  V4L2_CID_EFFECT;              effect_menu-index  i;              if (!ioctl(iCamFd, VIDIOC_QUERYMENU, effect_menu)) {                  if (i ! effect.minimum)                      strcat(str_effect, ,);                  strcat(str_effect, (char *)effect_menu-name);                  if (effect.default_value  i) {                      strcpy(cur_param, (char *)effect_menu-name);                  }                  mEffect_number;              }              effect_menu;          }          params.set(CameraParameters::KEY_SUPPORTED_EFFECTS, str_effect);          params.set(CameraParameters::KEY_EFFECT, cur_param);      }        /*scene setting*/      struct v4l2_queryctrl scene;      struct v4l2_querymenu *scene_menu  mScene_menu;      char str_scene[200];      strcpy(str_scene, );//default scene      scene.id  V4L2_CID_SCENE;      if (!ioctl(iCamFd, VIDIOC_QUERYCTRL, scene)) {          for (iscene.minimum; iscene.maximum; iscene.step) {              scene_menu-id  V4L2_CID_SCENE;              scene_menu-index  i;              if (!ioctl(iCamFd, VIDIOC_QUERYMENU, scene_menu)) {                  if (i ! scene.minimum)                      strcat(str_scene, ,);                  strcat(str_scene, (char *)scene_menu-name);                  if (scene.default_value  i) {                      strcpy(cur_param, (char *)scene_menu-name);                  }                  mScene_number;              }              scene_menu;          }          params.set(CameraParameters::KEY_SUPPORTED_SCENE_MODES, str_scene);          params.set(CameraParameters::KEY_SCENE_MODE, cur_param);        }        /*flash mode setting*/      struct v4l2_queryctrl flashMode;      struct v4l2_querymenu *flashMode_menu  mFlashMode_menu;      char str_flash[200];      strcpy(str_flash, );//default flash      flashMode.id  V4L2_CID_FLASH;      if (!ioctl(iCamFd, VIDIOC_QUERYCTRL, flashMode)) {          for (i  flashMode.minimum; i  flashMode.maximum; i  flashMode.step) {              flashMode_menu-id  V4L2_CID_FLASH;              flashMode_menu-index  i;              if (!ioctl(iCamFd, VIDIOC_QUERYMENU, flashMode_menu)) {                  if (i ! flashMode.minimum)                      strcat(str_flash, ,);                  strcat(str_flash, (char *)flashMode_menu-name);                  if (flashMode.default_value  i) {                      strcpy(cur_param, (char *)flashMode_menu-name);                  }                  mFlashMode_number;              }              flashMode_menu;          }          params.set(CameraParameters::KEY_SUPPORTED_FLASH_MODES, str_flash);          params.set(CameraParameters::KEY_FLASH_MODE, cur_param);      }            /*focus mode setting*/      struct v4l2_queryctrl focus;        parameterString  CameraParameters::FOCUS_MODE_FIXED;      params.set(CameraParameters::KEY_FOCUS_MODE, CameraParameters::FOCUS_MODE_FIXED);      focus.id  V4L2_CID_FOCUS_AUTO;      if (!ioctl(iCamFd, VIDIOC_QUERYCTRL, focus)) {          parameterString.append(,);          parameterString.append(CameraParameters::FOCUS_MODE_AUTO);          params.set(CameraParameters::KEY_FOCUS_MODE, CameraParameters::FOCUS_MODE_AUTO);      }        focus.id  V4L2_CID_FOCUS_CONTINUOUS;      if (!ioctl(iCamFd, VIDIOC_QUERYCTRL, focus)) {          parameterString.append(,);          parameterString.append(CameraParameters::FOCUS_MODE_EDOF);      }        focus.id  V4L2_CID_FOCUS_ABSOLUTE;      if (!ioctl(iCamFd, VIDIOC_QUERYCTRL, focus)) {          parameterString.append(,);          parameterString.append(CameraParameters::FOCUS_MODE_INFINITY);          parameterString.append(,);          parameterString.append(CameraParameters::FOCUS_MODE_MACRO);      }        params.set(CameraParameters::KEY_SUPPORTED_FOCUS_MODES, parameterString.string());        /*mirror and flip query*/      struct v4l2_queryctrl mirror,flip;            mirror.id  V4L2_CID_HFLIP;      if (!ioctl(iCamFd, VIDIOC_QUERYCTRL, mirror)) {          mDriverMirrorSupport  true;      } else {          mDriverMirrorSupport  false;      }        flip.id  V4L2_CID_VFLIP;      if (!ioctl(iCamFd, VIDIOC_QUERYCTRL, flip)) {          mDriverFlipSupport  true;      } else {          mDriverFlipSupport  false;      }          /*Exposure setting*/      struct v4l2_queryctrl exposure;      char str_exposure[16];      exposure.id  V4L2_CID_EXPOSURE;      if (!ioctl(iCamFd, VIDIOC_QUERYCTRL, exposure)) {          sprintf(str_exposure,%d,exposure.default_value);          params.set(CameraParameters::KEY_EXPOSURE_COMPENSATION, str_exposure);          sprintf(str_exposure,%d,exposure.maximum);                  params.set(CameraParameters::KEY_MAX_EXPOSURE_COMPENSATION, str_exposure);          sprintf(str_exposure,%d,exposure.minimum);                  params.set(CameraParameters::KEY_MIN_EXPOSURE_COMPENSATION, str_exposure);          sprintf(str_exposure,%d,exposure.step);           params.set(CameraParameters::KEY_EXPOSURE_COMPENSATION_STEP, str_exposure);      } else {          params.set(CameraParameters::KEY_EXPOSURE_COMPENSATION, 0);          params.set(CameraParameters::KEY_MAX_EXPOSURE_COMPENSATION, 0);          params.set(CameraParameters::KEY_MIN_EXPOSURE_COMPENSATION, 0);          params.set(CameraParameters::KEY_EXPOSURE_COMPENSATION_STEP, 0.000001f);      }      /*rotation setting*/      params.set(CameraParameters::KEY_ROTATION, 0);        /*lzgrockchip.com :add some settings to pass cts*/          /*focus distance setting ,no much meaning ,only for passing cts */      parameterString  0.3,50,Infinity;      params.set(CameraParameters::KEY_FOCUS_DISTANCES, parameterString.string());      /*focus length setting ,no much meaning ,only for passing cts */      parameterString  35;      params.set(CameraParameters::KEY_FOCAL_LENGTH, parameterString.string());     /*horizontal angle of view setting ,no much meaning ,only for passing cts */      parameterString  100;      params.set(CameraParameters::KEY_HORIZONTAL_VIEW_ANGLE, parameterString.string());      /*vertical angle of view setting ,no much meaning ,only for passing cts */      parameterString  100;      params.set(CameraParameters::KEY_VERTICAL_VIEW_ANGLE, parameterString.string());       /*quality of the EXIF thumbnail in Jpeg picture setting */      parameterString  50;      params.set(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY, parameterString.string());     /*supported size of the EXIF thumbnail in Jpeg picture setting */      parameterString  0x0,160x128;      params.set(CameraParameters::KEY_SUPPORTED_JPEG_THUMBNAIL_SIZES, parameterString.string());      parameterString  160;      params.set(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH, parameterString.string());      parameterString  128;      params.set(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT, parameterString.string());       /* zycrock-chips.com: for cts ,KEY_MAX_NUM_DETECTED_FACES_HW should not be 0 */      params.set(CameraParameters::KEY_MAX_NUM_DETECTED_FACES_HW, 0);      params.set(CameraParameters::KEY_MAX_NUM_DETECTED_FACES_SW, 0);      params.set(CameraParameters::KEY_RECORDING_HINT,false);      params.set(CameraParameters::KEY_VIDEO_STABILIZATION_SUPPORTED,false);      params.set(CameraParameters::KEY_VIDEO_SNAPSHOT_SUPPORTED,true);      params.set(CameraParameters::KEY_MAX_NUM_METERING_AREAS,0);        LOGD (Support Preview format: %s ,params.get(CameraParameters::KEY_SUPPORTED_PREVIEW_FORMATS));      LOGD (Support Preview sizes: %s ,params.get(CameraParameters::KEY_SUPPORTED_PREVIEW_SIZES));      LOGD (Support Preview FPS range: %s,params.get(CameraParameters::KEY_SUPPORTED_PREVIEW_FPS_RANGE));      LOGD (Support Preview framerate: %s,params.get(CameraParameters::KEY_SUPPORTED_PREVIEW_FRAME_RATES));       LOGD (Support Picture sizes: %s ,params.get(CameraParameters::KEY_SUPPORTED_PICTURE_SIZES));      if (params.get(CameraParameters::KEY_SUPPORTED_WHITE_BALANCE))          LOGD (Support white balance: %s,params.get(CameraParameters::KEY_SUPPORTED_WHITE_BALANCE));      if (params.get(CameraParameters::KEY_SUPPORTED_EFFECTS))          LOGD (Support color effect: %s,params.get(CameraParameters::KEY_SUPPORTED_EFFECTS));      if (params.get(CameraParameters::KEY_SUPPORTED_SCENE_MODES))          LOGD (Support scene: %s,params.get(CameraParameters::KEY_SUPPORTED_SCENE_MODES));      if (params.get(CameraParameters::KEY_SUPPORTED_FLASH_MODES))          LOGD (Support flash: %s,params.get(CameraParameters::KEY_SUPPORTED_FLASH_MODES));      LOGD (Support focus: %s,params.get(CameraParameters::KEY_SUPPORTED_FOCUS_MODES));      LOGD (Support zoom: %s(ratios: %s),params.get(CameraParameters::KEY_ZOOM_SUPPORTED),          params.get(CameraParameters::KEY_ZOOM_RATIOS));      if (strcmp(0, params.get(CameraParameters::KEY_MAX_EXPOSURE_COMPENSATION))          || strcmp(0, params.get(CameraParameters::KEY_MIN_EXPOSURE_COMPENSATION))) {          LOGD (Support exposure: (%s - %s),params.get(CameraParameters::KEY_MIN_EXPOSURE_COMPENSATION),              params.get(CameraParameters::KEY_MAX_EXPOSURE_COMPENSATION));      }      LOGD (Support hardware faces detecte: %s,params.get(CameraParameters::KEY_MAX_NUM_DETECTED_FACES_HW));      LOGD (Support software faces detecte: %s,params.get(CameraParameters::KEY_MAX_NUM_DETECTED_FACES_SW));      LOGD (Support video stabilization: %s,params.get(CameraParameters::KEY_VIDEO_STABILIZATION_SUPPORTED));      LOGD (Support recording hint: %s,params.get(CameraParameters::KEY_RECORDING_HINT));      LOGD (Support video snapshot: %s,params.get(CameraParameters::KEY_VIDEO_SNAPSHOT_SUPPORTED));      LOGD (Support Mirror and Filp: %s,(mDriverMirrorSupport  mDriverFlipSupport)? true:false);        cameraConfig(params);      LOG_FUNCTION_NAME_EXIT    }   然后剩下的大部分都是针对这个线程的运行实现以及对于CameraHal_Module.cpp中实现的为上层提供的接口的具体实现比如 [cpp] view plaincopy int CameraHal::startPreview()  {      LOG_FUNCTION_NAME      Message msg;          Mutex::Autolock lock(mLock);            if ((mPreviewThread ! NULL)  (mCommandThread ! NULL)) {          msg.command  CMD_PREVIEW_START;          msg.arg1  (void*)CMDARG_NACK;          commandThreadCommandQ.put(msg);      }      mPreviewCmdReceived  true;      LOG_FUNCTION_NAME_EXIT      return NO_ERROR ;  }    void CameraHal::stopPreview()  {      LOG_FUNCTION_NAME          Message msg;      int ret  0;      Mutex::Autolock lock(mLock);        if ((mPreviewThread ! NULL)  (mCommandThread ! NULL)) {          msg.command  CMD_PREVIEW_STOP;          msg.arg1  (void*)CMDARG_ACK;          commandThreadCommandQ.put(msg);            if (mANativeWindow  NULL) {              mANativeWindowCond.signal();              LOGD(%s(%d): wake up command thread for stop preview,__FUNCTION__,__LINE__);          }                    while (ret  0) {                          ret  commandThreadAckQ.get(msg);              if (ret  0) {                  if (msg.command  CMD_PREVIEW_STOP) {                                          ret  1;                  }              }          }      } else {          LOGE(%s(%d): cancel, because thread (%s %s) is NULL, __FUNCTION__,__LINE__,(mPreviewThread  NULL)?mPreviewThread: ,              (mCommandThread  NULL)?mCommandThread: );      }      mPreviewCmdReceived  false;      LOG_FUNCTION_NAME_EXIT  }    int CameraHal::autoFocus()  {      LOG_FUNCTION_NAME      int ret  0;      Message msg;      Mutex::Autolock lock(mLock);        if ((mPreviewThread ! NULL)  (mCommandThread ! NULL)) {          msg.command  CMD_AF_START;          msg.arg1  (void*)CMDARG_ACK;          commandThreadCommandQ.put(msg);          while (ret  0) {                          ret  commandThreadAckQ.get(msg,5000);              if (ret  0) {                  if (msg.command  CMD_AF_START) {                                          ret  1;                  }              } else {                  LOGE(%s(%d): AutoFocus is time out!!!\n,__FUNCTION__,__LINE__);              }          }      } else {          LOGE(%s(%d):  cancel, because thread (%s %s) is NULL, __FUNCTION__,__LINE__,(mPreviewThread  NULL)?mPreviewThread: ,              (mCommandThread  NULL)?mCommandThread: );      }      LOG_FUNCTION_NAME_EXIT      return NO_ERROR;  }     [cpp] view plaincopy pre name spancode classcpppre name spancode classcpppre name spancode classcpp转载于:https://www.cnblogs.com/senior-engineer/p/4935506.html
http://wiki.neutronadmin.com/news/353014/

相关文章:

  • 长春站建筑网站上传文件
  • 网站式小程序flash做网站通栏
  • 网站添加备案信息网页制作培训苏州
  • 网站自己建机房深圳网站开发工程师
  • 网站建设实例下载wordpress目录只显示第一个图片
  • 怎么做网站管理系统seo如何分析网站
  • 牛街网站建设网站邮件系统建设招标
  • 第三方商城网站建设网站没有收录了
  • 可以不花钱做网站吗视频直播源码
  • 一流的镇江网站建设魔贝课凡seo课程好吗
  • 建设工程学部研究生培养网站湖南常德邮编
  • 腾讯云建站流程2023年10月爆发新冠
  • 福步外贸网站wordpress如何修改模板
  • 网站优化分析wordpress更好用吗
  • 网络建设网站有关知识高端轻奢品牌
  • 网站 整站 抓取深圳网站建设公司流程
  • 制定网站建设规划书软件推广简报
  • 中国国防新闻兰州企业网络推广优化
  • 企业网站模板 首页大图企业信息查询网官网
  • 长沙公司建设网站公司名字大全最新
  • 网站后台管理怎么进衡水精品网站建设价格
  • 天津百度关键词排名外贸网站建设seo优化
  • 中石油技术开发公司网站东莞做网站注意事项
  • 301的网站用什么来做连锁租车网站源码
  • 广州网站建设性价比网站域名查主机
  • 阿里云建立网站培训机构图片
  • 常州淄博网站优化软件库合集软件资料2024
  • 定制高端网站建设报价视频网站如何推广
  • 怎么免费网上做公司网站石狮网站建设费用
  • wordpress网站语言商业广告