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 #include "core/interfaces/native/node/video_modifier.h"
16
17 #include <cstdint>
18
19 #include "core/components/common/properties/alignment.h"
20 #include "core/components_ng/base/frame_node.h"
21 #include "core/components_ng/base/view_abstract.h"
22 #include "core/components_ng/pattern/video/video_model_ng.h"
23 #include "core/pipeline/base/element_register.h"
24 #include "frameworks/core/components/common/layout/constants.h"
25
26 namespace OHOS::Ace::NG {
27 constexpr ArkUI_Bool DEFAULT_CONTROLS_VALUE = true;
28 constexpr ArkUI_Bool DEFAULT_LOOP = false;
29 constexpr ArkUI_Bool DEFAULT_MUTED = false;
30 constexpr ImageFit DEFAULT_OBJECT_FIT = ImageFit::COVER;
31
SetAutoPlay(ArkUINodeHandle node,ArkUI_Uint32 autoPlay)32 void SetAutoPlay(ArkUINodeHandle node, ArkUI_Uint32 autoPlay)
33 {
34 auto* frameNode = reinterpret_cast<FrameNode*>(node);
35 CHECK_NULL_VOID(frameNode);
36 VideoModelNG::SetAutoPlay(frameNode, static_cast<ArkUI_Bool>(autoPlay));
37 }
38
ResetAutoPlay(ArkUINodeHandle node)39 void ResetAutoPlay(ArkUINodeHandle node)
40 {
41 auto* frameNode = reinterpret_cast<FrameNode*>(node);
42 CHECK_NULL_VOID(frameNode);
43 VideoModelNG::SetAutoPlay(frameNode, false);
44 }
45
SetVideoObjectFit(ArkUINodeHandle node,ArkUI_Int32 objectFit)46 void SetVideoObjectFit(ArkUINodeHandle node, ArkUI_Int32 objectFit)
47 {
48 auto* frameNode = reinterpret_cast<FrameNode*>(node);
49 CHECK_NULL_VOID(frameNode);
50 VideoModelNG::SetObjectFit(frameNode, static_cast<ImageFit>(objectFit));
51 }
52
ResetVideoObjectFit(ArkUINodeHandle node)53 void ResetVideoObjectFit(ArkUINodeHandle node)
54 {
55 auto* frameNode = reinterpret_cast<FrameNode*>(node);
56 CHECK_NULL_VOID(frameNode);
57 VideoModelNG::SetObjectFit(frameNode, DEFAULT_OBJECT_FIT);
58 }
59
SetVideoControls(ArkUINodeHandle node,ArkUI_Uint32 controlsValue)60 void SetVideoControls(ArkUINodeHandle node, ArkUI_Uint32 controlsValue)
61 {
62 auto* frameNode = reinterpret_cast<FrameNode*>(node);
63 CHECK_NULL_VOID(frameNode);
64 VideoModelNG::SetControls(frameNode, static_cast<ArkUI_Bool>(controlsValue));
65 }
66
ResetVideoControls(ArkUINodeHandle node)67 void ResetVideoControls(ArkUINodeHandle node)
68 {
69 auto* frameNode = reinterpret_cast<FrameNode*>(node);
70 CHECK_NULL_VOID(frameNode);
71 VideoModelNG::SetControls(frameNode, DEFAULT_CONTROLS_VALUE);
72 }
73
SetVideoLoop(ArkUINodeHandle node,ArkUI_Uint32 value)74 void SetVideoLoop(ArkUINodeHandle node, ArkUI_Uint32 value)
75 {
76 auto* frameNode = reinterpret_cast<FrameNode*>(node);
77 CHECK_NULL_VOID(frameNode);
78 VideoModelNG::SetLoop(frameNode, static_cast<ArkUI_Bool>(value));
79 }
80
ResetVideoLoop(ArkUINodeHandle node)81 void ResetVideoLoop(ArkUINodeHandle node)
82 {
83 auto* frameNode = reinterpret_cast<FrameNode*>(node);
84 CHECK_NULL_VOID(frameNode);
85 VideoModelNG::SetLoop(frameNode, DEFAULT_LOOP);
86 }
87
SetVideoMuted(ArkUINodeHandle node,ArkUI_Uint32 value)88 void SetVideoMuted(ArkUINodeHandle node, ArkUI_Uint32 value)
89 {
90 auto* frameNode = reinterpret_cast<FrameNode*>(node);
91 CHECK_NULL_VOID(frameNode);
92 VideoModelNG::SetMuted(frameNode, static_cast<ArkUI_Bool>(value));
93 }
94
ResetVideoMuted(ArkUINodeHandle node)95 void ResetVideoMuted(ArkUINodeHandle node)
96 {
97 auto* frameNode = reinterpret_cast<FrameNode*>(node);
98 CHECK_NULL_VOID(frameNode);
99 VideoModelNG::SetMuted(frameNode, DEFAULT_MUTED);
100 }
101
SetVideoOpacity(ArkUINodeHandle node,ArkUI_Float32 opacity)102 void SetVideoOpacity(ArkUINodeHandle node, ArkUI_Float32 opacity)
103 {
104 auto *frameNode = reinterpret_cast<FrameNode *>(node);
105 CHECK_NULL_VOID(frameNode);
106 if ((LessNotEqual(opacity, 0.0)) || opacity > 1) {
107 opacity = 1.0f;
108 }
109 ViewAbstract::SetOpacity(frameNode, opacity);
110 }
111
ResetVideoOpacity(ArkUINodeHandle node)112 void ResetVideoOpacity(ArkUINodeHandle node)
113 {
114 auto *frameNode = reinterpret_cast<FrameNode *>(node);
115 CHECK_NULL_VOID(frameNode);
116 ViewAbstract::SetOpacity(frameNode, 1.0f);
117 }
118
119 namespace NodeModifier {
GetVideoModifier()120 const ArkUIVideoModifier* GetVideoModifier()
121 {
122 static const ArkUIVideoModifier modifier = {
123 SetAutoPlay,
124 ResetAutoPlay,
125 SetVideoObjectFit,
126 ResetVideoObjectFit,
127 SetVideoControls,
128 ResetVideoControls,
129 SetVideoLoop,
130 ResetVideoLoop,
131 SetVideoMuted,
132 ResetVideoMuted,
133 SetVideoOpacity,
134 ResetVideoOpacity
135 };
136
137 return &modifier;
138 }
139
GetCJUIVideoModifier()140 const CJUIVideoModifier* GetCJUIVideoModifier()
141 {
142 static const CJUIVideoModifier modifier = {
143 SetAutoPlay,
144 ResetAutoPlay,
145 SetVideoObjectFit,
146 ResetVideoObjectFit,
147 SetVideoControls,
148 ResetVideoControls,
149 SetVideoLoop,
150 ResetVideoLoop,
151 SetVideoMuted,
152 ResetVideoMuted,
153 SetVideoOpacity,
154 ResetVideoOpacity
155 };
156
157 return &modifier;
158 }
159 } // namespace NodeModifier
160 } // namespace OHOS::Ace::NG