summaryrefslogtreecommitdiff
path: root/libs/ardour/broadcast_info.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-08-06 17:55:33 +0200
committerRobin Gareus <robin@gareus.org>2017-08-06 17:56:59 +0200
commit2f1405db5a53437ca16f0c96127d80e80d7ff11a (patch)
treeaf71933ece091693efac885200e477db5a32c8df /libs/ardour/broadcast_info.cc
parenteb2af9e28d59cbd85a67e637c9b8f9059975b5c9 (diff)
Broadcast info according to EBU tech-specs
Diffstat (limited to 'libs/ardour/broadcast_info.cc')
-rw-r--r--libs/ardour/broadcast_info.cc33
1 files changed, 25 insertions, 8 deletions
diff --git a/libs/ardour/broadcast_info.cc b/libs/ardour/broadcast_info.cc
index 98175a6da6..c19d898b80 100644
--- a/libs/ardour/broadcast_info.cc
+++ b/libs/ardour/broadcast_info.cc
@@ -92,6 +92,24 @@ BroadcastInfo::set_originator_ref_from_session (Session const & /*session*/)
std::ostringstream serial_number;
serial_number << PROGRAM_NAME << revision;
+ std::string country = SessionMetadata::Metadata()->country().substr (0, 2).c_str(); // ISO 3166-1 2 digits
+ if (country.empty ()) {
+ /* "ZZ" is reserved and may be user-assigned.
+ * EBU Tech 3279 chapter 4.2.4 recommends "ZZ" for unregistered organizations
+ */
+ country = "ZZ";
+ }
+
+ /* https://tech.ebu.ch/docs/tech/tech3279.pdf */
+ std::string organization = SessionMetadata::Metadata()->organization().substr (0, 3).c_str(); // EBU assigned Organisation code
+ if (organization.empty ()) {
+ organization = "---";
+ }
+
+ // TODO sanitize to allowed char set: tech3279.pdf chapter 1.6
+ // allowed: A-Z 0-9 <space> .,-()/=
+ // possible, but not recommended: !"%&*;<>
+
/* https://tech.ebu.ch/docs/r/r099.pdf
* CC Country code: (2 characters) based on the ISO 3166-1 standard
* OOO Organisation code: (3 characters) based on the EBU facility codes, Tech 3279
@@ -99,14 +117,13 @@ BroadcastInfo::set_originator_ref_from_session (Session const & /*session*/)
* HHMMSS OriginationTime (6 characters,) from the <OriginationTime> field of the BWF.
* RRRRRRRRR Random Number (9 characters 0-9) Generated locally by the recorder using some reasonably random algorithm.
*/
- snprintf_bounded_null_filled (info->originator_reference, sizeof (info->originator_reference), "%2s%3s%12s%02d%02d%02d%9d",
- SessionMetadata::Metadata()->country().substr (0, 2).c_str(),
- SessionMetadata::Metadata()->organization().substr (0, 3).c_str(),
- serial_number.str().substr (0, 12).c_str(),
- _time.tm_hour,
- _time.tm_min,
- _time.tm_sec,
- random_code);
+ snprintf_bounded_null_filled (info->originator_reference, sizeof (info->originator_reference), "%2s%3s%12s%02d%02d%02d%09d",
+ country.c_str (), organization.c_str(),
+ serial_number.str().substr (0, 12).c_str(),
+ _time.tm_hour,
+ _time.tm_min,
+ _time.tm_sec,
+ random_code);
}