i != descriptor.ResourceList.end();
++i) {
- if (i->Type == ASDCP::TimedText::MT_OPENTYPE) {
- ASDCP::TimedText::FrameBuffer buffer;
- buffer.Capacity (10 * 1024 * 1024);
- reader->ReadAncillaryResource (i->ResourceID, buffer, dec->context(), dec->hmac());
+ ASDCP::TimedText::FrameBuffer buffer;
+ buffer.Capacity (10 * 1024 * 1024);
+ reader->ReadAncillaryResource (i->ResourceID, buffer, dec->context(), dec->hmac());
- char id[64];
- Kumu::bin2UUIDhex (i->ResourceID, ASDCP::UUIDlen, id, sizeof (id));
+ char id[64];
+ Kumu::bin2UUIDhex (i->ResourceID, ASDCP::UUIDlen, id, sizeof (id));
- shared_array<uint8_t> data (new uint8_t[buffer.Size()]);
- memcpy (data.get(), buffer.RoData(), buffer.Size());
+ shared_array<uint8_t> data (new uint8_t[buffer.Size()]);
+ memcpy (data.get(), buffer.RoData(), buffer.Size());
+ switch (i->Type) {
+ case ASDCP::TimedText::MT_OPENTYPE:
+ {
list<shared_ptr<SMPTELoadFontNode> >::const_iterator j = _load_font_nodes.begin ();
while (j != _load_font_nodes.end() && (*j)->urn != id) {
++j;
if (j != _load_font_nodes.end ()) {
_fonts.push_back (Font ((*j)->id, (*j)->urn, Data (data, buffer.Size ())));
}
+ break;
}
- }
+ case ASDCP::TimedText::MT_PNG:
+ {
+ list<shared_ptr<Subtitle> >::const_iterator j = _subtitles.begin ();
+ while (j != _subtitles.end() && ((!dynamic_pointer_cast<SubtitleImage>(*j)) || dynamic_pointer_cast<SubtitleImage>(*j)->id() != id)) {
+ ++j;
+ }
- /* XXX: load PNG and attach them to _subtitles */
+ if (j != _subtitles.end()) {
+ dynamic_pointer_cast<SubtitleImage>(*j)->set_png_image (Data(data, buffer.Size()));
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ }
/* Get intrinsic duration */
_intrinsic_duration = descriptor.ContainerDuration;
#include "interop_subtitle_asset.h"
#include "interop_load_font_node.h"
#include "subtitle_string.h"
+#include "subtitle_image.h"
#include <boost/test/unit_test.hpp>
+#include <iostream>
using std::list;
using std::string;
BOOST_AUTO_TEST_CASE (read_interop_subtitle_test3)
{
dcp::InteropSubtitleAsset subs ("test/data/subs3.xml");
+
+ BOOST_REQUIRE_EQUAL (subs.subtitles().size(), 1);
+ shared_ptr<dcp::SubtitleImage> si = dynamic_pointer_cast<dcp::SubtitleImage>(subs.subtitles().front());
+ BOOST_REQUIRE (si);
+ BOOST_CHECK (si->png_image() == dcp::Data("test/data/822bd341-c751-45b1-94d2-410e4ffcff1b.png"));
}