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/media_engine/modules/demuxer",
59    "$av_codec_root_dir/services/engine/plugin/common",
60    "$av_codec_root_dir/services/engine/plugin/core",
61    "$av_codec_root_dir/services/engine/plugin/interface",
62    "$av_codec_root_dir/services/engine/source/hst_releated",
63    "$av_codec_root_dir/services/media_engine/modules",
64  ]
65}
66
67config("av_codec_client_ipc_config") {
68  include_dirs = [
69    "$av_codec_root_dir/services/services/codec/client",
70    "$av_codec_root_dir/services/services/codec/ipc",
71    "$av_codec_root_dir/services/services/codeclist/client",
72    "$av_codec_root_dir/services/services/codeclist/ipc",
73    "$av_codec_root_dir/services/services/common",
74    "$av_codec_root_dir/services/services/demuxer/client",
75    "$av_codec_root_dir/services/services/demuxer/ipc",
76    "$av_codec_root_dir/services/services/muxer/client",
77    "$av_codec_root_dir/services/services/muxer/ipc",
78    "$av_codec_root_dir/services/services/sa_avcodec/client",
79    "$av_codec_root_dir/services/services/sa_avcodec/ipc",
80    "$av_codec_root_dir/services/services/source/client",
81    "$av_codec_root_dir/services/services/source/ipc",
82  ]
83}
84
85config("av_codec_client_public_config") {
86  include_dirs = [
87    "./",
88    "$av_codec_root_dir/frameworks/native/avcodec",
89    "$av_codec_root_dir/frameworks/native/avcodeclist",
90    "$av_codec_root_dir/frameworks/native/avdemuxer",
91    "$av_codec_root_dir/frameworks/native/avmuxer",
92    "$av_codec_root_dir/frameworks/native/avsource",
93    "$av_codec_root_dir/interfaces/kits/c",
94    "$av_codec_root_dir/services/include",
95    "$av_codec_root_dir/services/dfx/include",
96    "$av_codec_root_dir/services/utils/include",
97  ]
98
99  defines = []
100  defines += av_codec_defines
101
102  if (target_cpu == "arm64" || is_emulator) {
103    av_codec_plugin_path = "\"/system/lib64/media/av_codec_plugins\""
104  } else {
105    av_codec_plugin_path = "\"/system/lib/media/av_codec_plugins\""
106  }
107
108  defines += [
109    "AV_CODEC_PLUGIN_PATH=${av_codec_plugin_path}",
110    "AV_CODEC_PLUGIN_FILE_TAIL=\".z.so\"",
111  ]
112
113  if (av_codec_client_support_codec) {
114    defines += [ "CLIENT_SUPPORT_CODEC" ]
115  } else {
116    defines += [ "CLIENT_UNSUPPORT_CODEC" ]
117  }
118
119  if (av_codec_enable_special_codec) {
120    defines += [ "AV_CODEC_AUDIO_VIVID_CAPACITY" ]
121  }
122}
123
124config("av_codec_client_codec_config") {
125  include_dirs = [
126    "$av_codec_root_dir/interfaces/inner_api/native",
127    "$av_codec_root_dir/interfaces/kits/c",
128    "$av_codec_root_dir/services/dfx/include",
129    "$av_codec_root_dir/services/drm_decryptor",
130    "$av_codec_root_dir/services/utils/include/",
131    "$av_codec_root_dir/services/engine/base/include/",
132    "$av_codec_root_dir/services/engine/codec/include/audio/",
133    "$av_codec_root_dir/services/engine/common/include/",
134    "$av_codec_root_dir/services/media_engine/modules/media_codec/",
135    "$av_codec_root_dir/services/media_engine/plugins/ffmpeg_adapter/common/",
136  ]
137}
138
139config("av_codec_client_compile_config") {
140  cflags = [
141    "-fno-exceptions",
142    "-Wall",
143    "-fno-common",
144    "-fstack-protector-strong",
145    "-Wshadow",
146    "-FPIC",
147    "-FS",
148    "-O2",
149    "-D_FORTIFY_SOURCE=2",
150    "-Wformat=2",
151    "-Wdate-time",
152  ]
153
154  cflags_cc = [
155    "-std=c++17",
156    "-fno-rtti",
157  ]
158
159  if (target_cpu == "arm") {
160    cflags += [ "-DBINDER_IPC_32BIT" ]
161  }
162}
163
164config("av_codec_client_drm_config") {
165  include_dirs = [ "$drm_framework_root_dir/services/drm_service/ipc" ]
166}
167
168ohos_shared_library("av_codec_client") {
169  branch_protector_ret = "pac_ret"
170  install_enable = true
171  public_configs = [
172    ":av_codec_client_local_config",
173    ":av_codec_client_ipc_config",
174    ":av_codec_client_public_config",
175    ":av_codec_packege_include",
176    ":av_codec_client_codec_config",
177    ":av_codec_client_drm_config",
178  ]
179
180  public_external_deps = [
181    "drm_framework:drm_framework",
182    "ffmpeg:libohosffmpeg",
183    "graphic_surface:surface",
184    "media_foundation:media_foundation",
185  ]
186
187  sanitize = av_codec_sanitize
188
189  configs = [
190    ":av_codec_packege_include",
191    ":av_codec_client_compile_config",
192    "$av_codec_root_dir/services/media_engine/modules:av_codec_media_engine_modules_config",
193  ]
194
195  sources = [
196    "$av_codec_root_dir/frameworks/native/common/avcodec_errors.cpp",
197    "$av_codec_root_dir/services/services/common/avsharedmemory_ipc.cpp",
198    "$av_codec_root_dir/services/services/sa_avcodec/client/avcodec_client.cpp",
199    "$av_codec_root_dir/services/services/sa_avcodec/ipc/avcodec_listener_stub.cpp",
200    "$av_codec_root_dir/services/services/sa_avcodec/ipc/avcodec_parcel.cpp",
201    "$av_codec_root_dir/services/services/sa_avcodec/ipc/avcodec_service_proxy.cpp",
202  ]
203  if (av_codec_support_codec) {
204    sources += [
205      "$av_codec_root_dir/frameworks/native/avcodec/avcodec_audio_codec_impl.cpp",
206      "$av_codec_root_dir/frameworks/native/avcodec/avcodec_audio_codec_inner_impl.cpp",
207      "$av_codec_root_dir/frameworks/native/avcodec/avcodec_audio_decoder_impl.cpp",
208      "$av_codec_root_dir/frameworks/native/avcodec/avcodec_audio_encoder_impl.cpp",
209      "$av_codec_root_dir/frameworks/native/avcodec/avcodec_video_decoder_impl.cpp",
210      "$av_codec_root_dir/frameworks/native/avcodec/avcodec_video_encoder_impl.cpp",
211      "$av_codec_root_dir/services/services/codec/client/codec_client.cpp",
212      "$av_codec_root_dir/services/services/codec/ipc/buffer_converter.cpp",
213      "$av_codec_root_dir/services/services/codec/ipc/codec_listener_stub.cpp",
214      "$av_codec_root_dir/services/services/codec/ipc/codec_service_proxy.cpp",
215    ]
216  }
217  if (av_codec_support_codeclist) {
218    sources += [
219      "$av_codec_root_dir/frameworks/native/avcodeclist/avcodec_info.cpp",
220      "$av_codec_root_dir/frameworks/native/avcodeclist/avcodeclist_impl.cpp",
221      "$av_codec_root_dir/services/services/codeclist/client/codeclist_client.cpp",
222      "$av_codec_root_dir/services/services/codeclist/ipc/codeclist_service_proxy.cpp",
223      "$av_codec_root_dir/services/services/sa_avcodec/ipc/codeclist_parcel.cpp",
224    ]
225  }
226  if (av_codec_client_support_codec) {
227    sources += [
228      "$av_codec_root_dir/services/drm_decryptor/codec_drm_decrypt.cpp",
229      "$av_codec_root_dir/services/engine/codeclist/audio_codeclist_info.cpp",
230      "$av_codec_root_dir/services/engine/codeclist/codec_ability_singleton.cpp",
231      "$av_codec_root_dir/services/engine/codeclist/codeclist_builder.cpp",
232      "$av_codec_root_dir/services/engine/codeclist/codeclist_core.cpp",
233      "$av_codec_root_dir/services/media_engine/plugins/ffmpeg_adapter/common/hdi_codec.cpp",
234      "$av_codec_root_dir/services/services/codec/server/codec_factory.cpp",
235      "$av_codec_root_dir/services/services/codec/server/codec_param_checker.cpp",
236      "$av_codec_root_dir/services/services/codec/server/codec_server.cpp",
237      "$av_codec_root_dir/services/services/codec/server/post_processing/dynamic_controller.cpp",
238      "$av_codec_root_dir/services/services/codec/server/post_processing/dynamic_interface.cpp",
239      "$av_codec_root_dir/services/services/codec/server/post_processing/state_machine.cpp",
240      "$av_codec_root_dir/services/services/codec/server/temporal_scalability.cpp",
241    ]
242  }
243  if (av_codec_support_demuxer) {
244    include_dirs = [
245      "$av_codec_root_dir/services/media_engine/modules",
246      "$av_codec_root_dir/services/media_engine/plugins",
247    ]
248
249    if (target_cpu == "arm64" || is_emulator) {
250      av_codec_plugin_path = "\"/system/lib64/media/av_codec_plugins\""
251    } else {
252      av_codec_plugin_path = "\"/system/lib/media/av_codec_plugins\""
253    }
254
255    if (target_cpu == "arm64" || is_emulator) {
256      oh_file_plugin_path = "\"/system/lib64/media/histreamer_plugins\""
257    } else {
258      oh_file_plugin_path = "\"/system/lib/media/histreamer_plugins\""
259    }
260
261    defines = []
262    defines += av_codec_defines
263    defines += [
264      "AV_CODEC_PLUGIN_PATH=${av_codec_plugin_path}",
265      "AV_CODEC_PLUGIN_FILE_TAIL=\".z.so\"",
266      "OH_FILE_PLUGIN_PATH=${oh_file_plugin_path}",
267    ]
268    sources += [
269      "$av_codec_root_dir/frameworks/native/avdemuxer/avdemuxer_impl.cpp",
270      "$av_codec_root_dir/frameworks/native/avsource/avsource_impl.cpp",
271    ]
272  }
273  if (av_codec_support_muxer) {
274    sources +=
275        [ "$av_codec_root_dir/frameworks/native/avmuxer/avmuxer_impl.cpp" ]
276  }
277  deps = [
278    "$av_codec_root_dir/services/dfx:av_codec_service_dfx",
279    "$av_codec_root_dir/services/media_engine/modules:av_codec_media_engine_modules",
280  ]
281
282  if (av_codec_client_support_codec) {
283    deps += [ "$av_codec_root_dir/services/engine/codec/audio:av_codec_audio_ffmpeg_codec" ]
284  }
285
286  if (av_codec_support_codeclist) {
287    deps += [ "$av_codec_root_dir/services/engine:av_codec_engine_package" ]
288  }
289
290  deps += [ "$av_codec_root_dir/services/media_engine/modules:av_codec_media_engine_modules" ]
291
292  external_deps = [
293    "bounds_checking_function:libsec_static",
294    "c_utils:utils",
295    "drivers_interface_codec:libcodec_proxy_3.0",
296    "graphic_surface:surface",
297    "hilog:libhilog",
298    "ipc:ipc_single",
299    "media_foundation:media_foundation",
300    "samgr:samgr_proxy",
301  ]
302
303  if (av_codec_support_drm) {
304    external_deps += [ "drm_framework:drm_framework" ]
305  }
306
307  innerapi_tags = [
308    "platformsdk",
309    "sasdk",
310  ]
311
312  subsystem_name = "multimedia"
313  part_name = "av_codec"
314}
315