diff options
Diffstat (limited to 'src/asset_list.cc')
| -rw-r--r-- | src/asset_list.cc | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/src/asset_list.cc b/src/asset_list.cc new file mode 100644 index 00000000..536c9f05 --- /dev/null +++ b/src/asset_list.cc @@ -0,0 +1,87 @@ +/* + Copyright (C) 2012-2013 Carl Hetherington <cth@carlh.net> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include "asset_list.h" +#include "asset_instance.h" +#include "xml.h" + +using std::string; +using boost::shared_ptr; +using namespace libdcp; + +AssetList::AssetList (shared_ptr<const cxml::Node> node) +{ + main_picture = optional_type_child<AssetInstance> (node, "MainPicture"); + main_stereoscopic_picture = optional_type_child<AssetInstance> (node, "MainStereoscopicPicture"); + main_sound = optional_type_child<AssetInstance> (node, "MainSound"); + main_subtitle = optional_type_child<AssetInstance> (node, "MainSubtitle"); + + node->done (); +} + +void +AssetList::write_to_cpl (xmlpp::Element* node, bool interop) const +{ + xmlpp::Element* asset_list = node->add_child ("AssetList"); + + if (main_picture) { + main_picture->write_to_cpl (asset_list, interop); + } + + if (main_sound) { + main_sound->write_to_cpl (asset_list, interop); + } + + if (main_subtitle) { + main_subtitle->write_to_cpl (asset_list, interop); + } +} + +bool +AssetList::equals (shared_ptr<const AssetList> other, EqualityOptions opt, boost::function<void (NoteType, string)> note) const +{ + if ((main_picture && !other->main_picture) || (!main_picture && other->main_picture)) { + note (ERROR, "reel has different assets"); + return false; + } + + if (main_picture && !main_picture->equals (other->main_picture, opt, note)) { + return false; + } + + if ((main_sound && !other->main_sound) || (!main_sound && other->main_sound)) { + note (ERROR, "reel has different assets"); + return false; + } + + if (main_sound && !main_sound->equals (other->main_sound, opt, note)) { + return false; + } + + if ((main_subtitle && !other->main_subtitle) || (!main_subtitle && other->main_subtitle)) { + note (ERROR, "reel has different assets"); + return false; + } + + if (main_subtitle && !main_subtitle->equals (other->main_subtitle, opt, note)) { + return false; + } + + return true; +} |
