#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);
}