拍照开发指导

    表 1 API列表

    无。

    1. 实现设备状态回调的派生类,用户在设备状态发生变更(如新插入相机设备/相机掉线)时,自定义操作。

    2. 实现帧事件回调的派生类,这里在拿到帧数据以后将其转存为文件。

      1. {
      2. cout << "Start saving picture" << endl;
      3. struct timeval tv;
      4. gettimeofday(&tv, NULL);
      5. struct tm *ltm = localtime(&tv.tv_sec);
      6. if (ltm != nullptr) {
      7. ostringstream ss("Capture_");
      8. ss << "Capture" << ltm->tm_hour << "-" << ltm->tm_min << "-" << ltm->tm_sec << ".jpg";
      9. ofstream pic("/sdcard/" + ss.str(), ofstream::out | ofstream::trunc);
      10. cout << "write " << size << " bytes" << endl;
      11. pic.write(p, size);
      12. cout << "Saving picture end" << endl;
      13. }
      14. }
      15. class TestFrameStateCallback : public FrameStateCallback {
      16. void OnFrameFinished(Camera &camera, FrameConfig &fc, FrameResult &result) override
      17. {
      18. cout << "Receive frame complete inform." << endl;
      19. if (fc.GetFrameConfigType() == FRAME_CONFIG_CAPTURE) {
      20. list<Surface *> surfaceList = fc.GetSurfaces();
      21. for (Surface *surface : surfaceList) {
      22. if (buffer != nullptr) {
      23. char *virtAddr = static_cast<char *>(buffer->GetVirAddr());
      24. if (virtAddr != nullptr) {
      25. SampleSaveCapture(virtAddr, buffer->GetSize());
      26. }
      27. surface->ReleaseBuffer(buffer);
      28. }
      29. delete surface;
      30. }
      31. delete &fc;
      32. }
      33. }
      34. };
    3. 实现相机状态回调的派生类,当相机状态发生变化(配置成功/失败,创建成功/失败)时,自定义操作。

    4. 创建CameraKit,用于创建和获取camera信息。

      1. CameraKit *camKit = CameraKit::GetInstance();
      2. list<string> camList = camKit->GetCameraIds();
      3. string camId;
      4. for (auto &cam : camList) {
      5. cout << "camera name:" << cam << endl;
      6. const CameraAbility *ability = camKit->GetCameraAbility(cam);
      7. /* find camera which fits user's ability */
      8. list<CameraPicSize> sizeList = ability->GetSupportedSizes(0);
      9. if (find(sizeList.begin(), sizeList.end(), CAM_PIC_1080P) != sizeList.end()) {
      10. camId = cam;
      11. }
    5. 创建Camera实例。

      1. void OnCreated(Camera &c) override
      2. {
      3. cout << "Sample recv OnCreate camera." << endl;
      4. auto config = CameraConfig::CreateCameraConfig();
      5. config->SetFrameStateCallback(&fsCb_, &eventHdlr_);
      6. c.Configure(*config);
      7. cam_ = &c;
      8. }
      9. void Capture()
      10. {
      11. if (cam_ == nullptr) {
      12. cout << "Camera is not ready." << endl;
      13. return;
      14. }
      15. FrameConfig *fc = new FrameConfig(FRAME_CONFIG_CAPTURE);
      16. Surface *surface = Surface::CreateSurface();
      17. if (surface == nullptr) {
      18. delete fc;
      19. }
      20. surface->SetWidthAndHeight(1920, 1080); /* 1920:width,1080:height */
      21. fc->AddSurface(*surface);
      22. cam_->TriggerSingleCapture(*fc);