summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2018-07-19 21:33:52 +0100
committerCarl Hetherington <cth@carlh.net>2018-07-19 23:45:23 +0100
commit11fe3ab56ad59b8b5525fa795d44d2323ef6d5b8 (patch)
tree3bd7b96fee95bf6b34acdfbfdb47c92bfb5c818b /src/lib
parent0ab83642f0c96ae2681beae04873b3226338a570 (diff)
Get types into ReelWriter.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/dcp_encoder.cc10
-rw-r--r--src/lib/dcp_encoder.h4
-rw-r--r--src/lib/player.cc2
-rw-r--r--src/lib/player.h4
-rw-r--r--src/lib/reel_writer.cc4
-rw-r--r--src/lib/reel_writer.h2
-rw-r--r--src/lib/writer.cc20
-rw-r--r--src/lib/writer.h4
8 files changed, 27 insertions, 23 deletions
diff --git a/src/lib/dcp_encoder.cc b/src/lib/dcp_encoder.cc
index c38d73276..cfc7da903 100644
--- a/src/lib/dcp_encoder.cc
+++ b/src/lib/dcp_encoder.cc
@@ -61,7 +61,7 @@ DCPEncoder::DCPEncoder (shared_ptr<const Film> film, weak_ptr<Job> job)
{
_player_video_connection = _player->Video.connect (bind (&DCPEncoder::video, this, _1, _2));
_player_audio_connection = _player->Audio.connect (bind (&DCPEncoder::audio, this, _1, _2));
- _player_subtitle_connection = _player->Subtitle.connect (bind (&DCPEncoder::subtitle, this, _1, _2));
+ _player_text_connection = _player->Text.connect (bind (&DCPEncoder::text, this, _1, _2, _3));
BOOST_FOREACH (shared_ptr<const Content> c, film->content ()) {
if (c->subtitle && c->subtitle->use() && !c->subtitle->burn()) {
@@ -75,7 +75,7 @@ DCPEncoder::~DCPEncoder ()
/* We must stop receiving more video data before we die */
_player_video_connection.release ();
_player_audio_connection.release ();
- _player_subtitle_connection.release ();
+ _player_text_connection.release ();
}
void
@@ -141,10 +141,10 @@ DCPEncoder::audio (shared_ptr<AudioBuffers> data, DCPTime time)
}
void
-DCPEncoder::subtitle (PlayerText data, DCPTimePeriod period)
+DCPEncoder::text (PlayerText data, TextType type, DCPTimePeriod period)
{
- if (_non_burnt_subtitles) {
- _writer->write (data, period);
+ if (type == TEXT_CLOSED_CAPTION || _non_burnt_subtitles) {
+ _writer->write (data, type, period);
}
}
diff --git a/src/lib/dcp_encoder.h b/src/lib/dcp_encoder.h
index 7fbb076f3..8a2ad947d 100644
--- a/src/lib/dcp_encoder.h
+++ b/src/lib/dcp_encoder.h
@@ -52,7 +52,7 @@ private:
void video (boost::shared_ptr<PlayerVideo>, DCPTime);
void audio (boost::shared_ptr<AudioBuffers>, DCPTime);
- void subtitle (PlayerText, DCPTimePeriod);
+ void text (PlayerText, TextType, DCPTimePeriod);
boost::shared_ptr<Writer> _writer;
boost::shared_ptr<J2KEncoder> _j2k_encoder;
@@ -61,5 +61,5 @@ private:
boost::signals2::scoped_connection _player_video_connection;
boost::signals2::scoped_connection _player_audio_connection;
- boost::signals2::scoped_connection _player_subtitle_connection;
+ boost::signals2::scoped_connection _player_text_connection;
};
diff --git a/src/lib/player.cc b/src/lib/player.cc
index 36ffd1868..e300b5448 100644
--- a/src/lib/player.cc
+++ b/src/lib/player.cc
@@ -929,7 +929,7 @@ Player::subtitle_stop (weak_ptr<Piece> wp, ContentTime to, TextType type)
pair<PlayerText, DCPTime> from = _active_text[type].add_to (wp, dcp_to);
if (piece->content->subtitle->use() && !_always_burn_subtitles && !piece->content->subtitle->burn()) {
- Subtitle (from.first, DCPTimePeriod (from.second, dcp_to));
+ Text (from.first, type, DCPTimePeriod (from.second, dcp_to));
}
}
diff --git a/src/lib/player.h b/src/lib/player.h
index a4170f83e..c936524a2 100644
--- a/src/lib/player.h
+++ b/src/lib/player.h
@@ -98,10 +98,10 @@ public:
/** Emitted when a video frame is ready. These emissions happen in the correct order. */
boost::signals2::signal<void (boost::shared_ptr<PlayerVideo>, DCPTime)> Video;
boost::signals2::signal<void (boost::shared_ptr<AudioBuffers>, DCPTime)> Audio;
- /** Emitted when a subtitle is ready. This signal may be emitted considerably
+ /** Emitted when a caption is ready. This signal may be emitted considerably
* after the corresponding Video.
*/
- boost::signals2::signal<void (PlayerText, DCPTimePeriod)> Subtitle;
+ boost::signals2::signal<void (PlayerText, TextType, DCPTimePeriod)> Text;
private:
friend class PlayerWrapper;
diff --git a/src/lib/reel_writer.cc b/src/lib/reel_writer.cc
index d23ac76d1..8eb0461bc 100644
--- a/src/lib/reel_writer.cc
+++ b/src/lib/reel_writer.cc
@@ -528,8 +528,10 @@ ReelWriter::write (shared_ptr<const AudioBuffers> audio)
}
void
-ReelWriter::write (PlayerText subs, DCPTimePeriod period)
+ReelWriter::write (PlayerText subs, TextType type, DCPTimePeriod period)
{
+ /* XXX: we need separate libdcp asset types here and to know how different they are */
+
if (!_subtitle_asset) {
string lang = _film->subtitle_language ();
if (lang.empty ()) {
diff --git a/src/lib/reel_writer.h b/src/lib/reel_writer.h
index 37e950ae6..6de1de68d 100644
--- a/src/lib/reel_writer.h
+++ b/src/lib/reel_writer.h
@@ -60,7 +60,7 @@ public:
void fake_write (Frame frame, Eyes eyes, int size);
void repeat_write (Frame frame, Eyes eyes);
void write (boost::shared_ptr<const AudioBuffers> audio);
- void write (PlayerText subs, DCPTimePeriod period);
+ void write (PlayerText text, TextType type, DCPTimePeriod period);
void finish ();
boost::shared_ptr<dcp::Reel> create_reel (std::list<ReferencedReelAsset> const & refs, std::list<boost::shared_ptr<Font> > const & fonts);
diff --git a/src/lib/writer.cc b/src/lib/writer.cc
index a5e8cd9d2..7b2944d32 100644
--- a/src/lib/writer.cc
+++ b/src/lib/writer.cc
@@ -91,11 +91,13 @@ Writer::Writer (shared_ptr<const Film> film, weak_ptr<Job> j)
_reels.push_back (ReelWriter (film, p, job, reel_index++, reels.size(), _film->content_summary(p)));
}
- /* We can keep track of the current audio and subtitle reels easily because audio
- and subs arrive to the Writer in sequence. This is not so for video.
+ /* We can keep track of the current audio, subtitle and closed caption reels easily because audio
+ and captions arrive to the Writer in sequence. This is not so for video.
*/
_audio_reel = _reels.begin ();
- _subtitle_reel = _reels.begin ();
+ for (int i = 0; i < TEXT_COUNT; ++i) {
+ _text_reel[i] = _reels.begin ();
+ }
/* Check that the signer is OK if we need one */
string reason;
@@ -663,16 +665,16 @@ Writer::can_fake_write (Frame frame) const
}
void
-Writer::write (PlayerText subs, DCPTimePeriod period)
+Writer::write (PlayerText text, TextType type, DCPTimePeriod period)
{
- while (_subtitle_reel->period().to <= period.from) {
- ++_subtitle_reel;
- DCPOMATIC_ASSERT (_subtitle_reel != _reels.end());
+ while (_text_reel[type]->period().to <= period.from) {
+ ++_text_reel[type];
+ DCPOMATIC_ASSERT (_text_reel[type] != _reels.end());
}
- DCPOMATIC_ASSERT (_subtitle_reel != _reels.end());
+ DCPOMATIC_ASSERT (_text_reel[type] != _reels.end());
- _subtitle_reel->write (subs, period);
+ _text_reel[type]->write (text, type, period);
}
void
diff --git a/src/lib/writer.h b/src/lib/writer.h
index c8d188834..484ca1285 100644
--- a/src/lib/writer.h
+++ b/src/lib/writer.h
@@ -104,7 +104,7 @@ public:
bool can_repeat (Frame) const;
void repeat (Frame, Eyes);
void write (boost::shared_ptr<const AudioBuffers>, DCPTime time);
- void write (PlayerText subs, DCPTimePeriod period);
+ void write (PlayerText text, TextType type, DCPTimePeriod period);
void write (std::list<boost::shared_ptr<Font> > fonts);
void write (ReferencedReelAsset asset);
void finish ();
@@ -124,7 +124,7 @@ private:
boost::weak_ptr<Job> _job;
std::vector<ReelWriter> _reels;
std::vector<ReelWriter>::iterator _audio_reel;
- std::vector<ReelWriter>::iterator _subtitle_reel;
+ std::vector<ReelWriter>::iterator _text_reel[TEXT_COUNT];
/** our thread, or 0 */
boost::thread* _thread;