summaryrefslogtreecommitdiff
path: root/src/cpl.cc
blob: 137d359f9cf936fb155ffaea203d19897778e10d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include <iostream>
#include "cpl.h"

using namespace std;
using namespace libdcp;

CPL::CPL (string file)
	: XMLFile (file, "CompositionPlaylist")
{
	id = string_node ("Id");
	annotation_text = optional_string_node ("AnnotationText");
	issue_date = string_node ("IssueDate");
	creator = string_node ("Creator");
	content_title_text = string_node ("ContentTitleText");
	content_kind = kind_node ("ContentKind");
	content_version = optional_sub_node<ContentVersion> ("ContentVersion");
	ignore_node ("RatingList");
	reels = sub_nodes<Reel> ("ReelList", "Reel");

	ignore_node ("Issuer");
	ignore_node ("Signer");
	ignore_node ("Signature");

	done ();
}

ContentVersion::ContentVersion (xmlpp::Node const * node)
	: XMLNode (node)
{
	id = string_node ("Id");
	label_text = string_node ("LabelText");
	done ();
}

Reel::Reel (xmlpp::Node const * node)
	: XMLNode (node)
{
	id = string_node ("Id");
	asset_list = sub_node<CPLAssetList> ("AssetList");

	done ();
}

CPLAssetList::CPLAssetList (xmlpp::Node const * node)
	: XMLNode (node)
{
	main_picture = sub_node<MainPicture> ("MainPicture");
	main_sound = optional_sub_node<MainSound> ("MainSound");
	main_subtitle = optional_sub_node<MainSubtitle> ("MainSubtitle");

	done ();
}

MainPicture::MainPicture (xmlpp::Node const * node)
	: XMLNode (node)
{
	id = string_node ("Id");
	annotation_text = optional_string_node ("AnnotationText");
	edit_rate = fraction_node ("EditRate");
	intrinsic_duration = int64_node ("IntrinsicDuration");
	entry_point = int64_node ("EntryPoint");
	duration = int64_node ("Duration");
	frame_rate = fraction_node ("FrameRate");
	try {
		screen_aspect_ratio = fraction_node ("ScreenAspectRatio");
	} catch (XMLError& e) {
		/* Maybe it's not a fraction */
	}
	try {
		float f = float_node ("ScreenAspectRatio");
		screen_aspect_ratio = Fraction (f * 1000, 1000);
	} catch (bad_cast& e) {

	}

	ignore_node ("Hash");

	done ();
}

MainSound::MainSound (xmlpp::Node const * node)
	: XMLNode (node)
{
	id = string_node ("Id");
	annotation_text = optional_string_node ("AnnotationText");
	edit_rate = fraction_node ("EditRate");
	intrinsic_duration = int64_node ("IntrinsicDuration");
	entry_point = int64_node ("EntryPoint");
	duration = int64_node ("Duration");

	ignore_node ("Hash");
	
	done ();
}

MainSubtitle::MainSubtitle (xmlpp::Node const * node)
	: XMLNode (node)
{
	id = string_node ("Id");
	annotation_text = optional_string_node ("AnnotationText");
	edit_rate = fraction_node ("EditRate");
	intrinsic_duration = int64_node ("IntrinsicDuration");
	entry_point = int64_node ("EntryPoint");
	duration = int64_node ("Duration");

	ignore_node ("Hash");
	
	done ();
}