Tidy up test film naming.
[dcpomatic.git] / src / lib / film_state.cc
index f5eb24f869326461234d480630731b5fb19233c1..0ab38214dd7b1d9cec3a16d7aabce95c6707f781 100644 (file)
@@ -45,9 +45,7 @@
 using namespace std;
 using namespace boost;
 
-/** Write state to a stream.
- *  @param f Stream to write to.
- */
+/** Write state to our `metadata' file */
 void
 FilmState::write_metadata () const
 {
@@ -59,8 +57,6 @@ FilmState::write_metadata () const
                throw CreateFileError (m);
        }
 
-       /* XXX: reorder this */
-       
        /* User stuff */
        f << "name " << _name << "\n";
        f << "use_dci_name " << _use_dci_name << "\n";
@@ -68,7 +64,6 @@ FilmState::write_metadata () const
        if (_dcp_content_type) {
                f << "dcp_content_type " << _dcp_content_type->pretty_name () << "\n";
        }
-       f << "frames_per_second " << _frames_per_second << "\n";
        if (_format) {
                f << "format " << _format->as_metadata () << "\n";
        }
@@ -97,6 +92,7 @@ FilmState::write_metadata () const
        f << "audio_gain " << _audio_gain << "\n";
        f << "audio_delay " << _audio_delay << "\n";
        f << "still_duration " << _still_duration << "\n";
+       f << "selected_subtitle_stream " << _subtitle_stream << "\n";
        f << "with_subtitles " << _with_subtitles << "\n";
        f << "subtitle_offset " << _subtitle_offset << "\n";
        f << "subtitle_scale " << _subtitle_scale << "\n";
@@ -117,28 +113,24 @@ FilmState::write_metadata () const
        f << "width " << _size.width << "\n";
        f << "height " << _size.height << "\n";
        f << "length " << _length << "\n";
-       f << "audio_channels " << _audio_channels << "\n";
        f << "audio_sample_rate " << _audio_sample_rate << "\n";
-       f << "audio_sample_format " << audio_sample_format_to_string (_audio_sample_format) << "\n";
        f << "content_digest " << _content_digest << "\n";
-       f << "selected_subtitle_stream " << _subtitle_stream << "\n";
        f << "has_subtitles " << _has_subtitles << "\n";
 
-       for (vector<Stream>::const_iterator i = _audio_streams.begin(); i != _audio_streams.end(); ++i) {
+       for (vector<AudioStream>::const_iterator i = _audio_streams.begin(); i != _audio_streams.end(); ++i) {
                f << "audio_stream " << i->to_string () << "\n";
        }
 
-       for (vector<Stream>::const_iterator i = _subtitle_streams.begin(); i != _subtitle_streams.end(); ++i) {
+       for (vector<SubtitleStream>::const_iterator i = _subtitle_streams.begin(); i != _subtitle_streams.end(); ++i) {
                f << "subtitle_stream " << i->to_string () << "\n";
        }
 
+       f << "frames_per_second " << _frames_per_second << "\n";
+       
        _dirty = false;
 }
 
-/** Read state from a key / value pair.
- *  @param k Key.
- *  @param v Value.
- */
+/** Read state from our metadata file */
 void
 FilmState::read_metadata ()
 {
@@ -157,8 +149,6 @@ FilmState::read_metadata ()
                        _content = v;
                } else if (k == "dcp_content_type") {
                        _dcp_content_type = DCPContentType::from_pretty_name (v);
-               } else if (k == "frames_per_second") {
-                       _frames_per_second = atof (v.c_str ());
                } else if (k == "format") {
                        _format = Format::from_metadata (v);
                } else if (k == "left_crop") {
@@ -191,14 +181,14 @@ FilmState::read_metadata ()
                        _audio_delay = atoi (v.c_str ());
                } else if (k == "still_duration") {
                        _still_duration = atoi (v.c_str ());
+               } else if (k == "selected_subtitle_stream") {
+                       _subtitle_stream = atoi (v.c_str ());
                } else if (k == "with_subtitles") {
                        _with_subtitles = (v == "1");
                } else if (k == "subtitle_offset") {
                        _subtitle_offset = atoi (v.c_str ());
                } else if (k == "subtitle_scale") {
                        _subtitle_scale = atof (v.c_str ());
-               } else if (k == "selected_subtitle_stream") {
-                       _subtitle_stream = atoi (v.c_str ());
                } else if (k == "audio_language") {
                        _audio_language = v;
                } else if (k == "subtitle_language") {
@@ -228,20 +218,18 @@ FilmState::read_metadata ()
                        _size.height = atoi (v.c_str ());
                } else if (k == "length") {
                        _length = atof (v.c_str ());
-               } else if (k == "audio_channels") {
-                       _audio_channels = atoi (v.c_str ());
                } else if (k == "audio_sample_rate") {
                        _audio_sample_rate = atoi (v.c_str ());
-               } else if (k == "audio_sample_format") {
-                       _audio_sample_format = audio_sample_format_from_string (v);
                } else if (k == "content_digest") {
                        _content_digest = v;
                } else if (k == "has_subtitles") {
                        _has_subtitles = (v == "1");
                } else if (k == "audio_stream") {
-                       _audio_streams.push_back (Stream (v));
+                       _audio_streams.push_back (AudioStream (v));
                } else if (k == "subtitle_stream") {
-                       _subtitle_streams.push_back (Stream (v));
+                       _subtitle_streams.push_back (SubtitleStream (v));
+               } else if (k == "frames_per_second") {
+                       _frames_per_second = atof (v.c_str ());
                }
        }
                
@@ -360,22 +348,9 @@ FilmState::content_type () const
        return VIDEO;
 }
 
-/** @return Number of bytes per sample of a single channel */
+/** @return The sampling rate that we will resample the audio to */
 int
-FilmState::bytes_per_sample () const
-{
-       switch (_audio_sample_format) {
-       case AV_SAMPLE_FMT_S16:
-               return 2;
-       default:
-               return 0;
-       }
-
-       return 0;
-}
-
-int
-FilmState::target_sample_rate () const
+FilmState::target_audio_sample_rate () const
 {
        /* Resample to a DCI-approved sample rate */
        double t = dcp_audio_sample_rate (_audio_sample_rate);
@@ -447,7 +422,7 @@ FilmState::dci_name () const
                d << "_";
        }
 
-       switch (_audio_channels) {
+       switch (_audio_streams[_audio_stream].channels()) {
        case 1:
                d << "10_";
                break;
@@ -457,6 +432,9 @@ FilmState::dci_name () const
        case 6:
                d << "51_";
                break;
+       case 8:
+               d << "71_";
+               break;
        }
 
        d << "2K_";
@@ -552,20 +530,18 @@ FilmState::set_content (string c)
        shared_ptr<Decoder> d = decoder_factory (s, o, 0, 0);
        
        set_size (d->native_size ());
-       set_length (d->length_in_frames ());
        set_frames_per_second (d->frames_per_second ());
-       set_audio_channels (d->audio_channels ());
        set_audio_sample_rate (d->audio_sample_rate ());
-       set_audio_sample_format (d->audio_sample_format ());
        set_has_subtitles (d->has_subtitles ());
        set_audio_streams (d->audio_streams ());
        set_subtitle_streams (d->subtitle_streams ());
-       set_audio_stream (audio_streams().empty() ? -1 : audio_streams().front().id);
-       set_subtitle_stream (subtitle_streams().empty() ? -1 : subtitle_streams().front().id);
-       set_content_digest (md5_digest (content_path ()));
+       set_audio_stream (audio_streams().empty() ? -1 : 0);
+       set_subtitle_stream (subtitle_streams().empty() ? -1 : 0);
        
        _content = c;
        signal_changed (CONTENT);
+
+       set_content_digest (md5_digest (content_path ()));
 }
               
 void
@@ -794,13 +770,6 @@ FilmState::set_length (int l)
        signal_changed (LENGTH);
 }
 
-void
-FilmState::set_audio_channels (int c)
-{
-       _audio_channels = c;
-       signal_changed (AUDIO_CHANNELS);
-}
-
 void
 FilmState::set_audio_sample_rate (int r)
 {
@@ -808,13 +777,6 @@ FilmState::set_audio_sample_rate (int r)
        signal_changed (AUDIO_SAMPLE_RATE);
 }
 
-void
-FilmState::set_audio_sample_format (AVSampleFormat f)
-{
-       _audio_sample_format = f;
-       _dirty = true;
-}
-
 void
 FilmState::set_content_digest (string d)
 {
@@ -830,14 +792,14 @@ FilmState::set_has_subtitles (bool s)
 }
 
 void
-FilmState::set_audio_streams (vector<Stream> s)
+FilmState::set_audio_streams (vector<AudioStream> s)
 {
        _audio_streams = s;
        _dirty = true;
 }
 
 void
-FilmState::set_subtitle_streams (vector<Stream> s)
+FilmState::set_subtitle_streams (vector<SubtitleStream> s)
 {
        _subtitle_streams = s;
        _dirty = true;
@@ -862,3 +824,13 @@ FilmState::state_copy () const
 {
        return shared_ptr<FilmState> (new FilmState (*this));
 }
+
+int
+FilmState::audio_channels () const
+{
+       if (_audio_stream == -1) {
+               return 0;
+       }
+
+       return _audio_streams[_audio_stream].channels ();
+}