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