11c1b0f19Sopenharmony_ci/*
21c1b0f19Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
31c1b0f19Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
41c1b0f19Sopenharmony_ci * you may not use this file except in compliance with the License.
51c1b0f19Sopenharmony_ci * You may obtain a copy of the License at
61c1b0f19Sopenharmony_ci *
71c1b0f19Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
81c1b0f19Sopenharmony_ci *
91c1b0f19Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
101c1b0f19Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
111c1b0f19Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
121c1b0f19Sopenharmony_ci * See the License for the specific language governing permissions and
131c1b0f19Sopenharmony_ci * limitations under the License.
141c1b0f19Sopenharmony_ci */
151c1b0f19Sopenharmony_ci
161c1b0f19Sopenharmony_ci#ifndef OHOS_DCAMERA_CLIENT_DEMO_H
171c1b0f19Sopenharmony_ci#define OHOS_DCAMERA_CLIENT_DEMO_H
181c1b0f19Sopenharmony_ci
191c1b0f19Sopenharmony_ci#include <fstream>
201c1b0f19Sopenharmony_ci
211c1b0f19Sopenharmony_ci#include "anonymous_string.h"
221c1b0f19Sopenharmony_ci#include "camera_device_ability_items.h"
231c1b0f19Sopenharmony_ci#include "camera_input.h"
241c1b0f19Sopenharmony_ci#include "camera_manager.h"
251c1b0f19Sopenharmony_ci#include "camera_metadata_operator.h"
261c1b0f19Sopenharmony_ci#include "camera_output_capability.h"
271c1b0f19Sopenharmony_ci#include "capture_input.h"
281c1b0f19Sopenharmony_ci#include "capture_output.h"
291c1b0f19Sopenharmony_ci#include "capture_session.h"
301c1b0f19Sopenharmony_ci#include "dcamera_capture_info_cmd.h"
311c1b0f19Sopenharmony_ci#include "dcamera_utils_tools.h"
321c1b0f19Sopenharmony_ci#include "distributed_camera_constants.h"
331c1b0f19Sopenharmony_ci#include "distributed_camera_errno.h"
341c1b0f19Sopenharmony_ci#include "distributed_hardware_log.h"
351c1b0f19Sopenharmony_ci#include "metadata_utils.h"
361c1b0f19Sopenharmony_ci#include "photo_output.h"
371c1b0f19Sopenharmony_ci#include "preview_output.h"
381c1b0f19Sopenharmony_ci#include "surface.h"
391c1b0f19Sopenharmony_ci#include "video_output.h"
401c1b0f19Sopenharmony_ci
411c1b0f19Sopenharmony_cinamespace OHOS {
421c1b0f19Sopenharmony_cinamespace DistributedHardware {
431c1b0f19Sopenharmony_ciclass DemoDCameraBufferConsumerListener : public IBufferConsumerListener {
441c1b0f19Sopenharmony_cipublic:
451c1b0f19Sopenharmony_ci    explicit DemoDCameraBufferConsumerListener(const sptr<IConsumerSurface>& surface) : surface_(surface)
461c1b0f19Sopenharmony_ci    {
471c1b0f19Sopenharmony_ci    }
481c1b0f19Sopenharmony_ci
491c1b0f19Sopenharmony_ci    void OnBufferAvailable()
501c1b0f19Sopenharmony_ci    {
511c1b0f19Sopenharmony_ci        DHLOGI("DemoDCameraBufferConsumerListener::OnBufferAvailable");
521c1b0f19Sopenharmony_ci        if (surface_ == nullptr) {
531c1b0f19Sopenharmony_ci            DHLOGE("DemoDCameraBufferConsumerListener surface is null");
541c1b0f19Sopenharmony_ci            return;
551c1b0f19Sopenharmony_ci        }
561c1b0f19Sopenharmony_ci
571c1b0f19Sopenharmony_ci        int32_t flushFence = 0;
581c1b0f19Sopenharmony_ci        int64_t timestamp = 0;
591c1b0f19Sopenharmony_ci        OHOS::Rect damage;
601c1b0f19Sopenharmony_ci        OHOS::sptr<OHOS::SurfaceBuffer> buffer = nullptr;
611c1b0f19Sopenharmony_ci        surface_->AcquireBuffer(buffer, flushFence, timestamp, damage);
621c1b0f19Sopenharmony_ci        if (buffer == nullptr) {
631c1b0f19Sopenharmony_ci            DHLOGE("DemoDCameraBufferConsumerListener AcquireBuffer failed");
641c1b0f19Sopenharmony_ci            return;
651c1b0f19Sopenharmony_ci        }
661c1b0f19Sopenharmony_ci
671c1b0f19Sopenharmony_ci        width_ = buffer->GetWidth();
681c1b0f19Sopenharmony_ci        height_ = buffer->GetHeight();
691c1b0f19Sopenharmony_ci        size_ = buffer->GetSize();
701c1b0f19Sopenharmony_ci        address_ = static_cast<char *>(buffer->GetVirAddr());
711c1b0f19Sopenharmony_ci        buffer->GetExtraData()->ExtraGet("dataSize", dataSize_);
721c1b0f19Sopenharmony_ci
731c1b0f19Sopenharmony_ci#ifdef DCAMERA_COMMON
741c1b0f19Sopenharmony_ci        actualSize_ = width_ * height_ * RGB_BYTES_PER_PIXEL;
751c1b0f19Sopenharmony_ci#else
761c1b0f19Sopenharmony_ci        actualSize_ = width_ * height_ * YUV_BYTES_PER_PIXEL / Y2UV_RATIO;
771c1b0f19Sopenharmony_ci#endif
781c1b0f19Sopenharmony_ci
791c1b0f19Sopenharmony_ci        SaveFile();
801c1b0f19Sopenharmony_ci        surface_->ReleaseBuffer(buffer, -1);
811c1b0f19Sopenharmony_ci    }
821c1b0f19Sopenharmony_ci
831c1b0f19Sopenharmony_ciprotected:
841c1b0f19Sopenharmony_ci    virtual void SaveFile() const = 0;
851c1b0f19Sopenharmony_ci
861c1b0f19Sopenharmony_ciprotected:
871c1b0f19Sopenharmony_ci    constexpr static int32_t Y2UV_RATIO = 2;
881c1b0f19Sopenharmony_ci    constexpr static int32_t YUV_BYTES_PER_PIXEL = 3;
891c1b0f19Sopenharmony_ci    constexpr static int32_t RGB_BYTES_PER_PIXEL = 4;
901c1b0f19Sopenharmony_ci
911c1b0f19Sopenharmony_ci    char *address_ = nullptr;
921c1b0f19Sopenharmony_ci    int32_t actualSize_ = 0;
931c1b0f19Sopenharmony_ci    int32_t dataSize_ = 0;
941c1b0f19Sopenharmony_ci    int32_t height_ = 0;
951c1b0f19Sopenharmony_ci    int32_t width_ = 0;
961c1b0f19Sopenharmony_ci    int32_t size_ = 0;
971c1b0f19Sopenharmony_ci    sptr<IConsumerSurface> surface_;
981c1b0f19Sopenharmony_ci};
991c1b0f19Sopenharmony_ci
1001c1b0f19Sopenharmony_ciclass DemoDCameraPhotoSurfaceListener : public DemoDCameraBufferConsumerListener {
1011c1b0f19Sopenharmony_cipublic:
1021c1b0f19Sopenharmony_ci    explicit DemoDCameraPhotoSurfaceListener(const sptr<IConsumerSurface>& surface)
1031c1b0f19Sopenharmony_ci        : DemoDCameraBufferConsumerListener(surface)
1041c1b0f19Sopenharmony_ci    {
1051c1b0f19Sopenharmony_ci    }
1061c1b0f19Sopenharmony_ci
1071c1b0f19Sopenharmony_ciprotected:
1081c1b0f19Sopenharmony_ci    void SaveFile() const override
1091c1b0f19Sopenharmony_ci    {
1101c1b0f19Sopenharmony_ci        DHLOGI("DemoDCameraPhotoSurfaceListener::SaveFile width: %{public}d, height: %{public}d, size: %{public}d, "
1111c1b0f19Sopenharmony_ci            "dataSize: %{public}d, actualSize: %{public}d", width_, height_, size_, dataSize_, actualSize_);
1121c1b0f19Sopenharmony_ci        if ((address_ == nullptr) || (dataSize_ <= 0)) {
1131c1b0f19Sopenharmony_ci            DHLOGE("DemoDCameraPhotoSurfaceListener invalid params, dataSize: %{public}d", dataSize_);
1141c1b0f19Sopenharmony_ci            return;
1151c1b0f19Sopenharmony_ci        }
1161c1b0f19Sopenharmony_ci
1171c1b0f19Sopenharmony_ci        std::ofstream ofs;
1181c1b0f19Sopenharmony_ci        std::cout << "saving photo ..." << std::endl;
1191c1b0f19Sopenharmony_ci        std::string fileName = "/data/log/dcamera_photo_" + std::to_string(GetNowTimeStampMs()) + ".jpg";
1201c1b0f19Sopenharmony_ci        ofs.open(fileName, std::ios::binary | std::ios::out);
1211c1b0f19Sopenharmony_ci        if (!ofs.is_open()) {
1221c1b0f19Sopenharmony_ci            DHLOGE("DemoDCameraPhotoSurfaceListener open file failed");
1231c1b0f19Sopenharmony_ci            return;
1241c1b0f19Sopenharmony_ci        }
1251c1b0f19Sopenharmony_ci        ofs.write(address_, dataSize_);
1261c1b0f19Sopenharmony_ci        ofs.close();
1271c1b0f19Sopenharmony_ci        std::cout << "saving photo success" << std::endl;
1281c1b0f19Sopenharmony_ci    }
1291c1b0f19Sopenharmony_ci};
1301c1b0f19Sopenharmony_ci
1311c1b0f19Sopenharmony_ciclass DemoDCameraPreviewSurfaceListener : public DemoDCameraBufferConsumerListener {
1321c1b0f19Sopenharmony_cipublic:
1331c1b0f19Sopenharmony_ci    explicit DemoDCameraPreviewSurfaceListener(const sptr<IConsumerSurface>& surface)
1341c1b0f19Sopenharmony_ci        : DemoDCameraBufferConsumerListener(surface)
1351c1b0f19Sopenharmony_ci    {
1361c1b0f19Sopenharmony_ci    }
1371c1b0f19Sopenharmony_ci
1381c1b0f19Sopenharmony_ciprotected:
1391c1b0f19Sopenharmony_ci    void SaveFile() const override
1401c1b0f19Sopenharmony_ci    {
1411c1b0f19Sopenharmony_ci        DHLOGI("DemoDCameraPreviewSurfaceListener::SaveFile width: %{public}d, height: %{public}d, size: %{public}d, "
1421c1b0f19Sopenharmony_ci            "dataSize: %{public}d, actualSize: %{public}d", width_, height_, size_, dataSize_, actualSize_);
1431c1b0f19Sopenharmony_ci        if ((address_ == nullptr) || (actualSize_ <= 0)) {
1441c1b0f19Sopenharmony_ci            DHLOGE("DemoDCameraPreviewSurfaceListener invalid params, actualSize: %{public}d", actualSize_);
1451c1b0f19Sopenharmony_ci            return;
1461c1b0f19Sopenharmony_ci        }
1471c1b0f19Sopenharmony_ci
1481c1b0f19Sopenharmony_ci        std::ofstream ofs;
1491c1b0f19Sopenharmony_ci        std::cout << "saving preview ..." << std::endl;
1501c1b0f19Sopenharmony_ci        std::string resolution = std::to_string(width_) + "_" + std::to_string(height_);
1511c1b0f19Sopenharmony_ci        std::string fileName = "/data/log/dcamera_preview_" + resolution + ".yuv";
1521c1b0f19Sopenharmony_ci        ofs.open(fileName, std::ios::binary | std::ios::out | std::ios::app);
1531c1b0f19Sopenharmony_ci        if (!ofs.is_open()) {
1541c1b0f19Sopenharmony_ci            DHLOGE("DemoDCameraPreviewSurfaceListener open file failed");
1551c1b0f19Sopenharmony_ci            return;
1561c1b0f19Sopenharmony_ci        }
1571c1b0f19Sopenharmony_ci        ofs.write(address_, actualSize_);
1581c1b0f19Sopenharmony_ci        ofs.close();
1591c1b0f19Sopenharmony_ci        std::cout << "saving preview success" << std::endl;
1601c1b0f19Sopenharmony_ci    }
1611c1b0f19Sopenharmony_ci};
1621c1b0f19Sopenharmony_ci
1631c1b0f19Sopenharmony_ciclass DemoDCameraVideoSurfaceListener : public DemoDCameraBufferConsumerListener {
1641c1b0f19Sopenharmony_cipublic:
1651c1b0f19Sopenharmony_ci    explicit DemoDCameraVideoSurfaceListener(const sptr<IConsumerSurface>& surface)
1661c1b0f19Sopenharmony_ci        : DemoDCameraBufferConsumerListener(surface)
1671c1b0f19Sopenharmony_ci    {
1681c1b0f19Sopenharmony_ci    }
1691c1b0f19Sopenharmony_ci
1701c1b0f19Sopenharmony_ciprotected:
1711c1b0f19Sopenharmony_ci    void SaveFile() const override
1721c1b0f19Sopenharmony_ci    {
1731c1b0f19Sopenharmony_ci        DHLOGI("DemoDCameraVideoSurfaceListener::SaveFile width: %{public}d, height: %{public}d, size: %{public}d, "
1741c1b0f19Sopenharmony_ci            "dataSize: %{public}d, actualSize: %{public}d", width_, height_, size_, dataSize_, actualSize_);
1751c1b0f19Sopenharmony_ci        if ((address_ == nullptr) || (actualSize_ <= 0)) {
1761c1b0f19Sopenharmony_ci            DHLOGE("DemoDCameraVideoSurfaceListener invalid params, actualSize: %{public}d", actualSize_);
1771c1b0f19Sopenharmony_ci            return;
1781c1b0f19Sopenharmony_ci        }
1791c1b0f19Sopenharmony_ci
1801c1b0f19Sopenharmony_ci        std::ofstream ofs;
1811c1b0f19Sopenharmony_ci        std::cout << "saving video ..." << std::endl;
1821c1b0f19Sopenharmony_ci        std::string resolution = std::to_string(width_) + "_" + std::to_string(height_);
1831c1b0f19Sopenharmony_ci        std::string fileName = "/data/log/dcamera_video_" + resolution + ".yuv";
1841c1b0f19Sopenharmony_ci        ofs.open(fileName, std::ios::binary | std::ios::out | std::ios::app);
1851c1b0f19Sopenharmony_ci        if (!ofs.is_open()) {
1861c1b0f19Sopenharmony_ci            DHLOGE("DemoDCameraVideoSurfaceListener open file failed");
1871c1b0f19Sopenharmony_ci            return;
1881c1b0f19Sopenharmony_ci        }
1891c1b0f19Sopenharmony_ci        ofs.write(address_, actualSize_);
1901c1b0f19Sopenharmony_ci        ofs.close();
1911c1b0f19Sopenharmony_ci        std::cout << "saving video success" << std::endl;
1921c1b0f19Sopenharmony_ci    }
1931c1b0f19Sopenharmony_ci};
1941c1b0f19Sopenharmony_ci
1951c1b0f19Sopenharmony_ciclass DemoDCameraPhotoCallback : public CameraStandard::PhotoStateCallback {
1961c1b0f19Sopenharmony_cipublic:
1971c1b0f19Sopenharmony_ci    void OnCaptureStarted(const int32_t captureID) const
1981c1b0f19Sopenharmony_ci    {
1991c1b0f19Sopenharmony_ci        DHLOGI("DemoDCameraPhotoCallback::OnCaptureStarted captureID: %{public}d", captureID);
2001c1b0f19Sopenharmony_ci    }
2011c1b0f19Sopenharmony_ci
2021c1b0f19Sopenharmony_ci    void OnCaptureStarted(const int32_t captureID, uint32_t exposureTime) const
2031c1b0f19Sopenharmony_ci    {
2041c1b0f19Sopenharmony_ci        DHLOGI("DemoDCameraPhotoCallback::OnCaptureStarted captureID: %{public}d, exposureTime: %{public}u",
2051c1b0f19Sopenharmony_ci            captureID, exposureTime);
2061c1b0f19Sopenharmony_ci    }
2071c1b0f19Sopenharmony_ci
2081c1b0f19Sopenharmony_ci    void OnCaptureEnded(const int32_t captureID, int32_t frameCount) const
2091c1b0f19Sopenharmony_ci    {
2101c1b0f19Sopenharmony_ci        DHLOGI("DemoDCameraPhotoCallback::OnCaptureEnded captureID: %{public}d frameCount: %{public}d",
2111c1b0f19Sopenharmony_ci            captureID, frameCount);
2121c1b0f19Sopenharmony_ci    }
2131c1b0f19Sopenharmony_ci
2141c1b0f19Sopenharmony_ci    void OnFrameShutter(const int32_t captureId, const uint64_t timestamp) const
2151c1b0f19Sopenharmony_ci    {
2161c1b0f19Sopenharmony_ci        DHLOGI("DemoDCameraPhotoCallback::OnFrameShutter captureID: %{public}d timestamp: %{public}" PRIu64,
2171c1b0f19Sopenharmony_ci            captureId, timestamp);
2181c1b0f19Sopenharmony_ci    }
2191c1b0f19Sopenharmony_ci
2201c1b0f19Sopenharmony_ci    void OnFrameShutterEnd(const int32_t captureId, const uint64_t timestamp) const
2211c1b0f19Sopenharmony_ci    {
2221c1b0f19Sopenharmony_ci        DHLOGI("DemoDCameraPhotoCallback::OnFrameShutterEnd captureID: %{public}d timestamp: %{public}" PRIu64,
2231c1b0f19Sopenharmony_ci            captureId, timestamp);
2241c1b0f19Sopenharmony_ci    }
2251c1b0f19Sopenharmony_ci
2261c1b0f19Sopenharmony_ci    void OnCaptureReady(const int32_t captureId, const uint64_t timestamp) const
2271c1b0f19Sopenharmony_ci    {
2281c1b0f19Sopenharmony_ci        DHLOGI("DemoDCameraPhotoCallback::OnFrameShutterEnd captureID: %{public}d timestamp: %{public}" PRIu64,
2291c1b0f19Sopenharmony_ci            captureId, timestamp);
2301c1b0f19Sopenharmony_ci    }
2311c1b0f19Sopenharmony_ci
2321c1b0f19Sopenharmony_ci    void OnEstimatedCaptureDuration(const int32_t duration) const
2331c1b0f19Sopenharmony_ci    {
2341c1b0f19Sopenharmony_ci        DHLOGI("DemoDCameraPhotoCallback::OnEstimatedCaptureDuration duration: %{public}d", duration);
2351c1b0f19Sopenharmony_ci    }
2361c1b0f19Sopenharmony_ci
2371c1b0f19Sopenharmony_ci    void OnCaptureError(const int32_t captureId, const int32_t errorCode) const
2381c1b0f19Sopenharmony_ci    {
2391c1b0f19Sopenharmony_ci        DHLOGI("DemoDCameraPhotoCallback::OnCaptureError captureID: %{public}d errorCode: %{public}d",
2401c1b0f19Sopenharmony_ci            captureId, errorCode);
2411c1b0f19Sopenharmony_ci    }
2421c1b0f19Sopenharmony_ci};
2431c1b0f19Sopenharmony_ci
2441c1b0f19Sopenharmony_ciclass DemoDCameraPreviewCallback : public CameraStandard::PreviewStateCallback {
2451c1b0f19Sopenharmony_cipublic:
2461c1b0f19Sopenharmony_ci    void OnFrameStarted() const
2471c1b0f19Sopenharmony_ci    {
2481c1b0f19Sopenharmony_ci        DHLOGI("DemoDCameraPreviewCallback::OnFrameStarted.");
2491c1b0f19Sopenharmony_ci    }
2501c1b0f19Sopenharmony_ci
2511c1b0f19Sopenharmony_ci    void OnFrameEnded(const int32_t frameCount) const
2521c1b0f19Sopenharmony_ci    {
2531c1b0f19Sopenharmony_ci        DHLOGI("DemoDCameraPreviewCallback::OnFrameEnded frameCount: %{public}d", frameCount);
2541c1b0f19Sopenharmony_ci    }
2551c1b0f19Sopenharmony_ci
2561c1b0f19Sopenharmony_ci    void OnError(const int32_t errorCode) const
2571c1b0f19Sopenharmony_ci    {
2581c1b0f19Sopenharmony_ci        DHLOGI("DemoDCameraPreviewCallback::OnError errorCode: %{public}d", errorCode);
2591c1b0f19Sopenharmony_ci    }
2601c1b0f19Sopenharmony_ci
2611c1b0f19Sopenharmony_ci    void OnSketchStatusDataChanged(const CameraStandard::SketchStatusData& statusData) const
2621c1b0f19Sopenharmony_ci    {
2631c1b0f19Sopenharmony_ci        DHLOGI("DemoDCameraPreviewCallback::OnSketchStatusDataChanged.");
2641c1b0f19Sopenharmony_ci    }
2651c1b0f19Sopenharmony_ci};
2661c1b0f19Sopenharmony_ci
2671c1b0f19Sopenharmony_ciclass DemoDCameraVideoCallback : public CameraStandard::VideoStateCallback {
2681c1b0f19Sopenharmony_cipublic:
2691c1b0f19Sopenharmony_ci    void OnFrameStarted() const
2701c1b0f19Sopenharmony_ci    {
2711c1b0f19Sopenharmony_ci        DHLOGI("DemoDCameraVideoCallback::OnFrameStarted.");
2721c1b0f19Sopenharmony_ci    }
2731c1b0f19Sopenharmony_ci
2741c1b0f19Sopenharmony_ci    void OnFrameEnded(const int32_t frameCount) const
2751c1b0f19Sopenharmony_ci    {
2761c1b0f19Sopenharmony_ci        DHLOGI("DemoDCameraVideoCallback::OnFrameEnded frameCount: %{public}d", frameCount);
2771c1b0f19Sopenharmony_ci    }
2781c1b0f19Sopenharmony_ci
2791c1b0f19Sopenharmony_ci    void OnError(const int32_t errorCode) const
2801c1b0f19Sopenharmony_ci    {
2811c1b0f19Sopenharmony_ci        DHLOGI("DemoDCameraVideoCallback::OnError errorCode: %{public}d", errorCode);
2821c1b0f19Sopenharmony_ci    }
2831c1b0f19Sopenharmony_ci};
2841c1b0f19Sopenharmony_ci
2851c1b0f19Sopenharmony_ciclass DemoDCameraInputCallback : public CameraStandard::ErrorCallback {
2861c1b0f19Sopenharmony_cipublic:
2871c1b0f19Sopenharmony_ci    void OnError(const int32_t errorType, const int32_t errorMsg) const
2881c1b0f19Sopenharmony_ci    {
2891c1b0f19Sopenharmony_ci        DHLOGI("DemoDCameraInputCallback::OnError errorType: %{public}d errorMsg: %{public}d", errorType, errorMsg);
2901c1b0f19Sopenharmony_ci    }
2911c1b0f19Sopenharmony_ci};
2921c1b0f19Sopenharmony_ci
2931c1b0f19Sopenharmony_ciclass DemoDCameraManagerCallback : public CameraStandard::CameraManagerCallback {
2941c1b0f19Sopenharmony_cipublic:
2951c1b0f19Sopenharmony_ci    void OnCameraStatusChanged(const CameraStandard::CameraStatusInfo &cameraStatusInfo) const
2961c1b0f19Sopenharmony_ci    {
2971c1b0f19Sopenharmony_ci        DHLOGI("DemoDCameraManagerCallback::OnCameraStatusChanged cameraStatus: %{public}d",
2981c1b0f19Sopenharmony_ci            cameraStatusInfo.cameraStatus);
2991c1b0f19Sopenharmony_ci    }
3001c1b0f19Sopenharmony_ci
3011c1b0f19Sopenharmony_ci    void OnFlashlightStatusChanged(const std::string &cameraID,
3021c1b0f19Sopenharmony_ci        const CameraStandard::FlashStatus flashStatus) const
3031c1b0f19Sopenharmony_ci    {
3041c1b0f19Sopenharmony_ci        DHLOGI("DemoDCameraManagerCallback::OnFlashlightStatusChanged cameraID: %{public}s, flashStatus: %{public}d",
3051c1b0f19Sopenharmony_ci            GetAnonyString(cameraID).c_str(), flashStatus);
3061c1b0f19Sopenharmony_ci    }
3071c1b0f19Sopenharmony_ci};
3081c1b0f19Sopenharmony_ci
3091c1b0f19Sopenharmony_ciclass DemoDCameraSessionCallback : public CameraStandard::SessionCallback, public CameraStandard::FocusCallback {
3101c1b0f19Sopenharmony_cipublic:
3111c1b0f19Sopenharmony_ci    void OnError(int32_t errorCode)
3121c1b0f19Sopenharmony_ci    {
3131c1b0f19Sopenharmony_ci        DHLOGI("DemoDCameraSessionCallback::OnError errorCode: %{public}d", errorCode);
3141c1b0f19Sopenharmony_ci    }
3151c1b0f19Sopenharmony_ci
3161c1b0f19Sopenharmony_ci    void OnFocusState(FocusState state)
3171c1b0f19Sopenharmony_ci    {
3181c1b0f19Sopenharmony_ci        DHLOGI("DemoDCameraSessionCallback::OnFocusState state: %{public}d", state);
3191c1b0f19Sopenharmony_ci    }
3201c1b0f19Sopenharmony_ci};
3211c1b0f19Sopenharmony_ci
3221c1b0f19Sopenharmony_ciint32_t InitCameraStandard(OHOS::CameraStandard::CameraPosition position);
3231c1b0f19Sopenharmony_civoid InitCaptureInfo(int32_t width, int32_t height);
3241c1b0f19Sopenharmony_civoid InitPhotoOutput(void);
3251c1b0f19Sopenharmony_civoid InitPreviewOutput(void);
3261c1b0f19Sopenharmony_civoid InitVideoOutput(void);
3271c1b0f19Sopenharmony_civoid ConfigCaptureSession(void);
3281c1b0f19Sopenharmony_civoid ReleaseResource(void);
3291c1b0f19Sopenharmony_ciint32_t Capture();
3301c1b0f19Sopenharmony_ciint32_t Video();
3311c1b0f19Sopenharmony_cistd::shared_ptr<OHOS::CameraStandard::PhotoCaptureSetting> ConfigPhotoCaptureSetting();
3321c1b0f19Sopenharmony_civoid ConfigFocusFlashAndExposure(bool isVideo);
3331c1b0f19Sopenharmony_ciint32_t GetPreviewProfiles(std::vector<OHOS::CameraStandard::Size> &previewResolution);
3341c1b0f19Sopenharmony_cibool IsValid(const OHOS::CameraStandard::Size& size);
3351c1b0f19Sopenharmony_ci} // namespace DistributedHardware
3361c1b0f19Sopenharmony_ci} // namespace OHOS
3371c1b0f19Sopenharmony_ci#endif // OHOS_DCAMERA_CLIENT_DEMO_H