1 /* 2 * Copyright (c) 2025 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #include "cj_avscreen_capture.h" 17 #include "media_core.h" 18 19 namespace OHOS { 20 namespace Media { CreateAVScreenCaptureRecorder(int32_t * errorcode)21 int64_t CJAVScreenCapture::CreateAVScreenCaptureRecorder(int32_t* errorcode) 22 { 23 CJAVScreenCapture *cjAVScreenCapture = FFIData::Create<CJAVScreenCapture>(); 24 if (cjAVScreenCapture == nullptr) { 25 MEDIA_LOGE("No memory!"); 26 return -1; 27 } 28 29 cjAVScreenCapture->screenCapture_ = ScreenCaptureFactory::CreateScreenCapture(); 30 if (cjAVScreenCapture->screenCapture_ == nullptr) { 31 FFIData::Release(cjAVScreenCapture->GetID()); 32 MEDIA_LOGE("failed to CreateAVScreenCaptureRecorder"); 33 return -1; 34 } 35 36 cjAVScreenCapture->screenCaptureCb_ = std::make_shared<CJAVScreenCaptureCallback>(); 37 (void)cjAVScreenCapture->screenCapture_->SetScreenCaptureCallback(cjAVScreenCapture->screenCaptureCb_); 38 MEDIA_LOGI("Constructor success"); 39 return cjAVScreenCapture->GetID(); 40 } 41 AVScreenCaptureinit(std::shared_ptr<ScreenCapture> screenCapture,AVScreenCaptureConfig config)42 int32_t CJAVScreenCapture::AVScreenCaptureinit(std::shared_ptr<ScreenCapture> screenCapture, 43 AVScreenCaptureConfig config) 44 { 45 int32_t ret = screenCapture->SetPrivacyAuthorityEnabled(); 46 if (ret != MSERR_OK) { 47 ret = MSERR_EXT_API9_NO_PERMISSION; 48 MEDIA_LOGE("failed to SetPrivacyAuthorityEnabled"); 49 return ret; 50 } 51 ret = screenCapture->Init(config); 52 if (ret != MSERR_OK) { 53 MEDIA_LOGE("failed to StartRecording"); 54 } 55 return ret; 56 } 57 StartRecording(std::shared_ptr<ScreenCapture> screenCapture)58 int32_t CJAVScreenCapture::StartRecording(std::shared_ptr<ScreenCapture> screenCapture) 59 { 60 int32_t ret = screenCapture->SetPrivacyAuthorityEnabled(); 61 if (ret != MSERR_OK) { 62 ret = MSERR_EXT_API9_NO_PERMISSION; 63 MEDIA_LOGE("failed to SetPrivacyAuthorityEnabled"); 64 return ret; 65 } 66 ret = screenCapture->StartScreenRecording(); 67 if (ret != MSERR_OK) { 68 MEDIA_LOGE("failed to StartRecording"); 69 } 70 return ret; 71 } 72 StopRecording(std::shared_ptr<ScreenCapture> screenCapture)73 int32_t CJAVScreenCapture::StopRecording(std::shared_ptr<ScreenCapture> screenCapture) 74 { 75 int32_t ret = screenCapture->StopScreenRecording(); 76 if (ret!= MSERR_OK) { 77 MEDIA_LOGE("failed to StopRecording"); 78 } 79 return ret; 80 } 81 SkipPrivacyMode(std::shared_ptr<ScreenCapture> screenCapture,const std::vector<uint64_t> windowIDsVec)82 int32_t CJAVScreenCapture::SkipPrivacyMode(std::shared_ptr<ScreenCapture> screenCapture, 83 const std::vector<uint64_t> windowIDsVec) 84 { 85 int32_t ret = screenCapture->SkipPrivacyMode(const_cast<std::vector<uint64_t> &>(windowIDsVec)); 86 if (ret!= MSERR_OK) { 87 MEDIA_LOGE("failed to SkipPrivacyMode"); 88 } 89 return ret; 90 } 91 SetMicEnabled(std::shared_ptr<ScreenCapture> screenCapture,const bool enabled)92 int32_t CJAVScreenCapture::SetMicEnabled(std::shared_ptr<ScreenCapture> screenCapture, const bool enabled) 93 { 94 int32_t ret = screenCapture->SetMicrophoneEnabled(enabled); 95 if (ret!= MSERR_OK) { 96 MEDIA_LOGE("failed to SetMicEnabled"); 97 } 98 return ret; 99 } 100 Release(std::shared_ptr<ScreenCapture> screenCapture)101 int32_t CJAVScreenCapture::Release(std::shared_ptr<ScreenCapture> screenCapture) 102 { 103 int32_t ret = screenCapture->Release(); 104 if (ret!= MSERR_OK) { 105 MEDIA_LOGE("failed to Release"); 106 } 107 return ret; 108 } 109 OnStateChange(int64_t callbackId)110 int32_t CJAVScreenCapture::OnStateChange(int64_t callbackId) 111 { 112 if (screenCaptureCb_ == nullptr) { 113 return MSERR_EXT_API9_NO_MEMORY; 114 } 115 116 auto cjCb = std::static_pointer_cast<CJAVScreenCaptureCallback>(screenCaptureCb_); 117 cjCb->SaveCallbackReference(CJAVScreenCaptureEvent::EVENT_STATE_CHANGE, callbackId); 118 return MSERR_EXT_API9_OK; 119 } 120 OffStateChange()121 int32_t CJAVScreenCapture::OffStateChange() 122 { 123 if (screenCaptureCb_ == nullptr) { 124 return MSERR_EXT_API9_NO_MEMORY; 125 } 126 auto cjCb = std::static_pointer_cast<CJAVScreenCaptureCallback>(screenCaptureCb_); 127 cjCb->CancelCallbackReference(CJAVScreenCaptureEvent::EVENT_STATE_CHANGE); 128 return MSERR_EXT_API9_OK; 129 } 130 OnError(int64_t callbackId)131 int32_t CJAVScreenCapture::OnError(int64_t callbackId) 132 { 133 if (screenCaptureCb_ == nullptr) { 134 return MSERR_EXT_API9_NO_MEMORY; 135 } 136 137 auto cjCb = std::static_pointer_cast<CJAVScreenCaptureCallback>(screenCaptureCb_); 138 cjCb->SaveCallbackReference(CJAVScreenCaptureEvent::EVENT_ERROR, callbackId); 139 return MSERR_EXT_API9_OK; 140 } 141 OffError()142 int32_t CJAVScreenCapture::OffError() 143 { 144 if (screenCaptureCb_ == nullptr) { 145 return MSERR_EXT_API9_NO_MEMORY; 146 } 147 auto cjCb = std::static_pointer_cast<CJAVScreenCaptureCallback>(screenCaptureCb_); 148 cjCb->CancelCallbackReference(CJAVScreenCaptureEvent::EVENT_ERROR); 149 return MSERR_EXT_API9_OK; 150 } 151 152 } 153 }