Various markup and tweaks.
[dcpomatic.git] / src / lib / stream.cc
index e40738990fab050e4de0963628b30ebc6e7afc8a..e5a2bbc2b92de72ec999ff22a7aa3d710a0420ac 100644 (file)
 #include <sstream>
 #include "compose.hpp"
 #include "stream.h"
+#include "ffmpeg_decoder.h"
+#include "external_audio_decoder.h"
 
-using namespace std;
+#include "i18n.h"
 
-Stream::Stream (string t)
+using std::string;
+using std::stringstream;
+using boost::shared_ptr;
+using boost::optional;
+
+/** Construct a SubtitleStream from a value returned from to_string().
+ *  @param t String returned from to_string().
+ *  @param v State file version.
+ */
+SubtitleStream::SubtitleStream (string t, boost::optional<int>)
 {
        stringstream n (t);
-       n >> id;
-       
+       n >> _id;
+
        size_t const s = t.find (' ');
        if (s != string::npos) {
-               name = t.substr (s + 1);
+               _name = t.substr (s + 1);
        }
 }
 
+/** @return A canonical string representation of this stream */
 string
-Stream::to_string () const
+SubtitleStream::to_string () const
+{
+       return String::compose (N_("%1 %2"), _id, _name);
+}
+
+/** Create a SubtitleStream from a value returned from to_string().
+ *  @param t String returned from to_string().
+ *  @param v State file version.
+ */
+shared_ptr<SubtitleStream>
+SubtitleStream::create (string t, optional<int> v)
+{
+       return shared_ptr<SubtitleStream> (new SubtitleStream (t, v));
+}
+
+/** Create an AudioStream from a string returned from to_string().
+ *  @param t String returned from to_string().
+ *  @param v State file version.
+ *  @return AudioStream, or 0.
+ */
+shared_ptr<AudioStream>
+audio_stream_factory (string t, optional<int> v)
+{
+       shared_ptr<AudioStream> s;
+
+       s = FFmpegAudioStream::create (t, v);
+       if (!s) {
+               s = ExternalAudioStream::create (t, v);
+       }
+
+       return s;
+}
+
+/** Create a SubtitleStream from a string returned from to_string().
+ *  @param t String returned from to_string().
+ *  @param v State file version.
+ *  @return SubtitleStream, or 0.
+ */
+shared_ptr<SubtitleStream>
+subtitle_stream_factory (string t, optional<int> v)
 {
-       return String::compose ("%1 %2", id, name);
+       return SubtitleStream::create (t, v);
 }