1 /*
2 * Copyright (c) 2024 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 "video_processing_callback_native.h"
17
18 #include "vpe_log.h"
19
20 using namespace OHOS::Media::VideoProcessingEngine;
21
BindOnError(OH_VideoProcessingCallback_OnError onError)22 VideoProcessing_ErrorCode VideoProcessingCallbackNative::BindOnError(OH_VideoProcessingCallback_OnError onError)
23 {
24 if (onError == nullptr) {
25 VPE_LOGE("onError is null!");
26 return VIDEO_PROCESSING_ERROR_INVALID_PARAMETER;
27 }
28 return BindFunction([this, onError]() { onError_ = onError; });
29 }
30
BindOnState(OH_VideoProcessingCallback_OnState onState)31 VideoProcessing_ErrorCode VideoProcessingCallbackNative::BindOnState(OH_VideoProcessingCallback_OnState onState)
32 {
33 if (onState == nullptr) {
34 VPE_LOGE("onState is null!");
35 return VIDEO_PROCESSING_ERROR_INVALID_PARAMETER;
36 }
37 return BindFunction([this, onState]() { onState_ = onState; });
38 }
39
BindOnNewOutputBuffer(OH_VideoProcessingCallback_OnNewOutputBuffer onNewOutputBuffer)40 VideoProcessing_ErrorCode VideoProcessingCallbackNative::BindOnNewOutputBuffer(
41 OH_VideoProcessingCallback_OnNewOutputBuffer onNewOutputBuffer)
42 {
43 if (onNewOutputBuffer == nullptr) {
44 VPE_LOGE("onNewOutputBuffer is null!");
45 return VIDEO_PROCESSING_ERROR_INVALID_PARAMETER;
46 }
47 return BindFunction([this, onNewOutputBuffer]() { onNewOutputBuffer_ = onNewOutputBuffer; });
48 }
49
IsValid() const50 bool VideoProcessingCallbackNative::IsValid() const
51 {
52 return isValid_.load();
53 }
54
IsModifiable() const55 bool VideoProcessingCallbackNative::IsModifiable() const
56 {
57 return isModifiable_.load();
58 }
59
LockModifiers()60 void VideoProcessingCallbackNative::LockModifiers()
61 {
62 std::lock_guard<std::mutex> lock(lock_);
63 isModifiable_ = false;
64 }
65
UnlockModifiers()66 void VideoProcessingCallbackNative::UnlockModifiers()
67 {
68 std::lock_guard<std::mutex> lock(lock_);
69 isModifiable_ = true;
70 }
71
HasOnNewOutputBuffer() const72 bool VideoProcessingCallbackNative::HasOnNewOutputBuffer() const
73 {
74 std::lock_guard<std::mutex> lock(lock_);
75 return onNewOutputBuffer_ != nullptr;
76 }
77
OnError(OH_VideoProcessing * instance,VideoProcessing_ErrorCode errorCode,void * userData) const78 void VideoProcessingCallbackNative::OnError(OH_VideoProcessing* instance, VideoProcessing_ErrorCode errorCode,
79 void* userData) const
80 {
81 if (onError_ == nullptr) {
82 VPE_LOGD("onError_ is null!");
83 return;
84 }
85 onError_(instance, errorCode, userData);
86 }
87
OnState(OH_VideoProcessing * instance,VideoProcessing_State state,void * userData) const88 void VideoProcessingCallbackNative::OnState(OH_VideoProcessing* instance, VideoProcessing_State state,
89 void* userData) const
90 {
91 if (onState_ == nullptr) {
92 VPE_LOGD("onState_ is null!");
93 return;
94 }
95 onState_(instance, state, userData);
96 }
97
OnNewOutputBuffer(OH_VideoProcessing * instance,uint32_t index,void * userData) const98 void VideoProcessingCallbackNative::OnNewOutputBuffer(OH_VideoProcessing* instance, uint32_t index,
99 void* userData) const
100 {
101 if (onNewOutputBuffer_ == nullptr) {
102 VPE_LOGD("onNewOutputBuffer_ is null!");
103 return;
104 }
105 onNewOutputBuffer_(instance, index, userData);
106 }
107
BindFunction(std::function<void ()> && functionBinder)108 VideoProcessing_ErrorCode VideoProcessingCallbackNative::BindFunction(std::function<void()>&& functionBinder)
109 {
110 if (!isModifiable_.load()) {
111 return VIDEO_PROCESSING_ERROR_PROCESS_FAILED;
112 }
113 std::lock_guard<std::mutex> lock(lock_);
114 functionBinder();
115 isValid_ = true;
116 return VIDEO_PROCESSING_SUCCESS;
117 }
118