X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Ffilm_state.cc;h=0ab38214dd7b1d9cec3a16d7aabce95c6707f781;hb=44b57d623dec97a3f9955082f0b8a7a8d27b7518;hp=82d492b9aec370bced5d63932b62e71650adad74;hpb=de04e4a8418dedb76d6a7954eb4bd286e8170587;p=dcpomatic.git diff --git a/src/lib/film_state.cc b/src/lib/film_state.cc index 82d492b9a..0ab38214d 100644 --- a/src/lib/film_state.cc +++ b/src/lib/film_state.cc @@ -113,17 +113,15 @@ 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 << "has_subtitles " << _has_subtitles << "\n"; - for (vector::const_iterator i = _audio_streams.begin(); i != _audio_streams.end(); ++i) { + for (vector::const_iterator i = _audio_streams.begin(); i != _audio_streams.end(); ++i) { f << "audio_stream " << i->to_string () << "\n"; } - for (vector::const_iterator i = _subtitle_streams.begin(); i != _subtitle_streams.end(); ++i) { + for (vector::const_iterator i = _subtitle_streams.begin(); i != _subtitle_streams.end(); ++i) { f << "subtitle_stream " << i->to_string () << "\n"; } @@ -220,20 +218,16 @@ 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 ()); } @@ -354,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); @@ -441,7 +422,7 @@ FilmState::dci_name () const d << "_"; } - switch (_audio_channels) { + switch (_audio_streams[_audio_stream].channels()) { case 1: d << "10_"; break; @@ -451,6 +432,9 @@ FilmState::dci_name () const case 6: d << "51_"; break; + case 8: + d << "71_"; + break; } d << "2K_"; @@ -546,20 +530,18 @@ FilmState::set_content (string c) shared_ptr 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 @@ -788,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) { @@ -802,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) { @@ -824,14 +792,14 @@ FilmState::set_has_subtitles (bool s) } void -FilmState::set_audio_streams (vector s) +FilmState::set_audio_streams (vector s) { _audio_streams = s; _dirty = true; } void -FilmState::set_subtitle_streams (vector s) +FilmState::set_subtitle_streams (vector s) { _subtitle_streams = s; _dirty = true; @@ -856,3 +824,13 @@ FilmState::state_copy () const { return shared_ptr (new FilmState (*this)); } + +int +FilmState::audio_channels () const +{ + if (_audio_stream == -1) { + return 0; + } + + return _audio_streams[_audio_stream].channels (); +}