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/services/dfx/include", 27 "$av_codec_root_dir/services/include", 28 "$av_codec_root_dir/services/services/codec/client", 29 "$av_codec_root_dir/services/services/codec/ipc", 30 "$av_codec_root_dir/services/services/codeclist/client", 31 "$av_codec_root_dir/services/services/codeclist/ipc", 32 "$av_codec_root_dir/services/services/common", 33 "$av_codec_root_dir/services/services/demuxer/client", 34 "$av_codec_root_dir/services/services/demuxer/ipc", 35 "$av_codec_root_dir/services/services/muxer/client", 36 "$av_codec_root_dir/services/services/muxer/ipc", 37 "$av_codec_root_dir/services/services/sa_avcodec/client", 38 "$av_codec_root_dir/services/services/sa_avcodec/ipc", 39 "$av_codec_root_dir/services/services/source/client", 40 "$av_codec_root_dir/services/services/source/ipc", 41 "$av_codec_root_dir/services/engine/base/include", 42 "$av_codec_root_dir/services/services/codec/server", 43 "$av_codec_root_dir/services/engine/codec/include/audio", 44 "$av_codec_root_dir/services/engine/codeclist", 45 "$av_codec_root_dir/services/engine/common/include", 46 "$av_codec_root_dir/services/utils/include", 47 "$av_codec_root_dir/../../graphic/graphic_2d/frameworks/surface/include", 48 ] 49} 50 51config("av_codec_client_local_config") { 52 include_dirs = [ 53 "$av_codec_root_dir/services/services/factory", 54 "$av_codec_root_dir/services/engine/factory", 55 56 "$av_codec_root_dir/services/engine/muxer", 57 "$av_codec_root_dir/services/engine/plugin/common", 58 "$av_codec_root_dir/services/engine/plugin/core", 59 "$av_codec_root_dir/services/engine/plugin/interface", 60 "$av_codec_root_dir/services/engine/source/hst_releated", 61 ] 62} 63 64config("av_codec_client_ipc_config") { 65 include_dirs = [ 66 "$av_codec_root_dir/services/services/codec/client", 67 "$av_codec_root_dir/services/services/codec/ipc", 68 "$av_codec_root_dir/services/services/codeclist/client", 69 "$av_codec_root_dir/services/services/codeclist/ipc", 70 "$av_codec_root_dir/services/services/common", 71 "$av_codec_root_dir/services/services/demuxer/client", 72 "$av_codec_root_dir/services/services/demuxer/ipc", 73 "$av_codec_root_dir/services/services/muxer/client", 74 "$av_codec_root_dir/services/services/muxer/ipc", 75 "$av_codec_root_dir/services/services/sa_avcodec/client", 76 "$av_codec_root_dir/services/services/sa_avcodec/ipc", 77 "$av_codec_root_dir/services/services/source/client", 78 "$av_codec_root_dir/services/services/source/ipc", 79 ] 80} 81 82config("av_codec_source") { 83 include_dirs = [ 84 "$av_codec_root_dir/services/engine/source", 85 "$av_codec_root_dir/services/engine/source/hst_releated", 86 "$av_codec_root_dir/services/engine/base/include", 87 "//third_party/ffmpeg", 88 ] 89 90 if (target_cpu == "arm64") { 91 av_codec_plugin_path = "\"/system/lib64/media/av_codec_plugins\"" 92 } else { 93 av_codec_plugin_path = "\"/system/lib/media/av_codec_plugins\"" 94 } 95 96 if (target_cpu == "arm64") { 97 oh_file_plugin_path = "\"/system/lib64/media/histreamer_plugins\"" 98 } else { 99 oh_file_plugin_path = "\"/system/lib/media/histreamer_plugins\"" 100 } 101 102 defines = [] 103 defines += av_codec_defines 104 defines += [ 105 "AV_CODEC_PLUGIN_PATH=${av_codec_plugin_path}", 106 "AV_CODEC_PLUGIN_FILE_TAIL=\".z.so\"", 107 "OH_FILE_PLUGIN_PATH=${oh_file_plugin_path}", 108 ] 109} 110 111config("av_codec_demuxer") { 112 include_dirs = [ 113 "$av_codec_root_dir/services/engine/plugin/common", 114 "$av_codec_root_dir/services/engine/plugin/core", 115 "$av_codec_root_dir/services/engine/plugin/interface", 116 "$av_codec_root_dir/services/engine/source/hst_releated", 117 "//third_party/ffmpeg", 118 ] 119} 120 121config("av_codec_client_public_config") { 122 include_dirs = [ 123 "./", 124 "$av_codec_root_dir/frameworks/native/avcodec", 125 "$av_codec_root_dir/frameworks/native/avcodeclist", 126 "$av_codec_root_dir/frameworks/native/avdemuxer", 127 "$av_codec_root_dir/frameworks/native/avmuxer", 128 "$av_codec_root_dir/frameworks/native/avsource", 129 "$av_codec_root_dir/interfaces/kits/c", 130 "$av_codec_root_dir/services/include", 131 "$av_codec_root_dir/services/dfx/include", 132 "$av_codec_root_dir/services/utils/include", 133 ] 134 135 cflags = [ 136 "-fno-exceptions", 137 "-Wall", 138 "-fno-common", 139 "-fstack-protector-strong", 140 "-Wshadow", 141 "-FPIC", 142 "-FS", 143 "-O2", 144 "-D_FORTIFY_SOURCE=2", 145 "-Wformat=2", 146 "-Wdate-time", 147 ] 148 149 cflags_cc = [ 150 "-std=c++17", 151 "-fno-rtti", 152 ] 153 154 if (target_cpu == "arm") { 155 cflags += [ "-DBINDER_IPC_32BIT" ] 156 } 157 158 defines = [] 159 defines += av_codec_defines 160 161 if (target_cpu == "arm64") { 162 av_codec_plugin_path = "\"/system/lib64/media/av_codec_plugins\"" 163 } else { 164 av_codec_plugin_path = "\"/system/lib/media/av_codec_plugins\"" 165 } 166 167 defines += [ 168 "AV_CODEC_PLUGIN_PATH=${av_codec_plugin_path}", 169 "AV_CODEC_PLUGIN_FILE_TAIL=\".z.so\"", 170 ] 171 172 if (av_codec_client_support_codec) { 173 defines += [ "CLIENT_SUPPORT_CODEC" ] 174 } else { 175 defines += [ "CLIENT_UNSUPPORT_CODEC" ] 176 } 177} 178 179config("av_codec_client_codec_config") { 180 include_dirs = [ 181 "$av_codec_root_dir/interfaces/inner_api/native", 182 "$av_codec_root_dir/interfaces/kits/c", 183 "$av_codec_root_dir/services/dfx/include", 184 "$av_codec_root_dir/services/utils/include/", 185 "$av_codec_root_dir/services/engine/base/include/", 186 "$av_codec_root_dir/services/engine/codec/include/audio/", 187 "$av_codec_root_dir/services/engine/common/include/", 188 "//third_party/ffmpeg", 189 ] 190} 191 192ohos_shared_library("av_codec_client") { 193 install_enable = true 194 public_configs = [ 195 ":av_codec_client_local_config", 196 ":av_codec_client_ipc_config", 197 ":av_codec_client_public_config", 198 ":av_codec_packege_include", 199 ":av_codec_client_codec_config", 200 ] 201 202 sanitize = { 203 cfi = true 204 cfi_cross_dso = true 205 debug = false 206 } 207 208 configs = [ ":av_codec_packege_include" ] 209 210 sources = [ 211 "$av_codec_root_dir/frameworks/native/common/avcodec_errors.cpp", 212 "$av_codec_root_dir/services/services/common/avsharedmemory_ipc.cpp", 213 "$av_codec_root_dir/services/services/sa_avcodec/client/avcodec_client.cpp", 214 "$av_codec_root_dir/services/services/sa_avcodec/ipc/avcodec_listener_stub.cpp", 215 "$av_codec_root_dir/services/services/sa_avcodec/ipc/avcodec_parcel.cpp", 216 "$av_codec_root_dir/services/services/sa_avcodec/ipc/avcodec_service_proxy.cpp", 217 ] 218 if (av_codec_support_codec) { 219 sources += [ 220 "$av_codec_root_dir/frameworks/native/avcodec/avcodec_audio_decoder_impl.cpp", 221 "$av_codec_root_dir/frameworks/native/avcodec/avcodec_audio_encoder_impl.cpp", 222 "$av_codec_root_dir/frameworks/native/avcodec/avcodec_video_decoder_impl.cpp", 223 "$av_codec_root_dir/frameworks/native/avcodec/avcodec_video_encoder_impl.cpp", 224 "$av_codec_root_dir/services/services/codec/client/codec_client.cpp", 225 "$av_codec_root_dir/services/services/codec/ipc/codec_listener_stub.cpp", 226 "$av_codec_root_dir/services/services/codec/ipc/codec_service_proxy.cpp", 227 ] 228 } 229 if (av_codec_support_codeclist) { 230 sources += [ 231 "$av_codec_root_dir/frameworks/native/avcodeclist/avcodec_info.cpp", 232 "$av_codec_root_dir/frameworks/native/avcodeclist/avcodeclist_impl.cpp", 233 "$av_codec_root_dir/services/services/codeclist/client/codeclist_client.cpp", 234 "$av_codec_root_dir/services/services/codeclist/ipc/codeclist_service_proxy.cpp", 235 "$av_codec_root_dir/services/services/sa_avcodec/ipc/codeclist_parcel.cpp", 236 ] 237 } 238 if (av_codec_client_support_codec) { 239 sources += [ 240 "$av_codec_root_dir/services/engine/codeclist/audio_codeclist_info.cpp", 241 "$av_codec_root_dir/services/engine/codeclist/codec_ability_singleton.cpp", 242 "$av_codec_root_dir/services/engine/codeclist/codeclist_builder.cpp", 243 "$av_codec_root_dir/services/engine/codeclist/codeclist_core.cpp", 244 "$av_codec_root_dir/services/services/codec/server/codec_factory.cpp", 245 "$av_codec_root_dir/services/services/codec/server/codec_server.cpp", 246 ] 247 } 248 if (av_codec_support_demuxer) { 249 public_configs += [ ":av_codec_demuxer" ] 250 sources += [ 251 "$av_codec_root_dir/frameworks/native/avdemuxer/avdemuxer_impl.cpp", 252 "$av_codec_root_dir/services/engine/demuxer/demuxer_engine_impl.cpp", 253 "$av_codec_root_dir/services/engine/plugin/core/demuxer.cpp", 254 "$av_codec_root_dir/services/engine/plugin/core/demuxer_factory.cpp", 255 ] 256 } 257 if (av_codec_support_source) { 258 public_configs += [ ":av_codec_source" ] 259 sources += [ 260 "$av_codec_root_dir/frameworks/native/avsource/avsource_impl.cpp", 261 "$av_codec_root_dir/services/engine/source/hst_releated/media_source.cpp", 262 "$av_codec_root_dir/services/engine/source/hst_releated/plugin_buffer.cpp", 263 "$av_codec_root_dir/services/engine/source/source.cpp", 264 "$av_codec_root_dir/services/engine/source/source_engine_impl.cpp", 265 ] 266 } 267 if (av_codec_support_muxer) { 268 sources += [ 269 "$av_codec_root_dir/frameworks/native/avmuxer/avmuxer_impl.cpp", 270 "$av_codec_root_dir/services/engine/muxer/muxer_buffer_pool.cpp", 271 "$av_codec_root_dir/services/engine/muxer/muxer_engine_impl.cpp", 272 "$av_codec_root_dir/services/engine/plugin/core/muxer.cpp", 273 "$av_codec_root_dir/services/engine/plugin/core/muxer_factory.cpp", 274 ] 275 } 276 if (av_codec_support_demuxer || av_codec_support_muxer) { 277 sources += 278 [ "$av_codec_root_dir/services/engine/plugin/core/plugin_loader.cpp" ] 279 } 280 deps = [ 281 "$av_codec_root_dir/services/dfx:av_codec_service_dfx", 282 "$av_codec_root_dir/services/utils:av_codec_format", 283 "//third_party/bounds_checking_function:libsec_static", 284 ] 285 286 if (av_codec_client_support_codec) { 287 deps += [ "$av_codec_root_dir/services/engine/codec/audio:av_codec_audio_ffmpeg_codec" ] 288 } 289 290 if (av_codec_support_codeclist) { 291 deps += [ "$av_codec_root_dir/services/engine:av_codec_engine_package" ] 292 } 293 294 external_deps = [ 295 "c_utils:utils", 296 "graphic_2d:surface", 297 "hilog:libhilog", 298 "ipc:ipc_single", 299 "samgr:samgr_proxy", 300 ] 301 302 subsystem_name = "multimedia" 303 part_name = "av_codec" 304} 305