Skip to content

Commit 6ce6f7b

Browse files
davemar-bbcrsjbailey
authored andcommitted
Add SADM support
1 parent 3f94a9b commit 6ce6f7b

File tree

83 files changed

+4000
-396
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

83 files changed

+4000
-396
lines changed

docs/index.rst

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ libadm – ITU-R BS.2076 Library
2525
reference_document
2626
element_api
2727
reference_elements
28+
reference_sadm_elements
2829
reference_helpers
2930
reference_utilities
3031
reference_read_write

docs/reference_sadm_elements.rst

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
.. reference_sadm_elements:
2+
3+
SADM Elements
4+
#############
5+
6+
Frame Header
7+
------------
8+
9+
.. doxygenclass:: adm::FrameHeader
10+
.. doxygenclass:: adm::ProfileList
11+
.. doxygentypedef:: adm::TransportTrackFormats
12+
13+
FrameFormat
14+
-----------
15+
16+
.. doxygenclass:: adm::FrameFormat
17+
.. doxygenclass:: adm::FrameFormatId
18+
.. doxygenenum:: adm::FrameType
19+
.. doxygenenum:: adm::TimeReference
20+
.. doxygentypedef:: adm::FlowId
21+
.. doxygentypedef:: adm::CountToFull
22+
.. doxygentypedef:: adm::NumMetadataChunks
23+
.. doxygentypedef:: adm::CountToSameChunk
24+
.. doxygentypedef:: adm::FrameIndex
25+
.. doxygentypedef:: adm::ChunkIndex
26+
27+
ChangedIds
28+
----------
29+
30+
.. doxygenclass:: adm::ChangedIds
31+
.. doxygenclass:: adm::ChangedId
32+
.. doxygenenum:: adm::ChangedIdStatus
33+
.. doxygentypedef:: adm::ChangedAudioChannelFormatIds
34+
.. doxygentypedef:: adm::ChangedAudioPackFormatIds
35+
.. doxygentypedef:: adm::ChangedAudioTrackUidIds
36+
.. doxygentypedef:: adm::ChangedAudioStreamFormatIds
37+
.. doxygentypedef:: adm::ChangedAudioObjectIds
38+
.. doxygentypedef:: adm::ChangedAudioContentIds
39+
.. doxygentypedef:: adm::ChangedAudioProgrammeIds
40+
41+
TransportTrackFormat
42+
--------------------
43+
44+
.. doxygenclass:: adm::TransportTrackFormat
45+
.. doxygenclass:: adm::TransportId
46+
.. doxygentypedef:: adm::TransportName
47+
.. doxygentypedef:: adm::NumTracks
48+
.. doxygentypedef:: adm::NumIds
49+
.. doxygentypedef:: adm::AudioTracks
50+
51+
AudioTrack
52+
----------
53+
.. doxygenclass:: adm::AudioTrack
54+
.. doxygentypedef:: adm::TrackId
55+
.. doxygentypedef:: adm::AudioTrackUidRefs

examples/CMakeLists.txt

+5
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,8 @@ target_link_libraries(multiple_storylines PRIVATE adm)
2121
add_executable(voice_over voice_over.cpp)
2222
target_link_libraries(voice_over PRIVATE adm)
2323

24+
add_executable(create_sadm_from_scratch create_sadm_from_scratch.cpp)
25+
target_link_libraries(create_sadm_from_scratch PRIVATE adm)
26+
27+
add_executable(parse_sadm_xml parse_sadm_xml.cpp)
28+
target_link_libraries(parse_sadm_xml PRIVATE adm)

examples/create_sadm_from_scratch.cpp

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#include <iostream>
2+
#include <sstream>
3+
#include "adm/elements.hpp"
4+
#include "adm/serial.hpp"
5+
#include "adm/utilities/id_assignment.hpp"
6+
#include "adm/utilities/object_creation.hpp"
7+
#include "adm/write.hpp"
8+
9+
int main() {
10+
using namespace adm;
11+
auto uuid = "1f399874-dfa9-4a9b-82cd-fedc483d1223";
12+
auto frameFormatId = parseFrameFormatId("FF_00000001");
13+
auto frameHeader = FrameHeader{FrameFormat{
14+
frameFormatId, Start(std::chrono::milliseconds(0)),
15+
Duration(std::chrono::milliseconds(40)), FrameType::FULL, FlowId{uuid}}};
16+
auto document = Document::create();
17+
18+
// create ADM elements
19+
auto admProgramme = AudioProgramme::create(
20+
AudioProgrammeName("Alice and Bob talking in the forrest"));
21+
auto speechContent = AudioContent::create(AudioContentName("Speech"));
22+
auto atmoContent = AudioContent::create(AudioContentName("Atmo"));
23+
24+
admProgramme->addReference(speechContent);
25+
admProgramme->addReference(atmoContent);
26+
auto holder1 = createSimpleObject("Alice");
27+
speechContent->addReference(holder1.audioObject);
28+
29+
auto holder2 = createSimpleObject("Bob");
30+
speechContent->addReference(holder2.audioObject);
31+
32+
document->add(admProgramme);
33+
34+
reassignIds(document);
35+
36+
auto trackFormat = TransportTrackFormat(TransportId(TransportIdValue(1)));
37+
38+
AudioTrack audioTrack1(TrackId(1));
39+
audioTrack1.add(holder1.audioTrackUid->get<AudioTrackUidId>());
40+
trackFormat.add(audioTrack1);
41+
42+
AudioTrack audioTrack2(TrackId(2));
43+
audioTrack2.add(holder2.audioTrackUid->get<AudioTrackUidId>());
44+
trackFormat.add(audioTrack2);
45+
46+
frameHeader.add(trackFormat);
47+
48+
// write XML data to stdout
49+
std::stringstream xmlStream;
50+
writeXml(xmlStream, document, frameHeader);
51+
std::cout << xmlStream.str();
52+
return 0;
53+
}

examples/parse_sadm_xml.cpp

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#include <iostream>
2+
#include <sstream>
3+
#include <adm/serial.hpp>
4+
#include "adm/parse.hpp"
5+
#include "adm/write.hpp"
6+
7+
int main(int argc, char const *argv[]) {
8+
if (argc != 2) {
9+
std::cout << "usage: " << argv[0] << " [SADM_XML_FILE]" << std::endl;
10+
exit(1);
11+
}
12+
13+
std::string fileName = argv[1];
14+
auto header = adm::parseFrameHeader(fileName);
15+
auto document = adm::parseXml(fileName, header,
16+
adm::xml::ParserOptions::recursive_node_search);
17+
18+
// write XML data to stdout
19+
std::stringstream xmlStream;
20+
writeXml(xmlStream, document, header);
21+
std::cout << xmlStream.str();
22+
23+
return 0;
24+
}

include/adm/detail/id_map.hpp

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#pragma once
12
#include "adm/document.hpp"
23
#include <memory>
34

0 commit comments

Comments
 (0)