10a5c7a17Sopenharmony_ci/*
20a5c7a17Sopenharmony_ci * Copyright (c) 2020 Huawei Device Co., Ltd.
30a5c7a17Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
40a5c7a17Sopenharmony_ci * you may not use this file except in compliance with the License.
50a5c7a17Sopenharmony_ci * You may obtain a copy of the License at
60a5c7a17Sopenharmony_ci *
70a5c7a17Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
80a5c7a17Sopenharmony_ci *
90a5c7a17Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
100a5c7a17Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
110a5c7a17Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
120a5c7a17Sopenharmony_ci * See the License for the specific language governing permissions and
130a5c7a17Sopenharmony_ci * limitations under the License.
140a5c7a17Sopenharmony_ci */
150a5c7a17Sopenharmony_ci
160a5c7a17Sopenharmony_ci#include "camera_server.h"
170a5c7a17Sopenharmony_ci#include <cstdio>
180a5c7a17Sopenharmony_ci#include <list>
190a5c7a17Sopenharmony_ci#include <string>
200a5c7a17Sopenharmony_ci#include "camera_device.h"
210a5c7a17Sopenharmony_ci#include "camera_service.h"
220a5c7a17Sopenharmony_ci#include "camera_type.h"
230a5c7a17Sopenharmony_ci#include "media_log.h"
240a5c7a17Sopenharmony_ci#include "meta_data.h"
250a5c7a17Sopenharmony_ci#include "surface.h"
260a5c7a17Sopenharmony_ci#include "surface_impl.h"
270a5c7a17Sopenharmony_ci#include "rpc_errno.h"
280a5c7a17Sopenharmony_ci
290a5c7a17Sopenharmony_ciusing namespace std;
300a5c7a17Sopenharmony_cinamespace OHOS {
310a5c7a17Sopenharmony_cinamespace Media {
320a5c7a17Sopenharmony_ciCameraServer *CameraServer::GetInstance()
330a5c7a17Sopenharmony_ci{
340a5c7a17Sopenharmony_ci    static CameraServer server;
350a5c7a17Sopenharmony_ci    return &server;
360a5c7a17Sopenharmony_ci}
370a5c7a17Sopenharmony_ci
380a5c7a17Sopenharmony_civoid CameraServer::CameraServerRequestHandle(int funcId, void *origin, IpcIo *req, IpcIo *reply)
390a5c7a17Sopenharmony_ci{
400a5c7a17Sopenharmony_ci    switch (funcId) {
410a5c7a17Sopenharmony_ci        case CAMERA_SERVER_GET_CAMERA_ABILITY:
420a5c7a17Sopenharmony_ci            CameraServer::GetInstance()->GetCameraAbility(req, reply);
430a5c7a17Sopenharmony_ci            break;
440a5c7a17Sopenharmony_ci        case CAMERA_SERVER_GET_CAMERA_INFO:
450a5c7a17Sopenharmony_ci            CameraServer::GetInstance()->GetCameraInfo(req, reply);
460a5c7a17Sopenharmony_ci            break;
470a5c7a17Sopenharmony_ci        case CAMERA_SERVER_GET_CAMERAIDLIST:
480a5c7a17Sopenharmony_ci            CameraServer::GetInstance()->GetCameraIdList(req, reply);
490a5c7a17Sopenharmony_ci            break;
500a5c7a17Sopenharmony_ci        case CAMERA_SERVER_CREATE_CAMERA:
510a5c7a17Sopenharmony_ci            CameraServer::GetInstance()->CreateCamera(req, reply);
520a5c7a17Sopenharmony_ci            break;
530a5c7a17Sopenharmony_ci        case CAMERA_SERVER_CLOSE_CAMERA:
540a5c7a17Sopenharmony_ci            CameraServer::GetInstance()->CloseCamera(req, reply);
550a5c7a17Sopenharmony_ci            break;
560a5c7a17Sopenharmony_ci        case CAMERA_SERVER_SET_CAMERA_CONFIG:
570a5c7a17Sopenharmony_ci            CameraServer::GetInstance()->SetCameraConfig(req, reply);
580a5c7a17Sopenharmony_ci            break;
590a5c7a17Sopenharmony_ci        case CAMERA_SERVER_TRIGGER_LOOPING_CAPTURE:
600a5c7a17Sopenharmony_ci            CameraServer::GetInstance()->TriggerLoopingCapture(req, reply);
610a5c7a17Sopenharmony_ci            break;
620a5c7a17Sopenharmony_ci        case CAMERA_SERVER_STOP_LOOPING_CAPTURE:
630a5c7a17Sopenharmony_ci            CameraServer::GetInstance()->StopLoopingCapture(req, reply);
640a5c7a17Sopenharmony_ci            break;
650a5c7a17Sopenharmony_ci        case CAMERA_SERVER_TRIGGER_SINGLE_CAPTURE:
660a5c7a17Sopenharmony_ci            CameraServer::GetInstance()->TriggerSingleCapture(req, reply);
670a5c7a17Sopenharmony_ci            break;
680a5c7a17Sopenharmony_ci        case CAMERA_SERVER_SET_CAMERA_CALLBACK:
690a5c7a17Sopenharmony_ci            CameraServer::GetInstance()->SetCameraCallback(req, reply);
700a5c7a17Sopenharmony_ci            break;
710a5c7a17Sopenharmony_ci        case CAMERA_SERVER_SET_CAMERA_MODE_NUM:
720a5c7a17Sopenharmony_ci            CameraServer::GetInstance()->SetCameraMode(req, reply);
730a5c7a17Sopenharmony_ci            break;
740a5c7a17Sopenharmony_ci        case CAMERA_SERVER_GET_CAMERA_MODE_NUM:
750a5c7a17Sopenharmony_ci            CameraServer::GetInstance()->GetCameraModeNum(req, reply);
760a5c7a17Sopenharmony_ci            break;
770a5c7a17Sopenharmony_ci        default:
780a5c7a17Sopenharmony_ci            MEDIA_ERR_LOG("code not support:%d!", funcId);
790a5c7a17Sopenharmony_ci            break;
800a5c7a17Sopenharmony_ci    }
810a5c7a17Sopenharmony_ci}
820a5c7a17Sopenharmony_civoid CameraServer::InitCameraServer()
830a5c7a17Sopenharmony_ci{
840a5c7a17Sopenharmony_ci    CameraService *service = CameraService::GetInstance();
850a5c7a17Sopenharmony_ci    service->Initialize();
860a5c7a17Sopenharmony_ci}
870a5c7a17Sopenharmony_ci
880a5c7a17Sopenharmony_civoid CameraServer::GetCameraAbility(IpcIo *req, IpcIo *reply)
890a5c7a17Sopenharmony_ci{
900a5c7a17Sopenharmony_ci    size_t sz;
910a5c7a17Sopenharmony_ci    string cameraId((const char*)(ReadString(req, &sz)));
920a5c7a17Sopenharmony_ci    CameraAbility *ability = CameraService::GetInstance()->GetCameraAbility(cameraId);
930a5c7a17Sopenharmony_ci    if (ability == nullptr) {
940a5c7a17Sopenharmony_ci        return;
950a5c7a17Sopenharmony_ci    }
960a5c7a17Sopenharmony_ci    list<CameraPicSize> supportSizeList = ability->GetSupportedSizes(CAM_FORMAT_YVU420);
970a5c7a17Sopenharmony_ci    uint32_t supportProperties = 0;
980a5c7a17Sopenharmony_ci    WriteUint32(reply, supportProperties);
990a5c7a17Sopenharmony_ci    uint32_t listSize = supportSizeList.size();
1000a5c7a17Sopenharmony_ci    WriteUint32(reply, listSize);
1010a5c7a17Sopenharmony_ci    for (auto supportSizeItem : supportSizeList) {
1020a5c7a17Sopenharmony_ci        bool ret = WriteRawData(reply, &supportSizeItem, sizeof(CameraPicSize));
1030a5c7a17Sopenharmony_ci        if (!ret) {
1040a5c7a17Sopenharmony_ci            return;
1050a5c7a17Sopenharmony_ci        }
1060a5c7a17Sopenharmony_ci    }
1070a5c7a17Sopenharmony_ci    // af
1080a5c7a17Sopenharmony_ci    list<int32_t> afModeList = ability->GetSupportedAfModes();
1090a5c7a17Sopenharmony_ci    uint32_t afListSize = afModeList.size();
1100a5c7a17Sopenharmony_ci    WriteUint32(reply, afListSize);
1110a5c7a17Sopenharmony_ci    for (auto supportAfMode : afModeList) {
1120a5c7a17Sopenharmony_ci        WriteInt32(reply, supportAfMode);
1130a5c7a17Sopenharmony_ci    }
1140a5c7a17Sopenharmony_ci    // ae
1150a5c7a17Sopenharmony_ci    list<int32_t> aeModeList = ability->GetSupportedAeModes();
1160a5c7a17Sopenharmony_ci    uint32_t aeListSize = aeModeList.size();
1170a5c7a17Sopenharmony_ci    WriteUint32(reply, aeListSize);
1180a5c7a17Sopenharmony_ci    for (auto supportAeMode : aeModeList) {
1190a5c7a17Sopenharmony_ci        WriteInt32(reply, supportAeMode);
1200a5c7a17Sopenharmony_ci    }
1210a5c7a17Sopenharmony_ci}
1220a5c7a17Sopenharmony_ci
1230a5c7a17Sopenharmony_civoid CameraServer::GetCameraInfo(IpcIo *req, IpcIo *reply)
1240a5c7a17Sopenharmony_ci{
1250a5c7a17Sopenharmony_ci    size_t sz;
1260a5c7a17Sopenharmony_ci    string cameraId((const char*)(ReadString(req, &sz)));
1270a5c7a17Sopenharmony_ci    CameraInfo *info = CameraService::GetInstance()->GetCameraInfo(cameraId);
1280a5c7a17Sopenharmony_ci    if (info == nullptr) {
1290a5c7a17Sopenharmony_ci        return;
1300a5c7a17Sopenharmony_ci    }
1310a5c7a17Sopenharmony_ci    WriteInt32(reply, info->GetCameraType());
1320a5c7a17Sopenharmony_ci    WriteInt32(reply, info->GetCameraFacingType());
1330a5c7a17Sopenharmony_ci}
1340a5c7a17Sopenharmony_ci
1350a5c7a17Sopenharmony_civoid CameraServer::GetCameraIdList(IpcIo *req, IpcIo *reply)
1360a5c7a17Sopenharmony_ci{
1370a5c7a17Sopenharmony_ci    list<string> cameraIdList = CameraService::GetInstance()->GetCameraIdList();
1380a5c7a17Sopenharmony_ci    WriteUint32(reply, cameraIdList.size());
1390a5c7a17Sopenharmony_ci    for (string cameraId : cameraIdList) {
1400a5c7a17Sopenharmony_ci        WriteString(reply, cameraId.c_str());
1410a5c7a17Sopenharmony_ci    }
1420a5c7a17Sopenharmony_ci}
1430a5c7a17Sopenharmony_ci
1440a5c7a17Sopenharmony_civoid CameraServer::GetCameraModeNum(IpcIo *req, IpcIo *reply)
1450a5c7a17Sopenharmony_ci{
1460a5c7a17Sopenharmony_ci    uint8_t num = CameraService::GetInstance()->GetCameraModeNum();
1470a5c7a17Sopenharmony_ci    WriteUint8(reply, num);
1480a5c7a17Sopenharmony_ci}
1490a5c7a17Sopenharmony_ci
1500a5c7a17Sopenharmony_civoid CameraServer::CreateCamera(IpcIo *req, IpcIo *reply)
1510a5c7a17Sopenharmony_ci{
1520a5c7a17Sopenharmony_ci    size_t sz;
1530a5c7a17Sopenharmony_ci    string cameraId((const char*)(ReadString(req, &sz)));
1540a5c7a17Sopenharmony_ci    int32_t cameraStatus = CameraService::GetInstance()->CreateCamera(cameraId);
1550a5c7a17Sopenharmony_ci    SvcIdentity sid;
1560a5c7a17Sopenharmony_ci    bool ret = ReadRemoteObject(req, &sid);
1570a5c7a17Sopenharmony_ci    if (!ret) {
1580a5c7a17Sopenharmony_ci        MEDIA_ERR_LOG("sid is null, failed.");
1590a5c7a17Sopenharmony_ci        return;
1600a5c7a17Sopenharmony_ci    }
1610a5c7a17Sopenharmony_ci    OnCameraStatusChange(cameraStatus, &sid);
1620a5c7a17Sopenharmony_ci}
1630a5c7a17Sopenharmony_ci
1640a5c7a17Sopenharmony_civoid CameraServer::CloseCamera(IpcIo *req, IpcIo *reply)
1650a5c7a17Sopenharmony_ci{
1660a5c7a17Sopenharmony_ci    size_t sz;
1670a5c7a17Sopenharmony_ci    string cameraId((const char*)(ReadString(req, &sz)));
1680a5c7a17Sopenharmony_ci    int32_t cameraStatus = CameraService::GetInstance()->CloseCamera(cameraId);
1690a5c7a17Sopenharmony_ci    SvcIdentity sid;
1700a5c7a17Sopenharmony_ci    bool ret = ReadRemoteObject(req, &sid);
1710a5c7a17Sopenharmony_ci    if (!ret) {
1720a5c7a17Sopenharmony_ci        MEDIA_ERR_LOG("sid is null, failed.");
1730a5c7a17Sopenharmony_ci        return;
1740a5c7a17Sopenharmony_ci    }
1750a5c7a17Sopenharmony_ci    OnCameraStatusChange(cameraStatus, &sid);
1760a5c7a17Sopenharmony_ci}
1770a5c7a17Sopenharmony_ci
1780a5c7a17Sopenharmony_civoid CameraServer::SetCameraConfig(IpcIo *req, IpcIo *reply)
1790a5c7a17Sopenharmony_ci{
1800a5c7a17Sopenharmony_ci    size_t sz;
1810a5c7a17Sopenharmony_ci    string cameraId((const char*)(ReadString(req, &sz)));
1820a5c7a17Sopenharmony_ci    CameraDevice *device_ = CameraService::GetInstance()->GetCameraDevice(cameraId);
1830a5c7a17Sopenharmony_ci    int32_t setStatus = device_->SetCameraConfig();
1840a5c7a17Sopenharmony_ci    WriteInt32(reply, setStatus);
1850a5c7a17Sopenharmony_ci    OnCameraConfigured(setStatus);
1860a5c7a17Sopenharmony_ci}
1870a5c7a17Sopenharmony_ci
1880a5c7a17Sopenharmony_civoid CameraServer::SetCameraCallback(IpcIo *req, IpcIo *reply)
1890a5c7a17Sopenharmony_ci{
1900a5c7a17Sopenharmony_ci    SvcIdentity sid;
1910a5c7a17Sopenharmony_ci    bool ret = ReadRemoteObject(req, &sid);
1920a5c7a17Sopenharmony_ci    if (!ret) {
1930a5c7a17Sopenharmony_ci        MEDIA_ERR_LOG("sid is null, failed.");
1940a5c7a17Sopenharmony_ci        return;
1950a5c7a17Sopenharmony_ci    }
1960a5c7a17Sopenharmony_ci    sid_ = sid;
1970a5c7a17Sopenharmony_ci}
1980a5c7a17Sopenharmony_ci
1990a5c7a17Sopenharmony_ciFrameConfig *DeserializeFrameConfig(IpcIo &io)
2000a5c7a17Sopenharmony_ci{
2010a5c7a17Sopenharmony_ci    int32_t type;
2020a5c7a17Sopenharmony_ci    ReadInt32(&io, &type);
2030a5c7a17Sopenharmony_ci    auto fc = new FrameConfig(type);
2040a5c7a17Sopenharmony_ci
2050a5c7a17Sopenharmony_ci    uint32_t surfaceNum;
2060a5c7a17Sopenharmony_ci    ReadUint32(&io, &surfaceNum);
2070a5c7a17Sopenharmony_ci    for (uint32_t i = 0; i < surfaceNum; i++) {
2080a5c7a17Sopenharmony_ci        Surface *surface = SurfaceImpl::GenericSurfaceByIpcIo(io);
2090a5c7a17Sopenharmony_ci        if (surface == nullptr) {
2100a5c7a17Sopenharmony_ci            MEDIA_ERR_LOG("Camera server receive null surface.");
2110a5c7a17Sopenharmony_ci            delete fc;
2120a5c7a17Sopenharmony_ci            return nullptr;
2130a5c7a17Sopenharmony_ci        }
2140a5c7a17Sopenharmony_ci        fc->AddSurface(*surface);
2150a5c7a17Sopenharmony_ci    }
2160a5c7a17Sopenharmony_ci
2170a5c7a17Sopenharmony_ci    int32_t qfactor;
2180a5c7a17Sopenharmony_ci    ReadInt32(&io, &qfactor);
2190a5c7a17Sopenharmony_ci    if (qfactor >= 0) {
2200a5c7a17Sopenharmony_ci        fc->SetParameter(PARAM_KEY_IMAGE_ENCODE_QFACTOR, qfactor);
2210a5c7a17Sopenharmony_ci    }
2220a5c7a17Sopenharmony_ci    int32_t streamFps = 0;
2230a5c7a17Sopenharmony_ci    ReadInt32(&io, &streamFps);
2240a5c7a17Sopenharmony_ci    fc->SetParameter(CAM_FRAME_FPS, streamFps);
2250a5c7a17Sopenharmony_ci    int32_t invertMode = 0;
2260a5c7a17Sopenharmony_ci    ReadInt32(&io, &invertMode);
2270a5c7a17Sopenharmony_ci    fc->SetParameter(CAM_IMAGE_INVERT_MODE, invertMode);
2280a5c7a17Sopenharmony_ci    CameraRect streamCrop;
2290a5c7a17Sopenharmony_ci    ReadInt32(&io, &streamCrop.x);
2300a5c7a17Sopenharmony_ci    ReadInt32(&io, &streamCrop.y);
2310a5c7a17Sopenharmony_ci    ReadInt32(&io, &streamCrop.w);
2320a5c7a17Sopenharmony_ci    ReadInt32(&io, &streamCrop.h);
2330a5c7a17Sopenharmony_ci    fc->SetParameter(CAM_IMAGE_CROP_RECT, streamCrop);
2340a5c7a17Sopenharmony_ci    int32_t streamFormat;
2350a5c7a17Sopenharmony_ci    ReadInt32(&io, &streamFormat);
2360a5c7a17Sopenharmony_ci    fc->SetParameter(CAM_IMAGE_FORMAT, streamFormat);
2370a5c7a17Sopenharmony_ci    MEDIA_INFO_LOG("streamFormat is %d", streamFormat);
2380a5c7a17Sopenharmony_ci
2390a5c7a17Sopenharmony_ci    if (type != FRAME_CONFIG_RECORD) {
2400a5c7a17Sopenharmony_ci        uint32_t len;
2410a5c7a17Sopenharmony_ci        ReadUint32(&io, &len);
2420a5c7a17Sopenharmony_ci        uint8_t *dataBuff = (uint8_t *)ReadBuffer(&io, len);
2430a5c7a17Sopenharmony_ci        fc->SetVendorParameter(dataBuff, len);
2440a5c7a17Sopenharmony_ci    }
2450a5c7a17Sopenharmony_ci    return fc;
2460a5c7a17Sopenharmony_ci}
2470a5c7a17Sopenharmony_ci
2480a5c7a17Sopenharmony_civoid CameraServer::SetFrameConfig(IpcIo *req, IpcIo *reply)
2490a5c7a17Sopenharmony_ci{
2500a5c7a17Sopenharmony_ci    size_t sz;
2510a5c7a17Sopenharmony_ci    ReadString(req, &sz);
2520a5c7a17Sopenharmony_ci    int32_t streamId;
2530a5c7a17Sopenharmony_ci    ReadInt32(req, &streamId);
2540a5c7a17Sopenharmony_ci    MEDIA_ERR_LOG("SetFrameConfig streamId(%d).", streamId);
2550a5c7a17Sopenharmony_ci    FrameConfig *fc = DeserializeFrameConfig(*req);
2560a5c7a17Sopenharmony_ci    if (fc == nullptr) {
2570a5c7a17Sopenharmony_ci        MEDIA_ERR_LOG("Deserialize frame config failed.");
2580a5c7a17Sopenharmony_ci        return;
2590a5c7a17Sopenharmony_ci    }
2600a5c7a17Sopenharmony_ci    delete fc;
2610a5c7a17Sopenharmony_ci}
2620a5c7a17Sopenharmony_ci
2630a5c7a17Sopenharmony_ci
2640a5c7a17Sopenharmony_civoid CameraServer::TriggerLoopingCapture(IpcIo *req, IpcIo *reply)
2650a5c7a17Sopenharmony_ci{
2660a5c7a17Sopenharmony_ci    size_t sz;
2670a5c7a17Sopenharmony_ci    string cameraId((const char*)(ReadString(req, &sz)));
2680a5c7a17Sopenharmony_ci    CameraDevice *device_ = CameraService::GetInstance()->GetCameraDevice(cameraId);
2690a5c7a17Sopenharmony_ci    FrameConfig *fc = DeserializeFrameConfig(*req);
2700a5c7a17Sopenharmony_ci    if (fc == nullptr) {
2710a5c7a17Sopenharmony_ci        MEDIA_ERR_LOG("Deserialize frame config failed.");
2720a5c7a17Sopenharmony_ci        return;
2730a5c7a17Sopenharmony_ci    }
2740a5c7a17Sopenharmony_ci    uint32_t streamId = 0;
2750a5c7a17Sopenharmony_ci    int32_t loopingCaptureStatus = device_->TriggerLoopingCapture(*fc, &streamId);
2760a5c7a17Sopenharmony_ci    OnTriggerLoopingCaptureFinished(loopingCaptureStatus, streamId);
2770a5c7a17Sopenharmony_ci    delete fc;
2780a5c7a17Sopenharmony_ci}
2790a5c7a17Sopenharmony_ci
2800a5c7a17Sopenharmony_civoid CameraServer::TriggerSingleCapture(IpcIo *req, IpcIo *reply)
2810a5c7a17Sopenharmony_ci{
2820a5c7a17Sopenharmony_ci    size_t sz;
2830a5c7a17Sopenharmony_ci    string cameraId((const char *)(ReadString(req, &sz)));
2840a5c7a17Sopenharmony_ci    CameraDevice *device_ = CameraService::GetInstance()->GetCameraDevice(cameraId);
2850a5c7a17Sopenharmony_ci    FrameConfig *fc = DeserializeFrameConfig(*req);
2860a5c7a17Sopenharmony_ci    if (fc == nullptr) {
2870a5c7a17Sopenharmony_ci        MEDIA_ERR_LOG("Deserialize frame config failed.");
2880a5c7a17Sopenharmony_ci        return;
2890a5c7a17Sopenharmony_ci    }
2900a5c7a17Sopenharmony_ci    uint32_t streamId = 0;
2910a5c7a17Sopenharmony_ci    int32_t singleCaptureStatus = device_->TriggerSingleCapture(*fc, &streamId);
2920a5c7a17Sopenharmony_ci    OnTriggerSingleCaptureFinished(singleCaptureStatus);
2930a5c7a17Sopenharmony_ci    delete fc;
2940a5c7a17Sopenharmony_ci}
2950a5c7a17Sopenharmony_ci
2960a5c7a17Sopenharmony_civoid CameraServer::StopLoopingCapture(IpcIo *req, IpcIo *reply)
2970a5c7a17Sopenharmony_ci{
2980a5c7a17Sopenharmony_ci    size_t sz;
2990a5c7a17Sopenharmony_ci    string cameraId((const char *)(ReadString(req, &sz)));
3000a5c7a17Sopenharmony_ci    CameraDevice *device_ = CameraService::GetInstance()->GetCameraDevice(cameraId);
3010a5c7a17Sopenharmony_ci    if (device_ == nullptr) {
3020a5c7a17Sopenharmony_ci        MEDIA_INFO_LOG("device_ is  null in camera_server.cpp!");
3030a5c7a17Sopenharmony_ci        return;
3040a5c7a17Sopenharmony_ci    }
3050a5c7a17Sopenharmony_ci
3060a5c7a17Sopenharmony_ci    int32_t type;
3070a5c7a17Sopenharmony_ci    ReadInt32(req, &type);
3080a5c7a17Sopenharmony_ci    device_->StopLoopingCapture(type);
3090a5c7a17Sopenharmony_ci}
3100a5c7a17Sopenharmony_ci
3110a5c7a17Sopenharmony_civoid CameraServer::OnCameraStatusChange(int32_t ret, SvcIdentity *sid)
3120a5c7a17Sopenharmony_ci{
3130a5c7a17Sopenharmony_ci    IpcIo io;
3140a5c7a17Sopenharmony_ci    uint8_t tmpData[DEFAULT_IPC_SIZE];
3150a5c7a17Sopenharmony_ci    IpcIoInit(&io, tmpData, DEFAULT_IPC_SIZE, 0);
3160a5c7a17Sopenharmony_ci    WriteInt32(&io, ret);
3170a5c7a17Sopenharmony_ci    MessageOption option;
3180a5c7a17Sopenharmony_ci    MessageOptionInit(&option);
3190a5c7a17Sopenharmony_ci    option.flags = TF_OP_ASYNC;
3200a5c7a17Sopenharmony_ci    int32_t result = SendRequest(*sid, ON_CAMERA_STATUS_CHANGE, &io, nullptr, option, nullptr);
3210a5c7a17Sopenharmony_ci    if (result != ERR_NONE) {
3220a5c7a17Sopenharmony_ci        MEDIA_ERR_LOG("Create camera callback : on camera status change failed.");
3230a5c7a17Sopenharmony_ci    }
3240a5c7a17Sopenharmony_ci}
3250a5c7a17Sopenharmony_ci
3260a5c7a17Sopenharmony_civoid CameraServer::OnTriggerSingleCaptureFinished(int32_t ret)
3270a5c7a17Sopenharmony_ci{
3280a5c7a17Sopenharmony_ci    IpcIo io;
3290a5c7a17Sopenharmony_ci    uint8_t tmpData[DEFAULT_IPC_SIZE];
3300a5c7a17Sopenharmony_ci    IpcIoInit(&io, tmpData, DEFAULT_IPC_SIZE, 0);
3310a5c7a17Sopenharmony_ci    WriteInt32(&io, ret);
3320a5c7a17Sopenharmony_ci    MessageOption option;
3330a5c7a17Sopenharmony_ci    MessageOptionInit(&option);
3340a5c7a17Sopenharmony_ci    option.flags = TF_OP_ASYNC;
3350a5c7a17Sopenharmony_ci    int32_t result = SendRequest(sid_, ON_TRIGGER_SINGLE_CAPTURE_FINISHED, &io, nullptr, option, nullptr);
3360a5c7a17Sopenharmony_ci    if (result != ERR_NONE) {
3370a5c7a17Sopenharmony_ci        MEDIA_ERR_LOG("Trigger single capture callback : on trigger single capture frame finished failed.");
3380a5c7a17Sopenharmony_ci        return;
3390a5c7a17Sopenharmony_ci    }
3400a5c7a17Sopenharmony_ci}
3410a5c7a17Sopenharmony_ci
3420a5c7a17Sopenharmony_civoid CameraServer::OnTriggerLoopingCaptureFinished(int32_t ret, int32_t streamId)
3430a5c7a17Sopenharmony_ci{
3440a5c7a17Sopenharmony_ci    IpcIo io;
3450a5c7a17Sopenharmony_ci    uint8_t tmpData[DEFAULT_IPC_SIZE];
3460a5c7a17Sopenharmony_ci    IpcIoInit(&io, tmpData, DEFAULT_IPC_SIZE, 0);
3470a5c7a17Sopenharmony_ci    WriteInt32(&io, ret);
3480a5c7a17Sopenharmony_ci    MessageOption option;
3490a5c7a17Sopenharmony_ci    MessageOptionInit(&option);
3500a5c7a17Sopenharmony_ci    option.flags = TF_OP_ASYNC;
3510a5c7a17Sopenharmony_ci    int32_t result = SendRequest(sid_, ON_TRIGGER_LOOPING_CAPTURE_FINISHED, &io, nullptr, option, nullptr);
3520a5c7a17Sopenharmony_ci    if (result != ERR_NONE) {
3530a5c7a17Sopenharmony_ci        MEDIA_ERR_LOG("Trigger looping capture callback : on trigger looping capture finished failed.");
3540a5c7a17Sopenharmony_ci    }
3550a5c7a17Sopenharmony_ci}
3560a5c7a17Sopenharmony_ci
3570a5c7a17Sopenharmony_civoid CameraServer::OnCameraConfigured(int32_t ret)
3580a5c7a17Sopenharmony_ci{
3590a5c7a17Sopenharmony_ci    IpcIo io;
3600a5c7a17Sopenharmony_ci    uint8_t tmpData[DEFAULT_IPC_SIZE];
3610a5c7a17Sopenharmony_ci    IpcIoInit(&io, tmpData, DEFAULT_IPC_SIZE, 0);
3620a5c7a17Sopenharmony_ci    WriteInt32(&io, ret);
3630a5c7a17Sopenharmony_ci    MessageOption option;
3640a5c7a17Sopenharmony_ci    MessageOptionInit(&option);
3650a5c7a17Sopenharmony_ci    option.flags = TF_OP_ASYNC;
3660a5c7a17Sopenharmony_ci    int32_t result = SendRequest(sid_, ON_CAMERA_CONFIGURED, &io, nullptr, option, nullptr);
3670a5c7a17Sopenharmony_ci    if (result != ERR_NONE) {
3680a5c7a17Sopenharmony_ci        MEDIA_ERR_LOG("Camera config callback : on trigger looping capture finished failed.");
3690a5c7a17Sopenharmony_ci    }
3700a5c7a17Sopenharmony_ci}
3710a5c7a17Sopenharmony_ci
3720a5c7a17Sopenharmony_civoid CameraServer::SetCameraMode(IpcIo *req, IpcIo *reply)
3730a5c7a17Sopenharmony_ci{
3740a5c7a17Sopenharmony_ci    uint8_t modeIndex;
3750a5c7a17Sopenharmony_ci    ReadUint8(req, &modeIndex);
3760a5c7a17Sopenharmony_ci    int32_t cameraStatus = CameraService::GetInstance()->SetCameraMode(modeIndex);
3770a5c7a17Sopenharmony_ci    WriteInt32(reply, cameraStatus);
3780a5c7a17Sopenharmony_ci}
3790a5c7a17Sopenharmony_ci} // namespace Media
3800a5c7a17Sopenharmony_ci} // namespace OHOS