1 /*
2  * Copyright (C) 2023 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 "screen_capture_listener_stub.h"
17 #include "media_log.h"
18 #include "media_errors.h"
19 
20 namespace {
21 constexpr OHOS::HiviewDFX::HiLogLabel LABEL = {LOG_CORE, LOG_DOMAIN_SCREENCAPTURE, "ScreenCaptureListenerStub"};
22 }
23 
24 namespace OHOS {
25 namespace Media {
ScreenCaptureListenerStub()26 ScreenCaptureListenerStub::ScreenCaptureListenerStub()
27 {
28     MEDIA_LOGD("0x%{public}06" PRIXPTR " Instances create", FAKE_POINTER(this));
29 }
30 
~ScreenCaptureListenerStub()31 ScreenCaptureListenerStub::~ScreenCaptureListenerStub()
32 {
33     MEDIA_LOGD("0x%{public}06" PRIXPTR " Instances destroy", FAKE_POINTER(this));
34 }
35 
OnRemoteRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)36 int ScreenCaptureListenerStub::OnRemoteRequest(uint32_t code, MessageParcel &data, MessageParcel &reply,
37     MessageOption &option)
38 {
39     MEDIA_LOGD("0x%{public}06" PRIXPTR " Instances OnRemoteRequest code:%{public}u", FAKE_POINTER(this), code);
40     auto remoteDescriptor = data.ReadInterfaceToken();
41     if (ScreenCaptureListenerStub::GetDescriptor() != remoteDescriptor) {
42         MEDIA_LOGE("Invalid descriptor");
43         return MSERR_INVALID_OPERATION;
44     }
45     switch (code) {
46         case ScreenCaptureListenerMsg::ON_ERROR: {
47             int errorType = data.ReadInt32();
48             int errorCode = data.ReadInt32();
49             OnError(static_cast<ScreenCaptureErrorType>(errorType), errorCode);
50             return MSERR_OK;
51         }
52         case ScreenCaptureListenerMsg::ON_AUDIO_AVAILABLE: {
53             bool isReady = data.ReadBool();
54             AudioCaptureSourceType type = static_cast<AudioCaptureSourceType>(data.ReadInt32());
55             OnAudioBufferAvailable(isReady, type);
56             return MSERR_OK;
57         }
58         case ScreenCaptureListenerMsg::ON_VIDEO_AVAILABLE: {
59             bool isReady = data.ReadBool();
60             OnVideoBufferAvailable(isReady);
61             return MSERR_OK;
62         }
63         case ScreenCaptureListenerMsg::ON_STAGE_CHANGE: {
64             AVScreenCaptureStateCode stateCode = static_cast<AVScreenCaptureStateCode>(data.ReadInt32());
65             OnStateChange(stateCode);
66             return MSERR_OK;
67         }
68         default: {
69             MEDIA_LOGE("default case, need check ScreenCaptureListenerStub");
70             return IPCObjectStub::OnRemoteRequest(code, data, reply, option);
71         }
72     }
73 }
74 
OnError(ScreenCaptureErrorType errorType,int32_t errorCode)75 void ScreenCaptureListenerStub::OnError(ScreenCaptureErrorType errorType, int32_t errorCode)
76 {
77     if (callback_ != nullptr) {
78         callback_->OnError(errorType, errorCode);
79     }
80 }
81 
SetScreenCaptureCallback(const std::shared_ptr<ScreenCaptureCallBack> & callback)82 void ScreenCaptureListenerStub::SetScreenCaptureCallback(const std::shared_ptr<ScreenCaptureCallBack> &callback)
83 {
84     callback_ = callback;
85 }
86 
OnAudioBufferAvailable(bool isReady,AudioCaptureSourceType type)87 void ScreenCaptureListenerStub::OnAudioBufferAvailable(bool isReady, AudioCaptureSourceType type)
88 {
89     if (callback_ != nullptr) {
90         callback_->OnAudioBufferAvailable(isReady, type);
91     }
92 }
93 
OnVideoBufferAvailable(bool isReady)94 void ScreenCaptureListenerStub::OnVideoBufferAvailable(bool isReady)
95 {
96     if (callback_ != nullptr) {
97         callback_->OnVideoBufferAvailable(isReady);
98     }
99 }
100 
OnStateChange(AVScreenCaptureStateCode stateCode)101 void ScreenCaptureListenerStub::OnStateChange(AVScreenCaptureStateCode stateCode)
102 {
103     if (callback_ != nullptr) {
104         callback_->OnStateChange(stateCode);
105     }
106 }
107 } // namespace Media
108 } // namespace OHOS