Store sound asset language as a string, but set it as a
authorCarl Hetherington <cth@carlh.net>
Wed, 9 Dec 2020 12:12:21 +0000 (13:12 +0100)
committerCarl Hetherington <cth@carlh.net>
Sun, 17 Jan 2021 19:13:22 +0000 (20:13 +0100)
dcp::LanguageTag.

This makes it work the same as other language tags, and tolerates
bad values while trying not to allow them to be created.

src/sound_asset.cc
src/sound_asset.h
src/sound_asset_writer.cc

index 618574b69b91069fe886fd7cb61e2f225972d6b9..ea44e80640708b62c688cc3f1cc96149d5b3bf7f 100644 (file)
@@ -98,7 +98,7 @@ SoundAsset::SoundAsset (boost::filesystem::path file)
                if (!soundfield->RFC5646SpokenLanguage.empty()) {
                        char buffer[64];
                        soundfield->RFC5646SpokenLanguage.get().EncodeString(buffer, sizeof(buffer));
-                       _language = dcp::LanguageTag (buffer);
+                       _language = buffer;
                }
        }
 
@@ -111,7 +111,7 @@ SoundAsset::SoundAsset (Fraction edit_rate, int sampling_rate, int channels, Lan
        , _intrinsic_duration (0)
        , _channels (channels)
        , _sampling_rate (sampling_rate)
-       , _language (language)
+       , _language (language.to_string())
 {
 
 }
index 8e55aef7f88d84479dbf623cd76ec229ffcc4f66..91a213b85736bcf833c74f03b20591f121692add 100644 (file)
@@ -86,7 +86,7 @@ public:
                return _intrinsic_duration;
        }
 
-       LanguageTag language () const {
+       std::string language () const {
                return _language;
        }
 
@@ -107,7 +107,7 @@ private:
        int64_t _intrinsic_duration;
        int _channels;      ///< number of channels
        int _sampling_rate; ///< sampling rate in Hz
-       LanguageTag _language;
+       std::string _language;
 };
 
 }
index ecc7f3954fb9b638997b910fb51045c4214dba84..092acf0c3b5d8028eea4d2ea6d995e114e7603ca 100644 (file)
@@ -125,7 +125,7 @@ SoundAssetWriter::start ()
 
                ASDCP::MXF::SoundfieldGroupLabelSubDescriptor* soundfield = new ASDCP::MXF::SoundfieldGroupLabelSubDescriptor(asdcp_smpte_dict);
                GenRandomValue (soundfield->MCALinkID);
-               soundfield->RFC5646SpokenLanguage = _asset->language().to_string();
+               soundfield->RFC5646SpokenLanguage = _asset->language();
 
                const MCASoundField field = _asset->channels() > 10 ? SEVEN_POINT_ONE : FIVE_POINT_ONE;
 
@@ -149,7 +149,7 @@ SoundAssetWriter::start ()
                        channel->MCAChannelID = static_cast<int>(i) + 1;
                        channel->MCATagSymbol = "ch" + channel_to_mca_id(i, field);
                        channel->MCATagName = channel_to_mca_name(i, field);
-                       channel->RFC5646SpokenLanguage = _asset->language().to_string();
+                       channel->RFC5646SpokenLanguage = _asset->language();
                        channel->MCALabelDictionaryID = channel_to_mca_universal_label(i, field, asdcp_smpte_dict);
                        _state->mxf_writer.OP1aHeader().AddChildObject(channel);
                        essence_descriptor->SubDescriptors.push_back(channel->InstanceUID);