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/engine/codec/include/audio", 45 "$av_codec_root_dir/services/engine/codeclist", 46 "$av_codec_root_dir/services/engine/common/include", 47 "$av_codec_root_dir/services/utils/include", 48 "$av_codec_root_dir/../../graphic/graphic_surface/surface/include", 49 "$media_foundation_root_dir/interface/inner_api", 50 "$media_foundation_root_dir/interface/kits/c", 51 ] 52} 53 54config("av_codec_client_local_config") { 55 include_dirs = [ 56 "$av_codec_root_dir/services/services/factory", 57 "$av_codec_root_dir/services/engine/factory", 58 59 "$av_codec_root_dir/services/media_engine/modules/muxer", 60 "$av_codec_root_dir/services/engine/plugin/common", 61 "$av_codec_root_dir/services/engine/plugin/core", 62 "$av_codec_root_dir/services/engine/plugin/interface", 63 "$av_codec_root_dir/services/engine/source/hst_releated", 64 "$av_codec_root_dir/services/media_engine/modules", 65 "$media_foundation_root_dir/interface/inner_api", 66 ] 67} 68 69config("av_codec_client_ipc_config") { 70 include_dirs = [ 71 "$av_codec_root_dir/services/services/codec/client", 72 "$av_codec_root_dir/services/services/codec/ipc", 73 "$av_codec_root_dir/services/services/codeclist/client", 74 "$av_codec_root_dir/services/services/codeclist/ipc", 75 "$av_codec_root_dir/services/services/common", 76 "$av_codec_root_dir/services/services/demuxer/client", 77 "$av_codec_root_dir/services/services/demuxer/ipc", 78 "$av_codec_root_dir/services/services/muxer/client", 79 "$av_codec_root_dir/services/services/muxer/ipc", 80 "$av_codec_root_dir/services/services/sa_avcodec/client", 81 "$av_codec_root_dir/services/services/sa_avcodec/ipc", 82 "$av_codec_root_dir/services/services/source/client", 83 "$av_codec_root_dir/services/services/source/ipc", 84 ] 85} 86 87config("av_codec_client_public_config") { 88 include_dirs = [ 89 "./", 90 "$av_codec_root_dir/frameworks/native/avcodec", 91 "$av_codec_root_dir/frameworks/native/avcodeclist", 92 "$av_codec_root_dir/frameworks/native/avdemuxer", 93 "$av_codec_root_dir/frameworks/native/avmuxer", 94 "$av_codec_root_dir/frameworks/native/avsource", 95 "$av_codec_root_dir/interfaces/kits/c", 96 "$av_codec_root_dir/services/include", 97 "$av_codec_root_dir/services/dfx/include", 98 "$av_codec_root_dir/services/utils/include", 99 ] 100 101 defines = [] 102 defines += av_codec_defines 103 104 if (target_cpu == "arm64") { 105 av_codec_plugin_path = "\"/system/lib64/media/av_codec_plugins\"" 106 } else { 107 av_codec_plugin_path = "\"/system/lib/media/av_codec_plugins\"" 108 } 109 110 defines += [ 111 "AV_CODEC_PLUGIN_PATH=${av_codec_plugin_path}", 112 "AV_CODEC_PLUGIN_FILE_TAIL=\".z.so\"", 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/utils/include/", 132 "$av_codec_root_dir/services/engine/base/include/", 133 "$av_codec_root_dir/services/engine/codec/include/audio/", 134 "$av_codec_root_dir/services/engine/common/include/", 135 "$av_codec_root_dir/services/media_engine/modules/media_codec/", 136 "//third_party/ffmpeg", 137 ] 138} 139 140config("av_codec_client_compile_config") { 141 cflags = [ 142 "-fno-exceptions", 143 "-Wall", 144 "-fno-common", 145 "-fstack-protector-strong", 146 "-Wshadow", 147 "-FPIC", 148 "-FS", 149 "-O2", 150 "-D_FORTIFY_SOURCE=2", 151 "-Wformat=2", 152 "-Wdate-time", 153 ] 154 155 cflags_cc = [ 156 "-std=c++17", 157 "-fno-rtti", 158 ] 159 160 if (target_cpu == "arm") { 161 cflags += [ "-DBINDER_IPC_32BIT" ] 162 } 163} 164 165config("av_codec_client_drm_config") { 166 include_dirs = [ "$drm_framework_root_dir/services/drm_service/ipc" ] 167} 168 169ohos_shared_library("av_codec_client") { 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 sanitize = { 181 boundary_sanitize = true 182 cfi = true 183 cfi_cross_dso = true 184 integer_overflow = true 185 ubsan = true 186 debug = false 187 blocklist = "$av_codec_root_dir/cfi_blocklist.txt" 188 } 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/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/engine/codeclist/audio_codeclist_info.cpp", 229 "$av_codec_root_dir/services/engine/codeclist/codec_ability_singleton.cpp", 230 "$av_codec_root_dir/services/engine/codeclist/codeclist_builder.cpp", 231 "$av_codec_root_dir/services/engine/codeclist/codeclist_core.cpp", 232 "$av_codec_root_dir/services/services/codec/server/codec_drm_decrypt.cpp", 233 "$av_codec_root_dir/services/services/codec/server/codec_factory.cpp", 234 "$av_codec_root_dir/services/services/codec/server/codec_server.cpp", 235 ] 236 } 237 if (av_codec_support_demuxer) { 238 include_dirs = [ 239 "$av_codec_root_dir/services/media_engine/modules", 240 "$av_codec_root_dir/services/media_engine/plugins", 241 ] 242 243 if (target_cpu == "arm64") { 244 av_codec_plugin_path = "\"/system/lib64/media/av_codec_plugins\"" 245 } else { 246 av_codec_plugin_path = "\"/system/lib/media/av_codec_plugins\"" 247 } 248 249 if (target_cpu == "arm64") { 250 oh_file_plugin_path = "\"/system/lib64/media/histreamer_plugins\"" 251 } else { 252 oh_file_plugin_path = "\"/system/lib/media/histreamer_plugins\"" 253 } 254 255 defines = [] 256 defines += av_codec_defines 257 defines += [ 258 "AV_CODEC_PLUGIN_PATH=${av_codec_plugin_path}", 259 "AV_CODEC_PLUGIN_FILE_TAIL=\".z.so\"", 260 "OH_FILE_PLUGIN_PATH=${oh_file_plugin_path}", 261 ] 262 sources += [ 263 "$av_codec_root_dir/frameworks/native/avdemuxer/avdemuxer_impl.cpp", 264 "$av_codec_root_dir/frameworks/native/avsource/avsource_impl.cpp", 265 ] 266 } 267 if (av_codec_support_muxer) { 268 sources += 269 [ "$av_codec_root_dir/frameworks/native/avmuxer/avmuxer_impl.cpp" ] 270 } 271 if (av_codec_support_muxer) { 272 sources += 273 [ "$av_codec_root_dir/services/engine/plugin/core/plugin_loader.cpp" ] 274 } 275 deps = [ 276 "$av_codec_root_dir/services/dfx:av_codec_service_dfx", 277 "$av_codec_root_dir/services/media_engine/modules:av_codec_media_engine_modules", 278 "//third_party/bounds_checking_function:libsec_static", 279 ] 280 281 if (av_codec_client_support_codec) { 282 deps += [ "$av_codec_root_dir/services/engine/codec/audio:av_codec_audio_ffmpeg_codec" ] 283 } 284 285 if (av_codec_support_codeclist) { 286 deps += [ "$av_codec_root_dir/services/engine:av_codec_engine_package" ] 287 } 288 289 deps += [ "$av_codec_root_dir/services/media_engine/modules:av_codec_media_engine_modules" ] 290 291 external_deps = [ 292 "c_utils:utils", 293 "graphic_surface:surface", 294 "hilog:libhilog", 295 "ipc:ipc_single", 296 "media_foundation:media_foundation", 297 "samgr:samgr_proxy", 298 ] 299 300 if (av_codec_support_drm) { 301 external_deps += [ "drm_framework:drm_framework" ] 302 } 303 304 innerapi_tags = [ 305 "platformsdk", 306 "sasdk", 307 ] 308 309 subsystem_name = "multimedia" 310 part_name = "av_codec" 311} 312