summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/rgb_xyz.cc2
-rw-r--r--src/sound_asset.cc4
-rw-r--r--src/sound_asset.h2
-rw-r--r--src/sound_asset_writer.cc24
-rw-r--r--src/sound_asset_writer.h2
-rw-r--r--src/types.h14
6 files changed, 42 insertions, 6 deletions
diff --git a/src/rgb_xyz.cc b/src/rgb_xyz.cc
index d299340e..2eccb77a 100644
--- a/src/rgb_xyz.cc
+++ b/src/rgb_xyz.cc
@@ -365,7 +365,9 @@ dcp::xyz_to_xyz (uint8_t const * xyz_16, dcp::Size size, int stride)
uint16_t const * p = reinterpret_cast<uint16_t const *> (xyz_16 + y * stride);
for (int x = 0; x < size.width; ++x) {
/* Truncate 16-bit to 12-bit */
+ cout << *p << " ";
xyz_12->data(0)[jn] = *p++ >> 4;
+ cout << xyz_12->data(0)[jn] << "\n";
xyz_12->data(1)[jn] = *p++ >> 4;
xyz_12->data(2)[jn] = *p++ >> 4;
++jn;
diff --git a/src/sound_asset.cc b/src/sound_asset.cc
index 11fd4b2f..2202311a 100644
--- a/src/sound_asset.cc
+++ b/src/sound_asset.cc
@@ -192,10 +192,10 @@ SoundAsset::equals (shared_ptr<const Asset> other, EqualityOptions opt, NoteHand
}
shared_ptr<SoundAssetWriter>
-SoundAsset::start_write (boost::filesystem::path file, Standard standard)
+SoundAsset::start_write (boost::filesystem::path file, Standard standard, ChannelAssignment assign)
{
/* XXX: can't we use a shared_ptr here? */
- return shared_ptr<SoundAssetWriter> (new SoundAssetWriter (this, file, standard));
+ return shared_ptr<SoundAssetWriter> (new SoundAssetWriter (this, file, standard, assign));
}
shared_ptr<SoundAssetReader>
diff --git a/src/sound_asset.h b/src/sound_asset.h
index a29eecd0..b3e5fec3 100644
--- a/src/sound_asset.h
+++ b/src/sound_asset.h
@@ -58,7 +58,7 @@ public:
explicit SoundAsset (boost::filesystem::path file);
SoundAsset (Fraction edit_rate, int sampling_rate, int channels);
- boost::shared_ptr<SoundAssetWriter> start_write (boost::filesystem::path file, Standard standard);
+ boost::shared_ptr<SoundAssetWriter> start_write (boost::filesystem::path file, Standard standard, ChannelAssignment assign);
boost::shared_ptr<SoundAssetReader> start_read () const;
bool equals (
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));
diff --git a/src/sound_asset_writer.h b/src/sound_asset_writer.h
index 02639423..b13300c2 100644
--- a/src/sound_asset_writer.h
+++ b/src/sound_asset_writer.h
@@ -63,7 +63,7 @@ public:
private:
friend class SoundAsset;
- SoundAssetWriter (SoundAsset *, boost::filesystem::path, Standard standard);
+ SoundAssetWriter (SoundAsset *, boost::filesystem::path, Standard standard, ChannelAssignment);
void write_current_frame ();
diff --git a/src/types.h b/src/types.h
index dd2e10a6..c3aee26b 100644
--- a/src/types.h
+++ b/src/types.h
@@ -232,6 +232,20 @@ enum Formulation {
DCI_SPECIFIC
};
+/** Possible channel assignments for SMPTE DCP audio */
+enum ChannelAssignment {
+ /** L/R/C/Lfe/Ls/Rs/HI/VI */
+ CHANNEL_ASSIGNMENT_51,
+ /** L/R/C/Lfe/Ls/Rs/Cs/unused/HI/VI */
+ CHANNEL_ASSIGNMENT_61,
+ /** L/R/C/Lfe/Ls/Rs/Lc/Rc/HI/VI */
+ CHANNEL_ASSIGNMENT_71,
+ /** "Wild track format"; no assignment */
+ CHANNEL_ASSIGNMENT_WTF,
+ /** L/R/C/Lfe/Ls/Rs/Lrs/Rrs/HI/VI */
+ CHANNEL_ASSIGNMENT_71_DS
+};
+
/** @class Colour
* @brief An RGB colour.
*/