blob: 5d5b6d197460b4a71759fcfc7c2f627eff56b3c3 [file] [log] [blame]
/*
* Copyright (c) 2023, Alliance for Open Media. All rights reserved
*
* This source code is subject to the terms of the BSD 3-Clause Clear License
* and the Alliance for Open Media Patent License 1.0. If the BSD 3-Clause Clear
* License was not distributed with this source code in the LICENSE file, you
* can obtain it at www.aomedia.org/license/software-license/bsd-3-c-c. If the
* Alliance for Open Media Patent License 1.0 was not distributed with this
* source code in the PATENTS file, you can obtain it at
* www.aomedia.org/license/patent.
*/
#ifndef CLI_IAMF_COMPONENTS_H_
#define CLI_IAMF_COMPONENTS_H_
#include <memory>
#include <string>
#include <vector>
#include "iamf/cli/loudness_calculator_factory_base.h"
#include "iamf/cli/obu_sequencer_base.h"
#include "iamf/cli/proto/mix_presentation.pb.h"
#include "iamf/cli/proto/user_metadata.pb.h"
#include "iamf/cli/renderer_factory.h"
namespace iamf_tools {
/*!\brief Creates an instance of `RendererFactoryBase`.
*
* This is useful for binding different kinds of renderer factories in an IAMF
* Encoder.
*
* \return Unique pointer to the created renderer factory
*/
std::unique_ptr<RendererFactoryBase> CreateRendererFactory();
/*!\brief Creates an instance of `LoudnessCalculatorFactoryBase`.
*
* This is useful for binding different kinds of loudness calculator factories
* in an IAMF Encoder.
*
* \return Unique pointer to the created loudness calculator factory.
*/
std::unique_ptr<LoudnessCalculatorFactoryBase>
CreateLoudnessCalculatorFactory();
/*!\brief Creates instances of `ObuSequencerBase`.
*
* This is useful for binding different kinds of sequencers in an IAMF Encoder.
*
* \param user_metadata Input user metadata.
* \param output_iamf_directory Directory to output IAMF files to.
* \param include_temporal_delimiters Whether the serialized data should
* include temporal delimiters.
* \return Vector of unique pointers to the created OBU sequencers.
*/
std::vector<std::unique_ptr<ObuSequencerBase>> CreateObuSequencers(
const iamf_tools_cli_proto::UserMetadata& user_metadata,
const std::string& output_iamf_directory, bool include_temporal_delimiters);
} // namespace iamf_tools
#endif // CLI_IAMF_COMPONENTS_H_