X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fstream.h;h=16b06e4bcac5021e77b73de57a2e186bf16ab295;hb=f20cd70a9afc28f785ef4a50c875ccf6c3729462;hp=2db63c6208e12c75d92360b1b1676a9637a282b6;hpb=572f030509c2b0c1f662a54624ab0be6efdd9024;p=dcpomatic.git diff --git a/src/lib/stream.h b/src/lib/stream.h index 2db63c620..16b06e4bc 100644 --- a/src/lib/stream.h +++ b/src/lib/stream.h @@ -17,66 +17,105 @@ */ +/** @file src/lib/stream.h + * @brief Representations of audio and subtitle streams. + * + * Some content may have multiple `streams' of audio and/or subtitles; perhaps + * for multiple languages, or for stereo / surround mixes. These classes represent + * those streams, and know about their details. + */ + #ifndef DVDOMATIC_STREAM_H #define DVDOMATIC_STREAM_H +#include +#include +#include +extern "C" { +#include +} + +/** @class Stream + * @brief Parent class for streams. + */ class Stream { public: - Stream () - : _id (-1) - {} - - Stream (std::string n, int i) - : _name (n) - , _id (i) - {} - + virtual ~Stream () {} virtual std::string to_string () const = 0; - - std::string name () const { - return _name; - } - - int id () const { - return _id; - } - -protected: - std::string _name; - int _id; }; +/** @class AudioStream + * @brief A stream of audio data. + */ struct AudioStream : public Stream { public: - AudioStream (std::string t); - - AudioStream (std::string n, int i, int c) - : Stream (n, i) - , _channels (c) + AudioStream (int r, int64_t l) + : _sample_rate (r) + , _channel_layout (l) {} - std::string to_string () const; + /* Only used for backwards compatibility for state file version < 1 */ + void set_sample_rate (int s) { + _sample_rate = s; + } int channels () const { - return _channels; + return av_get_channel_layout_nb_channels (_channel_layout); } -private: - int _channels; + int sample_rate () const { + return _sample_rate; + } + + int64_t channel_layout () const { + return _channel_layout; + } + +protected: + AudioStream () + : _sample_rate (0) + , _channel_layout (0) + {} + + int _sample_rate; + int64_t _channel_layout; }; +/** @class SubtitleStream + * @brief A stream of subtitle data. + */ class SubtitleStream : public Stream { public: - SubtitleStream (std::string t); - SubtitleStream (std::string n, int i) - : Stream (n, i) + : _name (n) + , _id (i) {} std::string to_string () const; + + std::string name () const { + return _name; + } + + int id () const { + return _id; + } + + static boost::shared_ptr create (std::string t, boost::optional v); + +private: + friend class stream_test; + + SubtitleStream (std::string t, boost::optional v); + + std::string _name; + int _id; }; +boost::shared_ptr audio_stream_factory (std::string t, boost::optional version); +boost::shared_ptr subtitle_stream_factory (std::string t, boost::optional version); + #endif