diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/rgb_xyz.cc | 2 | ||||
| -rw-r--r-- | src/sound_asset.cc | 4 | ||||
| -rw-r--r-- | src/sound_asset.h | 2 | ||||
| -rw-r--r-- | src/sound_asset_writer.cc | 24 | ||||
| -rw-r--r-- | src/sound_asset_writer.h | 2 | ||||
| -rw-r--r-- | src/types.h | 14 |
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. */ |
