_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) {
+ _caption_reel[i] = _reels.begin ();
+ }
/* Check that the signer is OK if we need one */
string reason;
DCPOMATIC_ASSERT (i != _queue.rend());
++_pushed_to_disk;
/* For the log message below */
- int const awaiting = _reels[_queue.front().reel].last_written_video_frame();
+ int const awaiting = _reels[_queue.front().reel].last_written_video_frame() + 1;
lock.unlock ();
/* i is valid here, even though we don't hold a lock on the mutex,
}
void
-Writer::write (PlayerSubtitles subs, DCPTimePeriod period)
+Writer::write (PlayerText text, TextType type, DCPTimePeriod period)
{
- if (subs.text.empty ()) {
- return;
- }
-
- while (_subtitle_reel->period().to <= period.from) {
- ++_subtitle_reel;
- DCPOMATIC_ASSERT (_subtitle_reel != _reels.end());
+ while (_caption_reel[type]->period().to <= period.from) {
+ ++_caption_reel[type];
+ DCPOMATIC_ASSERT (_caption_reel[type] != _reels.end());
}
- DCPOMATIC_ASSERT (_subtitle_reel != _reels.end());
+ DCPOMATIC_ASSERT (_caption_reel[type] != _reels.end());
- _subtitle_reel->write (subs);
+ _caption_reel[type]->write (text, type, period);
}
void