• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Example commandline interface tools for the IAMF software.
2load("@rules_cc//cc:cc_library.bzl", "cc_library")
3
4package(default_visibility = [
5    # TODO(b/400697000): Break up visibility for the api directory.
6    "//iamf/api:__subpackages__",
7    "//iamf/cli:__subpackages__",
8])
9
10exports_files(
11    srcs = [
12        "encoder_main.cc",
13        "encoder_main_lib.cc",
14        "encoder_main_lib.h",
15        "iamf_components.h",
16    ],
17)
18
19# keep-sorted start block=yes prefix_order=cc_library,cc_binary newline_separated=yes
20cc_library(
21    name = "audio_element_with_data",
22    hdrs = ["audio_element_with_data.h"],
23    deps = [
24        ":channel_label",
25        "//iamf/obu:audio_element",
26        "//iamf/obu:codec_config",
27        "//iamf/obu:param_definitions",
28        "//iamf/obu:types",
29        "@com_google_absl//absl/container:flat_hash_map",
30    ],
31)
32
33cc_library(
34    name = "audio_frame_decoder",
35    srcs = ["audio_frame_decoder.cc"],
36    hdrs = ["audio_frame_decoder.h"],
37    deps = [
38        ":audio_element_with_data",
39        ":audio_frame_with_data",
40        "//iamf/cli/codec:aac_decoder",
41        "//iamf/cli/codec:decoder_base",
42        "//iamf/cli/codec:flac_decoder",
43        "//iamf/cli/codec:lpcm_decoder",
44        "//iamf/cli/codec:opus_decoder",
45        "//iamf/common/utils:macros",
46        "//iamf/obu:codec_config",
47        "//iamf/obu:parameter_data",
48        "//iamf/obu:types",
49        "@com_google_absl//absl/container:node_hash_map",
50        "@com_google_absl//absl/status",
51        "@com_google_absl//absl/status:statusor",
52        "@com_google_absl//absl/strings",
53    ],
54)
55
56cc_library(
57    name = "audio_frame_with_data",
58    hdrs = ["audio_frame_with_data.h"],
59    deps = [
60        ":audio_element_with_data",
61        "//iamf/obu:audio_frame",
62        "//iamf/obu:parameter_data",
63        "//iamf/obu:types",
64    ],
65)
66
67cc_library(
68    name = "channel_label",
69    srcs = ["channel_label.cc"],
70    hdrs = ["channel_label.h"],
71    deps = [
72        "//iamf/common/utils:macros",
73        "//iamf/common/utils:map_utils",
74        "//iamf/common/utils:validation_utils",
75        "//iamf/obu:audio_element",
76        "//iamf/obu:parameter_data",
77        "@com_google_absl//absl/base:no_destructor",
78        "@com_google_absl//absl/container:flat_hash_map",
79        "@com_google_absl//absl/container:flat_hash_set",
80        "@com_google_absl//absl/log",
81        "@com_google_absl//absl/status",
82        "@com_google_absl//absl/status:statusor",
83        "@com_google_absl//absl/strings",
84        "@com_google_absl//absl/strings:string_view",
85    ],
86)
87
88cc_library(
89    name = "cli_util",
90    srcs = ["cli_util.cc"],
91    hdrs = ["cli_util.h"],
92    deps = [
93        ":audio_element_with_data",
94        "//iamf/common/utils:macros",
95        "//iamf/common/utils:sample_processing_utils",
96        "//iamf/obu:audio_element",
97        "//iamf/obu:codec_config",
98        "//iamf/obu:mix_presentation",
99        "//iamf/obu:param_definitions",
100        "//iamf/obu:types",
101        "@com_google_absl//absl/container:flat_hash_map",
102        "@com_google_absl//absl/container:flat_hash_set",
103        "@com_google_absl//absl/log",
104        "@com_google_absl//absl/status",
105        "@com_google_absl//absl/strings",
106        "@com_google_absl//absl/strings:string_view",
107    ],
108)
109
110cc_library(
111    name = "demixing_module",
112    srcs = ["demixing_module.cc"],
113    hdrs = ["demixing_module.h"],
114    deps = [
115        ":audio_element_with_data",
116        ":audio_frame_decoder",
117        ":audio_frame_with_data",
118        ":channel_label",
119        ":cli_util",
120        "//iamf/common/utils:macros",
121        "//iamf/common/utils:numeric_utils",
122        "//iamf/obu:audio_element",
123        "//iamf/obu:audio_frame",
124        "//iamf/obu:parameter_data",
125        "//iamf/obu:types",
126        "@com_google_absl//absl/container:flat_hash_map",
127        "@com_google_absl//absl/container:flat_hash_set",
128        "@com_google_absl//absl/container:node_hash_map",
129        "@com_google_absl//absl/log",
130        "@com_google_absl//absl/log:check",
131        "@com_google_absl//absl/status",
132        "@com_google_absl//absl/status:statusor",
133        "@com_google_absl//absl/strings",
134    ],
135)
136
137cc_library(
138    name = "encoder_main_lib",
139    srcs = ["encoder_main_lib.cc"],
140    hdrs = ["encoder_main_lib.h"],
141    deps = [
142        ":audio_element_with_data",
143        ":audio_frame_with_data",
144        ":demixing_module",
145        ":iamf_components",
146        ":iamf_encoder",
147        ":obu_sequencer_base",
148        ":parameter_block_partitioner",
149        ":parameter_block_with_data",
150        ":wav_sample_provider",
151        ":wav_writer",
152        "//iamf/cli/proto:temporal_delimiter_cc_proto",
153        "//iamf/cli/proto:test_vector_metadata_cc_proto",
154        "//iamf/cli/proto:user_metadata_cc_proto",
155        "//iamf/common/utils:macros",
156        "//iamf/obu:arbitrary_obu",
157        "//iamf/obu:codec_config",
158        "//iamf/obu:ia_sequence_header",
159        "//iamf/obu:mix_presentation",
160        "//iamf/obu:types",
161        "@com_google_absl//absl/container:flat_hash_map",
162        "@com_google_absl//absl/log",
163        "@com_google_absl//absl/status",
164        "@com_google_absl//absl/strings",
165        "@com_google_protobuf//:protobuf",
166    ],
167)
168
169cc_library(
170    name = "global_timing_module",
171    srcs = ["global_timing_module.cc"],
172    hdrs = ["global_timing_module.h"],
173    deps = [
174        ":audio_element_with_data",
175        ":cli_util",
176        "//iamf/common/utils:macros",
177        "//iamf/common/utils:validation_utils",
178        "//iamf/obu:audio_element",
179        "//iamf/obu:codec_config",
180        "//iamf/obu:param_definitions",
181        "//iamf/obu:types",
182        "@com_google_absl//absl/container:flat_hash_map",
183        "@com_google_absl//absl/container:flat_hash_set",
184        "@com_google_absl//absl/log",
185        "@com_google_absl//absl/memory",
186        "@com_google_absl//absl/status",
187        "@com_google_absl//absl/strings",
188    ],
189)
190
191cc_library(
192    name = "iamf_components",
193    srcs = ["iamf_components.cc"],
194    hdrs = ["iamf_components.h"],
195    deps = [
196        ":loudness_calculator_factory_base",
197        ":obu_sequencer_base",
198        ":obu_sequencer_iamf",
199        ":renderer_factory",
200        "//iamf/cli/proto:mix_presentation_cc_proto",
201        "//iamf/cli/proto:test_vector_metadata_cc_proto",
202        "//iamf/cli/proto:user_metadata_cc_proto",
203        "//iamf/cli/proto_conversion:proto_utils",
204        "@com_google_absl//absl/log",
205        "@com_google_absl//absl/strings",
206    ],
207)
208
209cc_library(
210    name = "iamf_encoder",
211    srcs = ["iamf_encoder.cc"],
212    hdrs = ["iamf_encoder.h"],
213    deps = [
214        ":audio_element_with_data",
215        ":audio_frame_decoder",
216        ":audio_frame_with_data",
217        ":channel_label",
218        ":cli_util",
219        ":demixing_module",
220        ":global_timing_module",
221        ":loudness_calculator_factory_base",
222        ":parameter_block_with_data",
223        ":parameters_manager",
224        ":renderer_factory",
225        ":rendering_mix_presentation_finalizer",
226        "//iamf/cli/proto:encoder_control_metadata_cc_proto",
227        "//iamf/cli/proto:test_vector_metadata_cc_proto",
228        "//iamf/cli/proto:user_metadata_cc_proto",
229        "//iamf/cli/proto_conversion:downmixing_reconstruction_util",
230        "//iamf/cli/proto_conversion/proto_to_obu:arbitrary_obu_generator",
231        "//iamf/cli/proto_conversion/proto_to_obu:audio_element_generator",
232        "//iamf/cli/proto_conversion/proto_to_obu:audio_frame_generator",
233        "//iamf/cli/proto_conversion/proto_to_obu:codec_config_generator",
234        "//iamf/cli/proto_conversion/proto_to_obu:ia_sequence_header_generator",
235        "//iamf/cli/proto_conversion/proto_to_obu:mix_presentation_generator",
236        "//iamf/cli/proto_conversion/proto_to_obu:parameter_block_generator",
237        "//iamf/common/utils:macros",
238        "//iamf/obu:arbitrary_obu",
239        "//iamf/obu:codec_config",
240        "//iamf/obu:ia_sequence_header",
241        "//iamf/obu:mix_presentation",
242        "//iamf/obu:param_definitions",
243        "//iamf/obu:types",
244        "@com_google_absl//absl/base:nullability",
245        "@com_google_absl//absl/container:flat_hash_map",
246        "@com_google_absl//absl/log",
247        "@com_google_absl//absl/log:check",
248        "@com_google_absl//absl/status",
249        "@com_google_absl//absl/strings",
250    ],
251)
252
253cc_library(
254    name = "loudness_calculator_base",
255    srcs = ["loudness_calculator_base.cc"],
256    hdrs = ["loudness_calculator_base.h"],
257    deps = [
258        "//iamf/obu:mix_presentation",
259        "@com_google_absl//absl/status",
260        "@com_google_absl//absl/status:statusor",
261        "@com_google_absl//absl/types:span",
262    ],
263)
264
265cc_library(
266    name = "loudness_calculator_factory_base",
267    srcs = ["loudness_calculator_factory_base.cc"],
268    hdrs = ["loudness_calculator_factory_base.h"],
269    deps = [
270        ":loudness_calculator_base",
271        "//iamf/obu:mix_presentation",
272    ],
273)
274
275cc_library(
276    name = "obu_processor",
277    srcs = ["obu_processor.cc"],
278    hdrs = ["obu_processor.h"],
279    deps = [
280        ":audio_element_with_data",
281        ":audio_frame_decoder",
282        ":audio_frame_with_data",
283        ":cli_util",
284        ":demixing_module",
285        ":global_timing_module",
286        ":obu_with_data_generator",
287        ":parameter_block_with_data",
288        ":parameters_manager",
289        ":profile_filter",
290        ":renderer_factory",
291        ":rendering_mix_presentation_finalizer",
292        ":sample_processor_base",
293        "//iamf/common:read_bit_buffer",
294        "//iamf/common/utils:macros",
295        "//iamf/common/utils:validation_utils",
296        "//iamf/obu:audio_element",
297        "//iamf/obu:audio_frame",
298        "//iamf/obu:codec_config",
299        "//iamf/obu:ia_sequence_header",
300        "//iamf/obu:mix_presentation",
301        "//iamf/obu:obu_header",
302        "//iamf/obu:param_definitions",
303        "//iamf/obu:parameter_block",
304        "//iamf/obu:temporal_delimiter",
305        "//iamf/obu:types",
306        "@com_google_absl//absl/container:flat_hash_map",
307        "@com_google_absl//absl/container:flat_hash_set",
308        "@com_google_absl//absl/log",
309        "@com_google_absl//absl/log:check",
310        "@com_google_absl//absl/memory",
311        "@com_google_absl//absl/status",
312        "@com_google_absl//absl/status:statusor",
313        "@com_google_absl//absl/strings",
314        "@com_google_absl//absl/strings:string_view",
315        "@com_google_absl//absl/types:span",
316    ],
317)
318
319cc_library(
320    name = "obu_sequencer_base",
321    srcs = ["obu_sequencer_base.cc"],
322    hdrs = ["obu_sequencer_base.h"],
323    deps = [
324        ":audio_element_with_data",
325        ":audio_frame_with_data",
326        ":cli_util",
327        ":parameter_block_with_data",
328        ":profile_filter",
329        ":temporal_unit_view",
330        "//iamf/common:leb_generator",
331        "//iamf/common:write_bit_buffer",
332        "//iamf/common/utils:macros",
333        "//iamf/obu:arbitrary_obu",
334        "//iamf/obu:audio_element",
335        "//iamf/obu:audio_frame",
336        "//iamf/obu:codec_config",
337        "//iamf/obu:ia_sequence_header",
338        "//iamf/obu:mix_presentation",
339        "//iamf/obu:obu_header",
340        "//iamf/obu:parameter_block",
341        "//iamf/obu:temporal_delimiter",
342        "//iamf/obu:types",
343        "@com_google_absl//absl/container:btree",
344        "@com_google_absl//absl/container:flat_hash_map",
345        "@com_google_absl//absl/container:flat_hash_set",
346        "@com_google_absl//absl/log",
347        "@com_google_absl//absl/log:check",
348        "@com_google_absl//absl/status",
349        "@com_google_absl//absl/types:span",
350    ],
351)
352
353cc_library(
354    name = "obu_sequencer_iamf",
355    srcs = ["obu_sequencer_iamf.cc"],
356    hdrs = ["obu_sequencer_iamf.h"],
357    deps = [
358        ":obu_sequencer_base",
359        "//iamf/common:leb_generator",
360        "//iamf/common:write_bit_buffer",
361        "//iamf/common/utils:macros",
362        "@com_google_absl//absl/log",
363        "@com_google_absl//absl/log:check",
364        "@com_google_absl//absl/status",
365        "@com_google_absl//absl/types:span",
366    ],
367)
368
369cc_library(
370    name = "obu_with_data_generator",
371    srcs = ["obu_with_data_generator.cc"],
372    hdrs = ["obu_with_data_generator.h"],
373    deps = [
374        ":audio_element_with_data",
375        ":audio_frame_with_data",
376        ":channel_label",
377        ":cli_util",
378        ":global_timing_module",
379        ":parameter_block_with_data",
380        ":parameters_manager",
381        "//iamf/common/utils:macros",
382        "//iamf/common/utils:numeric_utils",
383        "//iamf/common/utils:validation_utils",
384        "//iamf/obu:audio_element",
385        "//iamf/obu:audio_frame",
386        "//iamf/obu:codec_config",
387        "//iamf/obu:param_definitions",
388        "//iamf/obu:parameter_block",
389        "//iamf/obu:parameter_data",
390        "//iamf/obu:types",
391        "@com_google_absl//absl/container:flat_hash_map",
392        "@com_google_absl//absl/log",
393        "@com_google_absl//absl/log:check",
394        "@com_google_absl//absl/status",
395        "@com_google_absl//absl/status:statusor",
396        "@com_google_absl//absl/strings",
397    ],
398)
399
400cc_library(
401    name = "parameter_block_partitioner",
402    srcs = ["parameter_block_partitioner.cc"],
403    hdrs = ["parameter_block_partitioner.h"],
404    deps = [
405        ":cli_util",
406        "//iamf/cli/proto:codec_config_cc_proto",
407        "//iamf/cli/proto:ia_sequence_header_cc_proto",
408        "//iamf/cli/proto:obu_header_cc_proto",
409        "//iamf/cli/proto:parameter_block_cc_proto",
410        "//iamf/cli/proto:parameter_data_cc_proto",
411        "//iamf/common/utils:macros",
412        "//iamf/common/utils:numeric_utils",
413        "//iamf/common/utils:obu_util",
414        "//iamf/obu:types",
415        "@com_google_absl//absl/log",
416        "@com_google_absl//absl/status",
417        "@com_google_absl//absl/strings",
418    ],
419)
420
421cc_library(
422    name = "parameter_block_with_data",
423    hdrs = ["parameter_block_with_data.h"],
424    deps = [
425        "//iamf/obu:parameter_block",
426        "//iamf/obu:types",
427    ],
428)
429
430cc_library(
431    name = "parameters_manager",
432    srcs = ["parameters_manager.cc"],
433    hdrs = ["parameters_manager.h"],
434    deps = [
435        ":audio_element_with_data",
436        ":cli_util",
437        ":parameter_block_with_data",
438        "//iamf/common/utils:macros",
439        "//iamf/obu:param_definitions",
440        "//iamf/obu:parameter_block",
441        "//iamf/obu:parameter_data",
442        "//iamf/obu:types",
443        "@com_google_absl//absl/container:flat_hash_map",
444        "@com_google_absl//absl/log",
445        "@com_google_absl//absl/log:check",
446        "@com_google_absl//absl/status",
447        "@com_google_absl//absl/strings",
448    ],
449)
450
451cc_library(
452    name = "profile_filter",
453    srcs = ["profile_filter.cc"],
454    hdrs = ["profile_filter.h"],
455    deps = [
456        ":audio_element_with_data",
457        "//iamf/common/utils:macros",
458        "//iamf/common/utils:validation_utils",
459        "//iamf/obu:audio_element",
460        "//iamf/obu:ia_sequence_header",
461        "//iamf/obu:mix_presentation",
462        "@com_google_absl//absl/container:flat_hash_map",
463        "@com_google_absl//absl/container:flat_hash_set",
464        "@com_google_absl//absl/status",
465        "@com_google_absl//absl/strings",
466        "@com_google_absl//absl/strings:string_view",
467    ],
468)
469
470cc_library(
471    name = "recon_gain_generator",
472    srcs = ["recon_gain_generator.cc"],
473    hdrs = ["recon_gain_generator.h"],
474    deps = [
475        ":channel_label",
476        ":demixing_module",
477        "//iamf/common/utils:macros",
478        "//iamf/common/utils:map_utils",
479        "//iamf/obu:types",
480        "@com_google_absl//absl/base:no_destructor",
481        "@com_google_absl//absl/container:flat_hash_map",
482        "@com_google_absl//absl/log",
483        "@com_google_absl//absl/status",
484    ],
485)
486
487cc_library(
488    name = "renderer_factory",
489    srcs = ["renderer_factory.cc"],
490    hdrs = ["renderer_factory.h"],
491    deps = [
492        ":audio_element_with_data",
493        "//iamf/cli/renderer:audio_element_renderer_ambisonics_to_channel",
494        "//iamf/cli/renderer:audio_element_renderer_base",
495        "//iamf/cli/renderer:audio_element_renderer_channel_to_channel",
496        "//iamf/cli/renderer:audio_element_renderer_passthrough",
497        "//iamf/obu:audio_element",
498        "//iamf/obu:mix_presentation",
499        "//iamf/obu:types",
500        "@com_google_absl//absl/log",
501    ],
502)
503
504cc_library(
505    name = "rendering_mix_presentation_finalizer",
506    srcs = ["rendering_mix_presentation_finalizer.cc"],
507    hdrs = ["rendering_mix_presentation_finalizer.h"],
508    deps = [
509        ":audio_element_with_data",
510        ":cli_util",
511        ":demixing_module",
512        ":loudness_calculator_base",
513        ":loudness_calculator_factory_base",
514        ":parameter_block_with_data",
515        ":renderer_factory",
516        ":sample_processor_base",
517        "//iamf/cli/renderer:audio_element_renderer_base",
518        "//iamf/common/utils:macros",
519        "//iamf/common/utils:numeric_utils",
520        "//iamf/common/utils:sample_processing_utils",
521        "//iamf/common/utils:validation_utils",
522        "//iamf/obu:audio_element",
523        "//iamf/obu:codec_config",
524        "//iamf/obu:mix_presentation",
525        "//iamf/obu:param_definitions",
526        "//iamf/obu:parameter_block",
527        "//iamf/obu:types",
528        "@com_google_absl//absl/base:nullability",
529        "@com_google_absl//absl/container:flat_hash_map",
530        "@com_google_absl//absl/container:flat_hash_set",
531        "@com_google_absl//absl/functional:any_invocable",
532        "@com_google_absl//absl/log",
533        "@com_google_absl//absl/log:check",
534        "@com_google_absl//absl/status",
535        "@com_google_absl//absl/status:statusor",
536        "@com_google_absl//absl/strings",
537        "@com_google_absl//absl/time",
538        "@com_google_absl//absl/types:span",
539    ],
540)
541
542cc_library(
543    name = "sample_processor_base",
544    srcs = ["sample_processor_base.cc"],
545    hdrs = ["sample_processor_base.h"],
546    deps = [
547        "@com_google_absl//absl/status",
548        "@com_google_absl//absl/strings",
549        "@com_google_absl//absl/types:span",
550    ],
551)
552
553cc_library(
554    name = "temporal_unit_view",
555    srcs = ["temporal_unit_view.cc"],
556    hdrs = ["temporal_unit_view.h"],
557    deps = [
558        ":audio_frame_with_data",
559        ":parameter_block_with_data",
560        "//iamf/common/utils:macros",
561        "//iamf/common/utils:validation_utils",
562        "//iamf/obu:arbitrary_obu",
563        "//iamf/obu:types",
564        "@com_google_absl//absl/algorithm:container",
565        "@com_google_absl//absl/container:flat_hash_set",
566        "@com_google_absl//absl/log",
567        "@com_google_absl//absl/log:check",
568        "@com_google_absl//absl/status",
569        "@com_google_absl//absl/status:statusor",
570        "@com_google_absl//absl/strings:string_view",
571        "@com_google_absl//absl/types:span",
572    ],
573)
574
575cc_library(
576    name = "wav_reader",
577    srcs = ["wav_reader.cc"],
578    hdrs = ["wav_reader.h"],
579    deps = [
580        "@com_google_absl//absl/log",
581        "@com_google_absl//absl/status",
582        "@com_google_absl//absl/status:statusor",
583        "@com_google_absl//absl/strings",
584        "@com_google_audio_to_tactile//:dsp",
585    ],
586)
587
588cc_library(
589    name = "wav_sample_provider",
590    srcs = ["wav_sample_provider.cc"],
591    hdrs = ["wav_sample_provider.h"],
592    deps = [
593        ":audio_element_with_data",
594        ":channel_label",
595        ":demixing_module",
596        ":wav_reader",
597        "//iamf/cli/proto:audio_frame_cc_proto",
598        "//iamf/cli/proto_conversion:channel_label_utils",
599        "//iamf/common/utils:macros",
600        "//iamf/common/utils:numeric_utils",
601        "//iamf/common/utils:validation_utils",
602        "//iamf/obu:codec_config",
603        "//iamf/obu:types",
604        "@com_google_absl//absl/container:flat_hash_map",
605        "@com_google_absl//absl/log",
606        "@com_google_absl//absl/status",
607        "@com_google_absl//absl/status:statusor",
608        "@com_google_absl//absl/strings",
609        "@com_google_protobuf//:protobuf",
610    ],
611)
612
613cc_library(
614    name = "wav_writer",
615    srcs = ["wav_writer.cc"],
616    hdrs = ["wav_writer.h"],
617    deps = [
618        ":sample_processor_base",
619        "//iamf/common/utils:macros",
620        "//iamf/common/utils:sample_processing_utils",
621        "@com_google_absl//absl/base:nullability",
622        "@com_google_absl//absl/functional:any_invocable",
623        "@com_google_absl//absl/log",
624        "@com_google_absl//absl/log:check",
625        "@com_google_absl//absl/memory",
626        "@com_google_absl//absl/status",
627        "@com_google_absl//absl/strings",
628        "@com_google_absl//absl/types:span",
629        "@com_google_audio_to_tactile//:dsp",
630    ],
631)
632
633cc_binary(
634    name = "encoder_main",
635    srcs = [
636        "encoder_main.cc",
637    ],
638    data = [
639        "//iamf/cli/testdata:input_wav_files",
640    ],
641    deps = [
642        ":encoder_main_lib",
643        "//iamf/cli/adm_to_user_metadata/app:adm_to_user_metadata_main_lib",
644        "//iamf/cli/proto:test_vector_metadata_cc_proto",
645        "//iamf/cli/proto:user_metadata_cc_proto",
646        "//iamf/obu:ia_sequence_header",
647        "@com_google_absl//absl/flags:flag",
648        "@com_google_absl//absl/flags:parse",
649        "@com_google_absl//absl/flags:usage",
650        "@com_google_absl//absl/log",
651        "@com_google_absl//absl/log:flags",
652        "@com_google_absl//absl/status",
653        "@com_google_absl//absl/strings",
654        "@com_google_protobuf//:protobuf",
655    ],
656)
657
658# keep-sorted end
659