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