summaryrefslogtreecommitdiff
path: root/src/lib/film.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/film.cc')
-rw-r--r--src/lib/film.cc72
1 files changed, 70 insertions, 2 deletions
diff --git a/src/lib/film.cc b/src/lib/film.cc
index 00d37c097..31af2f1c2 100644
--- a/src/lib/film.cc
+++ b/src/lib/film.cc
@@ -27,9 +27,10 @@
#include <unistd.h>
#include <boost/filesystem.hpp>
#include <boost/algorithm/string.hpp>
+#include <boost/lexical_cast.hpp>
#include "film.h"
#include "format.h"
-#include "tiff_encoder.h"
+#include "imagemagick_encoder.h"
#include "job.h"
#include "filter.h"
#include "transcoder.h"
@@ -217,6 +218,7 @@ Film::set_content (string c)
_state.audio_channels = d->audio_channels ();
_state.audio_sample_rate = d->audio_sample_rate ();
_state.audio_sample_format = d->audio_sample_format ();
+ _state.has_subtitles = d->has_subtitles ();
_state.content_digest = md5_digest (s->content_path ());
_state.content = c;
@@ -395,7 +397,7 @@ Film::update_thumbs_post_gui ()
string const l = i->leaf ();
#endif
- size_t const d = l.find (".tiff");
+ size_t const d = l.find (".png");
if (d != string::npos) {
_state.thumbs.push_back (atoi (l.substr (0, d).c_str()));
}
@@ -533,6 +535,7 @@ Film::make_dcp (bool transcode, int freq)
o->decode_video_frequency = freq;
o->padding = format()->dcp_padding (this);
o->ratio = format()->ratio_as_float (this);
+ o->decode_subtitles = with_subtitles ();
shared_ptr<Job> r;
@@ -660,3 +663,68 @@ Film::encoded_frames () const
return N;
}
+
+void
+Film::set_with_subtitles (bool w)
+{
+ _state.with_subtitles = w;
+ signal_changed (WITH_SUBTITLES);
+}
+
+void
+Film::set_subtitle_offset (int o)
+{
+ _state.subtitle_offset = o;
+ signal_changed (SUBTITLE_OFFSET);
+}
+
+void
+Film::set_subtitle_scale (float s)
+{
+ _state.subtitle_scale = s;
+ signal_changed (SUBTITLE_SCALE);
+}
+
+list<pair<Position, string> >
+Film::thumb_subtitles (int n) const
+{
+ string sub_file = _state.thumb_base(n) + ".sub";
+ if (!filesystem::exists (sub_file)) {
+ return list<pair<Position, string> > ();
+ }
+
+ ifstream f (sub_file.c_str ());
+ string line;
+
+ int sub_number;
+ int sub_x;
+ list<pair<Position, string> > subs;
+
+ while (getline (f, line)) {
+ if (line.empty ()) {
+ continue;
+ }
+
+ if (line[line.size() - 1] == '\r') {
+ line = line.substr (0, line.size() - 1);
+ }
+
+ size_t const s = line.find (' ');
+ if (s == string::npos) {
+ continue;
+ }
+
+ string const k = line.substr (0, s);
+ int const v = lexical_cast<int> (line.substr(s + 1));
+
+ if (k == "image") {
+ sub_number = v;
+ } else if (k == "x") {
+ sub_x = v;
+ } else if (k == "y") {
+ subs.push_back (make_pair (Position (sub_x, v), String::compose ("%1.sub.%2.png", _state.thumb_base(n), sub_number)));
+ }
+ }
+
+ return subs;
+}