From 7de292067e73b0b96fa07f8d192689d844fcb270 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sun, 28 May 2023 23:01:32 +0200 Subject: [PATCH] Add SoundAsset::active_channels(). --- src/sound_asset.cc | 18 ++++++++++++++++++ src/sound_asset.h | 10 +++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/sound_asset.cc b/src/sound_asset.cc index 7c94b549..ea952c35 100644 --- a/src/sound_asset.cc +++ b/src/sound_asset.cc @@ -104,6 +104,16 @@ SoundAsset::SoundAsset (boost::filesystem::path file) } } + list channel_labels; + rr = reader.OP1aHeader().GetMDObjectsByType( + asdcp_smpte_dict->ul(ASDCP::MDD_AudioChannelLabelSubDescriptor), + channel_labels + ); + + if (KM_SUCCESS(rr)) { + _active_channels = channel_labels.size(); + } + _id = read_writer_info (info); } @@ -266,3 +276,11 @@ SoundAsset::valid_mxf (boost::filesystem::path file) Kumu::Result_t r = reader.OpenRead (file.string().c_str()); return !ASDCP_FAILURE (r); } + + +int +SoundAsset::active_channels() const +{ + return _active_channels.get_value_or(_channels); +} + diff --git a/src/sound_asset.h b/src/sound_asset.h index 55669c2f..70c3aee7 100644 --- a/src/sound_asset.h +++ b/src/sound_asset.h @@ -103,11 +103,14 @@ public: NoteHandler note ) const override; - /** @return number of channels */ + /** @return number of channels in the MXF */ int channels () const { return _channels; } + /** @return An estimate of the number of channels that are actually in use */ + int active_channels() const; + /** @return sampling rate in Hz */ int sampling_rate () const { return _sampling_rate; @@ -143,8 +146,9 @@ private: * content presented may be less than this. */ int64_t _intrinsic_duration = 0; - int _channels = 0; ///< number of channels - int _sampling_rate = 0; ///< sampling rate in Hz + int _channels = 0; ///< number of channels in the MXF + boost::optional _active_channels; ///< estimate of the number of active channels + int _sampling_rate = 0; ///< sampling rate in Hz boost::optional _language; }; -- 2.30.2