1fa7767c5Sopenharmony_ci# Copyright (C) 2023 Huawei Device Co., Ltd.
2fa7767c5Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License");
3fa7767c5Sopenharmony_ci# you may not use this file except in compliance with the License.
4fa7767c5Sopenharmony_ci# You may obtain a copy of the License at
5fa7767c5Sopenharmony_ci#
6fa7767c5Sopenharmony_ci#     http://www.apache.org/licenses/LICENSE-2.0
7fa7767c5Sopenharmony_ci#
8fa7767c5Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software
9fa7767c5Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS,
10fa7767c5Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11fa7767c5Sopenharmony_ci# See the License for the specific language governing permissions and
12fa7767c5Sopenharmony_ci# limitations under the License.
13fa7767c5Sopenharmony_ci
14fa7767c5Sopenharmony_ciimport("//build/ohos.gni")
15fa7767c5Sopenharmony_ciimport("//foundation/multimedia/media_foundation/config.gni")
16fa7767c5Sopenharmony_ci
17fa7767c5Sopenharmony_ciif (hst_is_standard_sys) {
18fa7767c5Sopenharmony_ci  config("media_foundation_public_config") {
19fa7767c5Sopenharmony_ci    include_dirs = [
20fa7767c5Sopenharmony_ci      "$histreamer_root_dir/interface/kits/c",
21fa7767c5Sopenharmony_ci      "$histreamer_root_dir/interface/inner_api",
22fa7767c5Sopenharmony_ci      "$histreamer_root_dir/interface/inner_api/buffer",
23fa7767c5Sopenharmony_ci      "$histreamer_root_dir/interface/inner_api/common",
24fa7767c5Sopenharmony_ci      "$histreamer_root_dir/interface/inner_api/meta",
25fa7767c5Sopenharmony_ci    ]
26fa7767c5Sopenharmony_ci  }
27fa7767c5Sopenharmony_ci
28fa7767c5Sopenharmony_ci  config("media_foundation_config") {
29fa7767c5Sopenharmony_ci    defines = [
30fa7767c5Sopenharmony_ci      "HST_ANY_WITH_NO_RTTI",
31fa7767c5Sopenharmony_ci      "MEDIA_OHOS",
32fa7767c5Sopenharmony_ci    ]
33fa7767c5Sopenharmony_ci
34fa7767c5Sopenharmony_ci    if (media_foundation_enable_ffrt) {
35fa7767c5Sopenharmony_ci      defines += [ "MEDIA_FOUNDATION_FFRT" ]
36fa7767c5Sopenharmony_ci    }
37fa7767c5Sopenharmony_ci
38fa7767c5Sopenharmony_ci    include_dirs = [
39fa7767c5Sopenharmony_ci      "$histreamer_root_dir/osal/base",
40fa7767c5Sopenharmony_ci      "$histreamer_root_dir/plugin",
41fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/buffer/avbuffer/include",
42fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/buffer/avbuffer_queue/include",
43fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/capi/common",
44fa7767c5Sopenharmony_ci    ]
45fa7767c5Sopenharmony_ci
46fa7767c5Sopenharmony_ci    cflags = [
47fa7767c5Sopenharmony_ci      "-O2",
48fa7767c5Sopenharmony_ci      "-fPIC",
49fa7767c5Sopenharmony_ci      "-Wall",
50fa7767c5Sopenharmony_ci      "-fexceptions",
51fa7767c5Sopenharmony_ci      "-fno-rtti",
52fa7767c5Sopenharmony_ci      "-Wno-unused-but-set-variable",
53fa7767c5Sopenharmony_ci      "-Wno-format",
54fa7767c5Sopenharmony_ci    ]
55fa7767c5Sopenharmony_ci    cflags_cc = cflags
56fa7767c5Sopenharmony_ci  }
57fa7767c5Sopenharmony_ci
58fa7767c5Sopenharmony_ci  ohos_shared_library("media_foundation") {
59fa7767c5Sopenharmony_ci    branch_protector_ret = "pac_ret"
60fa7767c5Sopenharmony_ci    install_enable = true
61fa7767c5Sopenharmony_ci
62fa7767c5Sopenharmony_ci    public_configs = [ ":media_foundation_public_config" ]
63fa7767c5Sopenharmony_ci
64fa7767c5Sopenharmony_ci    configs = [ ":media_foundation_config" ]
65fa7767c5Sopenharmony_ci
66fa7767c5Sopenharmony_ci    defines = [
67fa7767c5Sopenharmony_ci      "HST_ANY_WITH_NO_RTTI",
68fa7767c5Sopenharmony_ci      "MEDIA_OHOS",
69fa7767c5Sopenharmony_ci      "DYNAMIC_PLUGINS",
70fa7767c5Sopenharmony_ci    ]
71fa7767c5Sopenharmony_ci
72fa7767c5Sopenharmony_ci    sanitize = {
73fa7767c5Sopenharmony_ci      ubsan = true
74fa7767c5Sopenharmony_ci      boundary_sanitize = true
75fa7767c5Sopenharmony_ci      cfi = true
76fa7767c5Sopenharmony_ci      cfi_cross_dso = true
77fa7767c5Sopenharmony_ci      debug = false
78fa7767c5Sopenharmony_ci      integer_overflow = true
79fa7767c5Sopenharmony_ci    }
80fa7767c5Sopenharmony_ci
81fa7767c5Sopenharmony_ci    sources = [
82fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/buffer/avbuffer/av_hardware_memory.cpp",
83fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/buffer/avbuffer/av_shared_memory_ext.cpp",
84fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/buffer/avbuffer/av_surface_memory.cpp",
85fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/buffer/avbuffer/av_virtual_memory.cpp",
86fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/buffer/avbuffer/avbuffer.cpp",
87fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/buffer/avbuffer/avbuffer_common.cpp",
88fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/buffer/avbuffer/avbuffer_utils.cpp",
89fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/buffer/avbuffer/avmemory.cpp",
90fa7767c5Sopenharmony_ci    ]
91fa7767c5Sopenharmony_ci
92fa7767c5Sopenharmony_ci    sources += [
93fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/buffer/avbuffer_queue/avbuffer_queue.cpp",
94fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/buffer/avbuffer_queue/avbuffer_queue_consumer.cpp",
95fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/buffer/avbuffer_queue/avbuffer_queue_producer.cpp",
96fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/buffer/avbuffer_queue/avbuffer_queue_producer_proxy.cpp",
97fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/buffer/avbuffer_queue/avbuffer_queue_producer_stub.cpp",
98fa7767c5Sopenharmony_ci    ]
99fa7767c5Sopenharmony_ci
100fa7767c5Sopenharmony_ci    sources += [
101fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/buffer/avsharedmemory/avsharedmemorybase.cpp",
102fa7767c5Sopenharmony_ci    ]
103fa7767c5Sopenharmony_ci
104fa7767c5Sopenharmony_ci    sources += [ "$histreamer_root_dir/src/common/avsharedmemorypool.cpp" ]
105fa7767c5Sopenharmony_ci
106fa7767c5Sopenharmony_ci    sources += [
107fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/meta/any.cpp",
108fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/meta/format.cpp",
109fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/meta/media_source.cpp",
110fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/meta/meta.cpp",
111fa7767c5Sopenharmony_ci    ]
112fa7767c5Sopenharmony_ci
113fa7767c5Sopenharmony_ci    sources += [ "$histreamer_root_dir/src/capi/common/native_mfmagic.cpp" ]
114fa7767c5Sopenharmony_ci
115fa7767c5Sopenharmony_ci    sources += [
116fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/osal/filesystem/file_system.cpp",
117fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/osal/task/task.cpp",
118fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/osal/utils/dump_buffer.cpp",
119fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/osal/utils/steady_clock.cpp",
120fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/osal/utils/util.cpp",
121fa7767c5Sopenharmony_ci    ]
122fa7767c5Sopenharmony_ci
123fa7767c5Sopenharmony_ci    if (media_foundation_enable_ffrt) {
124fa7767c5Sopenharmony_ci      sources += [
125fa7767c5Sopenharmony_ci        "$histreamer_root_dir/src/osal/task/ffrt/condition_variable.cpp",
126fa7767c5Sopenharmony_ci        "$histreamer_root_dir/src/osal/task/ffrt/jobutils.cpp",
127fa7767c5Sopenharmony_ci        "$histreamer_root_dir/src/osal/task/ffrt/task.cpp",
128fa7767c5Sopenharmony_ci      ]
129fa7767c5Sopenharmony_ci    } else {
130fa7767c5Sopenharmony_ci      sources += [
131fa7767c5Sopenharmony_ci        "$histreamer_root_dir/src/osal/task/pthread/autolock.cpp",
132fa7767c5Sopenharmony_ci        "$histreamer_root_dir/src/osal/task/pthread/condition_variable.cpp",
133fa7767c5Sopenharmony_ci        "$histreamer_root_dir/src/osal/task/pthread/jobutils.cpp",
134fa7767c5Sopenharmony_ci        "$histreamer_root_dir/src/osal/task/pthread/mutex.cpp",
135fa7767c5Sopenharmony_ci        "$histreamer_root_dir/src/osal/task/pthread/pipeline_threadpool.cpp",
136fa7767c5Sopenharmony_ci        "$histreamer_root_dir/src/osal/task/pthread/taskInner.cpp",
137fa7767c5Sopenharmony_ci        "$histreamer_root_dir/src/osal/task/pthread/thread.cpp",
138fa7767c5Sopenharmony_ci      ]
139fa7767c5Sopenharmony_ci    }
140fa7767c5Sopenharmony_ci
141fa7767c5Sopenharmony_ci    sources += [
142fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/filter/filter.cpp",
143fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/filter/filter_factory.cpp",
144fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/pipeline/pipeline.cpp",
145fa7767c5Sopenharmony_ci    ]
146fa7767c5Sopenharmony_ci
147fa7767c5Sopenharmony_ci    sources += [
148fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/plugin/cached_plugin_package.cpp",
149fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/plugin/plugin_buffer.cpp",
150fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/plugin/plugin_list.cpp",
151fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/plugin/plugin_manager_v2.cpp",
152fa7767c5Sopenharmony_ci      "$histreamer_root_dir/src/plugin/plugin_package.cpp",
153fa7767c5Sopenharmony_ci    ]
154fa7767c5Sopenharmony_ci
155fa7767c5Sopenharmony_ci    public_deps = []
156fa7767c5Sopenharmony_ci
157fa7767c5Sopenharmony_ci    external_deps = [
158fa7767c5Sopenharmony_ci      "c_utils:utils",
159fa7767c5Sopenharmony_ci      "ffmpeg:libohosffmpeg",
160fa7767c5Sopenharmony_ci      "graphic_2d:libgraphic_utils",
161fa7767c5Sopenharmony_ci      "graphic_surface:sync_fence",
162fa7767c5Sopenharmony_ci      "hilog:libhilog",
163fa7767c5Sopenharmony_ci      "hitrace:hitrace_meter",
164fa7767c5Sopenharmony_ci      "init:libbegetutil",
165fa7767c5Sopenharmony_ci      "ipc:ipc_core",
166fa7767c5Sopenharmony_ci    ]
167fa7767c5Sopenharmony_ci
168fa7767c5Sopenharmony_ci    public_external_deps = [
169fa7767c5Sopenharmony_ci      "bounds_checking_function:libsec_static",
170fa7767c5Sopenharmony_ci      "graphic_surface:surface",
171fa7767c5Sopenharmony_ci    ]
172fa7767c5Sopenharmony_ci
173fa7767c5Sopenharmony_ci    if (media_foundation_enable_ffrt) {
174fa7767c5Sopenharmony_ci      external_deps += [ "ffrt:libffrt" ]
175fa7767c5Sopenharmony_ci    }
176fa7767c5Sopenharmony_ci
177fa7767c5Sopenharmony_ci    innerapi_tags = [
178fa7767c5Sopenharmony_ci      "platformsdk",
179fa7767c5Sopenharmony_ci      "sasdk",
180fa7767c5Sopenharmony_ci    ]
181fa7767c5Sopenharmony_ci
182fa7767c5Sopenharmony_ci    if (target_cpu == "arm64" || is_emulator) {
183fa7767c5Sopenharmony_ci      hst_plugin_path = "\"/system/lib64/media/media_plugins\""
184fa7767c5Sopenharmony_ci    } else {
185fa7767c5Sopenharmony_ci      hst_plugin_path = "\"/system/lib/media/media_plugins\""
186fa7767c5Sopenharmony_ci    }
187fa7767c5Sopenharmony_ci
188fa7767c5Sopenharmony_ci    defines += [
189fa7767c5Sopenharmony_ci      "HST_PLUGIN_PATH=${hst_plugin_path}",
190fa7767c5Sopenharmony_ci      "HST_PLUGIN_FILE_TAIL=\".z.so\"",
191fa7767c5Sopenharmony_ci    ]
192fa7767c5Sopenharmony_ci
193fa7767c5Sopenharmony_ci    subsystem_name = "multimedia"
194fa7767c5Sopenharmony_ci    part_name = "media_foundation"
195fa7767c5Sopenharmony_ci  }
196fa7767c5Sopenharmony_ci} else {
197fa7767c5Sopenharmony_ci  group("media_foundation") {
198fa7767c5Sopenharmony_ci  }
199fa7767c5Sopenharmony_ci}
200