1# Copyright (C) 2023 Huawei Device Co., Ltd.
2# Licensed under the Apache License, Version 2.0 (the "License");
3# you may not use this file except in compliance with the License.
4# You may obtain a copy of the License at
5#
6#     http://www.apache.org/licenses/LICENSE-2.0
7#
8# Unless required by applicable law or agreed to in writing, software
9# distributed under the License is distributed on an "AS IS" BASIS,
10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11# See the License for the specific language governing permissions and
12# limitations under the License.
13
14import("//build/ohos.gni")
15import("//foundation/multimedia/av_codec/config.gni")
16
17config("av_codec_packege_include") {
18  include_dirs = [
19    "$av_codec_root_dir/frameworks/native/avcodec",
20    "$av_codec_root_dir/frameworks/native/avcodeclist",
21    "$av_codec_root_dir/frameworks/native/avdemuxer",
22    "$av_codec_root_dir/frameworks/native/avmuxer",
23    "$av_codec_root_dir/frameworks/native/avsource",
24    "$av_codec_root_dir/interfaces/inner_api/native",
25    "$av_codec_root_dir/interfaces/kits/c",
26    "$av_codec_root_dir/interfaces",
27    "$av_codec_root_dir/services/dfx/include",
28    "$av_codec_root_dir/services/include",
29    "$av_codec_root_dir/services/services/codec/client",
30    "$av_codec_root_dir/services/services/codec/ipc",
31    "$av_codec_root_dir/services/services/codeclist/client",
32    "$av_codec_root_dir/services/services/codeclist/ipc",
33    "$av_codec_root_dir/services/services/common",
34    "$av_codec_root_dir/services/services/demuxer/client",
35    "$av_codec_root_dir/services/services/demuxer/ipc",
36    "$av_codec_root_dir/services/services/muxer/client",
37    "$av_codec_root_dir/services/services/muxer/ipc",
38    "$av_codec_root_dir/services/services/sa_avcodec/client",
39    "$av_codec_root_dir/services/services/sa_avcodec/ipc",
40    "$av_codec_root_dir/services/services/source/client",
41    "$av_codec_root_dir/services/services/source/ipc",
42    "$av_codec_root_dir/services/engine/base/include",
43    "$av_codec_root_dir/services/services/codec/server",
44    "$av_codec_root_dir/services/services/codec/server/post_processing",
45    "$av_codec_root_dir/services/engine/codec/include/audio",
46    "$av_codec_root_dir/services/engine/codeclist",
47    "$av_codec_root_dir/services/engine/common/include",
48    "$av_codec_root_dir/services/utils/include",
49  ]
50}
51
52config("av_codec_client_local_config") {
53  include_dirs = [
54    "$av_codec_root_dir/services/services/factory",
55    "$av_codec_root_dir/services/engine/factory",
56
57    "$av_codec_root_dir/services/media_engine/modules/muxer",
58    "$av_codec_root_dir/services/engine/plugin/common",
59    "$av_codec_root_dir/services/engine/plugin/core",
60    "$av_codec_root_dir/services/engine/plugin/interface",
61    "$av_codec_root_dir/services/engine/source/hst_releated",
62    "$av_codec_root_dir/services/media_engine/modules",
63  ]
64}
65
66config("av_codec_client_ipc_config") {
67  include_dirs = [
68    "$av_codec_root_dir/services/services/codec/client",
69    "$av_codec_root_dir/services/services/codec/ipc",
70    "$av_codec_root_dir/services/services/codeclist/client",
71    "$av_codec_root_dir/services/services/codeclist/ipc",
72    "$av_codec_root_dir/services/services/common",
73    "$av_codec_root_dir/services/services/demuxer/client",
74    "$av_codec_root_dir/services/services/demuxer/ipc",
75    "$av_codec_root_dir/services/services/muxer/client",
76    "$av_codec_root_dir/services/services/muxer/ipc",
77    "$av_codec_root_dir/services/services/sa_avcodec/client",
78    "$av_codec_root_dir/services/services/sa_avcodec/ipc",
79    "$av_codec_root_dir/services/services/source/client",
80    "$av_codec_root_dir/services/services/source/ipc",
81  ]
82}
83
84config("av_codec_client_public_config") {
85  include_dirs = [
86    "./",
87    "$av_codec_root_dir/frameworks/native/avcodec",
88    "$av_codec_root_dir/frameworks/native/avcodeclist",
89    "$av_codec_root_dir/frameworks/native/avdemuxer",
90    "$av_codec_root_dir/frameworks/native/avmuxer",
91    "$av_codec_root_dir/frameworks/native/avsource",
92    "$av_codec_root_dir/interfaces/kits/c",
93    "$av_codec_root_dir/services/include",
94    "$av_codec_root_dir/services/dfx/include",
95    "$av_codec_root_dir/services/utils/include",
96  ]
97
98  defines = []
99  defines += av_codec_defines
100
101  if (target_cpu == "arm64" || is_emulator) {
102    av_codec_plugin_path = "\"/system/lib64/media/av_codec_plugins\""
103    av_codec_path = "\"/system/lib64\""
104  } else {
105    av_codec_plugin_path = "\"/system/lib/media/av_codec_plugins\""
106    av_codec_path = "\"/system/lib\""
107  }
108
109  defines += [
110    "AV_CODEC_PLUGIN_PATH=${av_codec_plugin_path}",
111    "AV_CODEC_PLUGIN_FILE_TAIL=\".z.so\"",
112    "AV_CODEC_PATH=${av_codec_path}",
113  ]
114
115  if (av_codec_client_support_codec) {
116    defines += [ "CLIENT_SUPPORT_CODEC" ]
117  } else {
118    defines += [ "CLIENT_UNSUPPORT_CODEC" ]
119  }
120
121  if (av_codec_enable_special_codec) {
122    defines += [ "AV_CODEC_AUDIO_VIVID_CAPACITY" ]
123  }
124}
125
126config("av_codec_client_codec_config") {
127  include_dirs = [
128    "$av_codec_root_dir/interfaces/inner_api/native",
129    "$av_codec_root_dir/interfaces/kits/c",
130    "$av_codec_root_dir/services/dfx/include",
131    "$av_codec_root_dir/services/drm_decryptor",
132    "$av_codec_root_dir/services/utils/include/",
133    "$av_codec_root_dir/services/engine/base/include/",
134    "$av_codec_root_dir/services/engine/codec/include/audio/",
135    "$av_codec_root_dir/services/engine/common/include/",
136    "$av_codec_root_dir/services/media_engine/modules/media_codec/",
137    "$av_codec_root_dir/services/media_engine/plugins/ffmpeg_adapter/common/",
138  ]
139}
140
141config("av_codec_client_compile_config") {
142  cflags = [
143    "-fno-exceptions",
144    "-Wall",
145    "-fno-common",
146    "-fstack-protector-strong",
147    "-Wshadow",
148    "-FPIC",
149    "-FS",
150    "-O2",
151    "-D_FORTIFY_SOURCE=2",
152    "-Wformat=2",
153    "-Wdate-time",
154  ]
155
156  cflags_cc = [
157    "-std=c++17",
158    "-fno-rtti",
159  ]
160
161  if (target_cpu == "arm") {
162    cflags += [ "-DBINDER_IPC_32BIT" ]
163  }
164}
165
166config("av_codec_client_drm_config") {
167  include_dirs = [ "$drm_framework_root_dir/services/drm_service/ipc" ]
168}
169
170ohos_shared_library("av_codec_client") {
171  branch_protector_ret = "pac_ret"
172  install_enable = true
173  public_configs = [
174    ":av_codec_client_local_config",
175    ":av_codec_client_ipc_config",
176    ":av_codec_client_public_config",
177    ":av_codec_packege_include",
178    ":av_codec_client_codec_config",
179    ":av_codec_client_drm_config",
180  ]
181
182  public_external_deps = [
183    "ffmpeg:libohosffmpeg",
184    "graphic_surface:surface",
185    "media_foundation:media_foundation",
186  ]
187
188  sanitize = av_codec_sanitize
189
190  configs = [
191    ":av_codec_packege_include",
192    ":av_codec_client_compile_config",
193    "$av_codec_root_dir/services/media_engine/modules:av_codec_media_engine_modules_config",
194  ]
195
196  sources = [
197    "$av_codec_root_dir/frameworks/native/common/avcodec_errors.cpp",
198    "$av_codec_root_dir/services/services/common/avsharedmemory_ipc.cpp",
199    "$av_codec_root_dir/services/services/sa_avcodec/client/avcodec_client.cpp",
200    "$av_codec_root_dir/services/services/sa_avcodec/ipc/avcodec_listener_stub.cpp",
201    "$av_codec_root_dir/services/services/sa_avcodec/ipc/avcodec_parcel.cpp",
202    "$av_codec_root_dir/services/services/sa_avcodec/ipc/avcodec_service_proxy.cpp",
203  ]
204  if (av_codec_support_codec) {
205    sources += [
206      "$av_codec_root_dir/frameworks/native/avcodec/avcodec_audio_codec_impl.cpp",
207      "$av_codec_root_dir/frameworks/native/avcodec/avcodec_audio_codec_inner_impl.cpp",
208      "$av_codec_root_dir/frameworks/native/avcodec/avcodec_audio_decoder_impl.cpp",
209      "$av_codec_root_dir/frameworks/native/avcodec/avcodec_audio_encoder_impl.cpp",
210      "$av_codec_root_dir/frameworks/native/avcodec/avcodec_video_decoder_impl.cpp",
211      "$av_codec_root_dir/frameworks/native/avcodec/avcodec_video_encoder_impl.cpp",
212      "$av_codec_root_dir/services/services/codec/client/codec_client.cpp",
213      "$av_codec_root_dir/services/services/codec/ipc/buffer_converter.cpp",
214      "$av_codec_root_dir/services/services/codec/ipc/codec_listener_stub.cpp",
215      "$av_codec_root_dir/services/services/codec/ipc/codec_service_proxy.cpp",
216    ]
217  }
218  if (av_codec_support_codeclist) {
219    sources += [
220      "$av_codec_root_dir/frameworks/native/avcodeclist/avcodec_info.cpp",
221      "$av_codec_root_dir/frameworks/native/avcodeclist/avcodeclist_impl.cpp",
222      "$av_codec_root_dir/services/services/codeclist/client/codeclist_client.cpp",
223      "$av_codec_root_dir/services/services/codeclist/ipc/codeclist_service_proxy.cpp",
224      "$av_codec_root_dir/services/services/sa_avcodec/ipc/codeclist_parcel.cpp",
225    ]
226  }
227  if (av_codec_client_support_codec) {
228    sources += [
229      "$av_codec_root_dir/services/drm_decryptor/codec_drm_decrypt.cpp",
230      "$av_codec_root_dir/services/engine/codeclist/audio_codeclist_info.cpp",
231      "$av_codec_root_dir/services/engine/codeclist/codec_ability_singleton.cpp",
232      "$av_codec_root_dir/services/engine/codeclist/codeclist_builder.cpp",
233      "$av_codec_root_dir/services/engine/codeclist/codeclist_core.cpp",
234      "$av_codec_root_dir/services/media_engine/plugins/ffmpeg_adapter/common/hdi_codec.cpp",
235      "$av_codec_root_dir/services/services/codec/server/codec_factory.cpp",
236      "$av_codec_root_dir/services/services/codec/server/codec_param_checker.cpp",
237      "$av_codec_root_dir/services/services/codec/server/codec_server.cpp",
238      "$av_codec_root_dir/services/services/codec/server/post_processing/dynamic_controller.cpp",
239      "$av_codec_root_dir/services/services/codec/server/post_processing/dynamic_interface.cpp",
240      "$av_codec_root_dir/services/services/codec/server/post_processing/state_machine.cpp",
241      "$av_codec_root_dir/services/services/codec/server/temporal_scalability.cpp",
242    ]
243  }
244  if (av_codec_support_demuxer) {
245    include_dirs = [
246      "$av_codec_root_dir/services/media_engine/modules",
247      "$av_codec_root_dir/services/media_engine/plugins",
248    ]
249
250    if (target_cpu == "arm64" || is_emulator) {
251      av_codec_plugin_path = "\"/system/lib64/media/av_codec_plugins\""
252    } else {
253      av_codec_plugin_path = "\"/system/lib/media/av_codec_plugins\""
254    }
255
256    if (target_cpu == "arm64" || is_emulator) {
257      oh_file_plugin_path = "\"/system/lib64/media/histreamer_plugins\""
258    } else {
259      oh_file_plugin_path = "\"/system/lib/media/histreamer_plugins\""
260    }
261
262    defines = []
263    defines += av_codec_defines
264    defines += [
265      "AV_CODEC_PLUGIN_PATH=${av_codec_plugin_path}",
266      "AV_CODEC_PLUGIN_FILE_TAIL=\".z.so\"",
267      "OH_FILE_PLUGIN_PATH=${oh_file_plugin_path}",
268    ]
269    sources += [
270      "$av_codec_root_dir/frameworks/native/avdemuxer/avdemuxer_impl.cpp",
271      "$av_codec_root_dir/frameworks/native/avsource/avsource_impl.cpp",
272    ]
273  }
274  if (av_codec_support_muxer) {
275    sources +=
276        [ "$av_codec_root_dir/frameworks/native/avmuxer/avmuxer_impl.cpp" ]
277  }
278  deps = [
279    "$av_codec_root_dir/services/dfx:av_codec_service_dfx",
280    "$av_codec_root_dir/services/media_engine/modules:av_codec_media_engine_modules",
281  ]
282
283  if (av_codec_client_support_codec) {
284    deps += [ "$av_codec_root_dir/services/engine/codec/audio:av_codec_audio_ffmpeg_codec" ]
285  }
286
287  if (av_codec_support_codeclist) {
288    deps += [ "$av_codec_root_dir/services/engine:av_codec_engine_package" ]
289  }
290
291  deps += [ "$av_codec_root_dir/services/media_engine/modules:av_codec_media_engine_modules" ]
292
293  external_deps = [
294    "bounds_checking_function:libsec_static",
295    "c_utils:utils",
296    "drivers_interface_codec:libcodec_proxy_3.0",
297    "graphic_surface:surface",
298    "hilog:libhilog",
299    "ipc:ipc_single",
300    "media_foundation:media_foundation",
301    "samgr:samgr_proxy",
302  ]
303
304  if (av_codec_support_drm) {
305    external_deps += [ "drm_framework:drm_framework" ]
306  }
307
308  innerapi_tags = [
309    "platformsdk",
310    "sasdk",
311  ]
312
313  subsystem_name = "multimedia"
314  part_name = "av_codec"
315}
316