• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 }