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