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