Merge master; specify libdcp-1.0.
[dcpomatic.git] / src / lib / ffmpeg_content.cc
index 3bee49146a5304024d083c6138b00e8332012390..3df1ba57ee78ddd1422f0cedc74c64ba696951c9 100644 (file)
@@ -66,7 +66,7 @@ FFmpegContent::FFmpegContent (shared_ptr<const Film> f, shared_ptr<const cxml::N
 {
        list<cxml::NodePtr> c = node->node_children ("SubtitleStream");
        for (list<cxml::NodePtr>::const_iterator i = c.begin(); i != c.end(); ++i) {
-               _subtitle_streams.push_back (shared_ptr<FFmpegSubtitleStream> (new FFmpegSubtitleStream (*i, version)));
+               _subtitle_streams.push_back (shared_ptr<FFmpegSubtitleStream> (new FFmpegSubtitleStream (*i)));
                if ((*i)->optional_number_child<int> ("Selected")) {
                        _subtitle_stream = _subtitle_streams.back ();
                }
@@ -207,12 +207,12 @@ FFmpegContent::technical_summary () const
 {
        string as = "none";
        if (_audio_stream) {
-               as = String::compose ("id %1", _audio_stream->id);
+               as = _audio_stream->technical_summary ();
        }
 
        string ss = "none";
        if (_subtitle_stream) {
-               ss = String::compose ("id %1", _subtitle_stream->id);
+               ss = _subtitle_stream->technical_summary ();
        }
 
        pair<string, string> filt = Filter::ffmpeg_strings (_filters);
@@ -325,54 +325,33 @@ FFmpegContent::output_audio_frame_rate () const
 }
 
 bool
-operator== (FFmpegSubtitleStream const & a, FFmpegSubtitleStream const & b)
+operator== (FFmpegStream const & a, FFmpegStream const & b)
 {
-       return a.id == b.id;
+       return a._id == b._id;
 }
 
 bool
-operator!= (FFmpegSubtitleStream const & a, FFmpegSubtitleStream const & b)
+operator!= (FFmpegStream const & a, FFmpegStream const & b)
 {
-       return a.id != b.id;
+       return a._id != b._id;
 }
 
-bool
-operator== (FFmpegAudioStream const & a, FFmpegAudioStream const & b)
-{
-       return a.id == b.id;
-}
-
-bool
-operator!= (FFmpegAudioStream const & a, FFmpegAudioStream const & b)
+FFmpegStream::FFmpegStream (shared_ptr<const cxml::Node> node)
+       : name (node->string_child ("Name"))
+       , _id (node->number_child<int> ("Id"))
 {
-       return a.id != b.id;
-}
 
-FFmpegStream::FFmpegStream (shared_ptr<const cxml::Node> node, int version)
-       : _legacy_id (false)
-{
-       name = node->string_child ("Name");
-       id = node->number_child<int> ("Id");
-       if (version == 4 || node->optional_bool_child ("LegacyId")) {
-               _legacy_id = true;
-       }
 }
 
 void
 FFmpegStream::as_xml (xmlpp::Node* root) const
 {
        root->add_child("Name")->add_child_text (name);
-       root->add_child("Id")->add_child_text (lexical_cast<string> (id));
-       if (_legacy_id) {
-               /* Write this so that version > 4 files are read in correctly
-                  if the Id came originally from a version <= 4 file.
-               */
-               root->add_child("LegacyId")->add_child_text ("1");
-       }
+       root->add_child("Id")->add_child_text (lexical_cast<string> (_id));
 }
 
 FFmpegAudioStream::FFmpegAudioStream (shared_ptr<const cxml::Node> node, int version)
-       : FFmpegStream (node, version)
+       : FFmpegStream (node)
        , mapping (node->node_child ("Mapping"), version)
 {
        frame_rate = node->number_child<int> ("FrameRate");
@@ -392,34 +371,26 @@ FFmpegAudioStream::as_xml (xmlpp::Node* root) const
        mapping.as_xml (root->add_child("Mapping"));
 }
 
-int
-FFmpegStream::index (AVFormatContext const * fc) const
+bool
+FFmpegStream::uses_index (AVFormatContext const * fc, int index) const
 {
-       if (_legacy_id) {
-               return id;
-       }
-       
        size_t i = 0;
        while (i < fc->nb_streams) {
-               if (fc->streams[i]->id == id) {
-                       return i;
+               if (fc->streams[i]->id == _id) {
+                       return int (i) == index;
                }
                ++i;
        }
 
-       assert (false);
+       return false;
 }
 
 AVStream *
 FFmpegStream::stream (AVFormatContext const * fc) const
 {
-       if (_legacy_id) {
-               return fc->streams[id];
-       }
-       
        size_t i = 0;
        while (i < fc->nb_streams) {
-               if (fc->streams[i]->id == id) {
+               if (fc->streams[i]->id == _id) {
                        return fc->streams[i];
                }
                ++i;
@@ -433,8 +404,8 @@ FFmpegStream::stream (AVFormatContext const * fc) const
  *  @param t String returned from to_string().
  *  @param v State file version.
  */
-FFmpegSubtitleStream::FFmpegSubtitleStream (shared_ptr<const cxml::Node> node, int version)
-       : FFmpegStream (node, version)
+FFmpegSubtitleStream::FFmpegSubtitleStream (shared_ptr<const cxml::Node> node)
+       : FFmpegStream (node)
 {
        
 }
@@ -495,7 +466,7 @@ FFmpegContent::identifier () const
        boost::mutex::scoped_lock lm (_mutex);
 
        if (_subtitle_stream) {
-               s << "_" << _subtitle_stream->id;
+               s << "_" << _subtitle_stream->identifier ();
        }
 
        for (vector<Filter const *>::const_iterator i = _filters.begin(); i != _filters.end(); ++i) {