1+ #include < iostream>
2+ #include < fstream>
3+ #include < sstream>
4+ #include " adm/common_definitions.hpp"
5+ #include " adm/parse.hpp"
6+ #include " adm/write.hpp"
7+ #include " adm/segmenter.hpp"
8+ #include " adm/utilities/id_assignment.hpp"
9+ #include " adm/utilities/object_creation.hpp"
10+
11+ using namespace adm ;
12+
13+ std::string genSadmFilename (std::string pref, uint32_t ind);
14+ TrackUidList buildTrackList (std::shared_ptr<Document> document);
15+
16+ int main (int argc, char const *argv[]) {
17+ std::string fout_pre = " /tmp/segmenter_output" ;
18+ int size = 1000 ;
19+ int max_fr = 10 ;
20+
21+ auto document = parseXml (" ../tests/test_data/segmenter_input.xml" );
22+
23+ // Get file length
24+ std::chrono::nanoseconds filelength ((uint64_t )(max_fr * size) * 1000000L );
25+ for (auto programme : document->getElements <AudioProgramme>()) {
26+ if (programme->has <Start>() && programme->has <End>()) {
27+ filelength = programme->get <End>().get ().asNanoseconds () - programme->get <Start>().get ().asNanoseconds ();
28+ break ;
29+ } else if (programme->has <End>()) {
30+ filelength = programme->get <End>().get ().asNanoseconds ();
31+ break ;
32+ }
33+ }
34+
35+ auto trackUidList = buildTrackList (document);
36+
37+ Segmenter segmenter (document, Time (filelength));
38+ SegmentStart segment_start (std::chrono::milliseconds (0 ));
39+ SegmentDuration segment_size (std::chrono::milliseconds{size});
40+ int fr = 0 ;
41+ while (segment_start < filelength && fr < max_fr) {
42+ segmenter.buildFrame (segment_start, segment_size, fr);
43+ auto transportTrackFormat = segmenter.generateTransportTrackFormat (trackUidList,
44+ segment_start, segment_size);
45+ auto frame = segmenter.getFrame ();
46+ auto frameHeader = segmenter.getFrameHeader ();
47+
48+ std::stringstream xmlStream;
49+ writeXml (xmlStream, frame, *frameHeader);
50+
51+ std::string fname = genSadmFilename (fout_pre, fr);
52+ std::ofstream sfile (fname);
53+
54+ sfile << xmlStream.str ();
55+
56+ // Get ready for next frame
57+ xmlStream.str (" " );
58+ segment_start = SegmentStart (segment_start.get () + segment_size.get ());
59+ fr++;
60+ }
61+
62+ return 0 ;
63+ }
64+
65+
66+ std::string genSadmFilename (std::string pref, uint32_t ind) {
67+ char c[256 ];
68+ sprintf (c, " %s_%04d.xml" , pref.c_str (), ind);
69+ std::string s (c);
70+ return s;
71+ }
72+
73+ TrackUidList buildTrackList (std::shared_ptr<Document> document) {
74+ TrackUidList trackUidList;
75+
76+ auto atus = document->getElements <AudioTrackUid>();
77+ uint16_t track_idx = 1 ;
78+ for (auto atu : atus) {
79+ TrackUid track_uid;
80+ track_uid.uid = formatId (atu->get <AudioTrackUidId>());
81+ track_uid.trackIndex = track_idx;
82+ trackUidList.trackUid .push_back (track_uid);
83+ track_idx++;
84+ }
85+ return trackUidList;
86+ }
0 commit comments