summaryrefslogtreecommitdiff
path: root/src/sound_asset_writer.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2016-09-08 23:55:37 +0100
committerCarl Hetherington <cth@carlh.net>2016-09-08 23:55:37 +0100
commitfe83eb5293fa4027856f6ee9faec7bfc8288badf (patch)
tree8314bbbb6b37a2fb7cb13787276b6fb9474e99bd /src/sound_asset_writer.cc
parent3e24098b32d6160759378e671bfca241dd9025d9 (diff)
Add channel assignment support for SMPTE DCPs.
Diffstat (limited to 'src/sound_asset_writer.cc')
-rw-r--r--src/sound_asset_writer.cc24
1 files changed, 22 insertions, 2 deletions
diff --git a/src/sound_asset_writer.cc b/src/sound_asset_writer.cc
index 84ed7787..f7513d91 100644
--- a/src/sound_asset_writer.cc
+++ b/src/sound_asset_writer.cc
@@ -51,7 +51,7 @@ struct SoundAssetWriter::ASDCPState
ASDCP::PCM::AudioDescriptor audio_desc;
};
-SoundAssetWriter::SoundAssetWriter (SoundAsset* asset, boost::filesystem::path file, Standard standard)
+SoundAssetWriter::SoundAssetWriter (SoundAsset* asset, boost::filesystem::path file, Standard standard, ChannelAssignment assign)
: AssetWriter (asset, file, standard)
, _state (new SoundAssetWriter::ASDCPState)
, _sound_asset (asset)
@@ -66,7 +66,27 @@ SoundAssetWriter::SoundAssetWriter (SoundAsset* asset, boost::filesystem::path f
_state->audio_desc.BlockAlign = 3 * _sound_asset->channels();
_state->audio_desc.AvgBps = _sound_asset->sampling_rate() * _state->audio_desc.BlockAlign;
_state->audio_desc.LinkedTrackID = 0;
- _state->audio_desc.ChannelFormat = ASDCP::PCM::CF_NONE;
+ if (standard == INTEROP) {
+ _state->audio_desc.ChannelFormat = ASDCP::PCM::CF_NONE;
+ } else {
+ switch (assign) {
+ case CHANNEL_ASSIGNMENT_51:
+ _state->audio_desc.ChannelFormat = ASDCP::PCM::CF_CFG_1;
+ break;
+ case CHANNEL_ASSIGNMENT_61:
+ _state->audio_desc.ChannelFormat = ASDCP::PCM::CF_CFG_2;
+ break;
+ case CHANNEL_ASSIGNMENT_71:
+ _state->audio_desc.ChannelFormat = ASDCP::PCM::CF_CFG_3;
+ break;
+ case CHANNEL_ASSIGNMENT_WTF:
+ _state->audio_desc.ChannelFormat = ASDCP::PCM::CF_CFG_4;
+ break;
+ case CHANNEL_ASSIGNMENT_71_DS:
+ _state->audio_desc.ChannelFormat = ASDCP::PCM::CF_CFG_5;
+ break;
+ }
+ }
_state->frame_buffer.Capacity (ASDCP::PCM::CalcFrameBufferSize (_state->audio_desc));
_state->frame_buffer.Size (ASDCP::PCM::CalcFrameBufferSize (_state->audio_desc));