Logging improvements to allow prettier displays in the server GUI.
[dcpomatic.git] / src / lib / ffmpeg_subtitle_stream.cc
index 77a56e330297f608c84e6077c797190d5cad2809..e12075581b12705a71d53153904218a6950b1cce 100644 (file)
 #include "raw_convert.h"
 #include <libxml++/libxml++.h>
 #include <boost/foreach.hpp>
+#include <iostream>
 
 using std::string;
 using std::map;
 using std::list;
+using std::cout;
 
 /** Construct a SubtitleStream from a value returned from to_string().
  *  @param t String returned from to_string().
@@ -36,8 +38,8 @@ FFmpegSubtitleStream::FFmpegSubtitleStream (cxml::ConstNodePtr node)
        BOOST_FOREACH (cxml::NodePtr i, node->node_children ("Period")) {
                add_subtitle (
                        ContentTimePeriod (
-                               ContentTime (node->number_child<ContentTime::Type> ("From")),
-                               ContentTime (node->number_child<ContentTime::Type> ("To"))
+                               ContentTime (i->number_child<ContentTime::Type> ("From")),
+                               ContentTime (i->number_child<ContentTime::Type> ("To"))
                                )
                        );
        }
@@ -49,7 +51,7 @@ FFmpegSubtitleStream::as_xml (xmlpp::Node* root) const
        FFmpegStream::as_xml (root);
 
        for (map<ContentTime, ContentTime>::const_iterator i = _subtitles.begin(); i != _subtitles.end(); ++i) {
-               xmlpp::Node* node = root->add_child ("Subtitle");
+               xmlpp::Node* node = root->add_child ("Period");
                node->add_child("From")->add_child_text (raw_convert<string> (i->first.get ()));
                node->add_child("To")->add_child_text (raw_convert<string> (i->second.get ()));
        }
@@ -62,11 +64,11 @@ FFmpegSubtitleStream::add_subtitle (ContentTimePeriod period)
        _subtitles[period.from] = period.to;
 }
 
-list<ContentTimePeriod> 
+list<ContentTimePeriod>
 FFmpegSubtitleStream::subtitles_during (ContentTimePeriod period, bool starting) const
 {
        list<ContentTimePeriod> d;
-       
+
        /* XXX: inefficient */
        for (map<ContentTime, ContentTime>::const_iterator i = _subtitles.begin(); i != _subtitles.end(); ++i) {
                if ((starting && period.contains (i->first)) || (!starting && period.overlaps (ContentTimePeriod (i->first, i->second)))) {
@@ -84,3 +86,14 @@ FFmpegSubtitleStream::find_subtitle_to (ContentTime from) const
        DCPOMATIC_ASSERT (i != _subtitles.end ());
        return i->second;
 }
+
+/** Add some offset to all the times in the stream */
+void
+FFmpegSubtitleStream::add_offset (ContentTime offset)
+{
+       map<ContentTime, ContentTime> fixed;
+       for (map<ContentTime, ContentTime>::iterator i = _subtitles.begin(); i != _subtitles.end(); ++i) {
+               fixed[i->first + offset] = i->second + offset;
+       }
+       _subtitles = fixed;
+}