- _encoder->process_begin ();
- while (!_player->pass ()) {}
- _encoder->process_end ();
+ _encoder->begin ();
+
+ DCPTime const frame = DCPTime::from_frames (1, _film->video_frame_rate ());
+ DCPTime const length = _film->length ();
+
+ if (!_film->burn_subtitles ()) {
+ _writer->write (_player->get_subtitle_fonts ());
+ }
+
+ for (DCPTime t; t < length; t += frame) {
+ list<shared_ptr<PlayerVideo> > v = _player->get_video (t, true);
+ for (list<shared_ptr<PlayerVideo> >::const_iterator i = v.begin(); i != v.end(); ++i) {
+ _encoder->enqueue (*i);
+ }
+ _writer->write (_player->get_audio (t, frame, true));
+ if (!_film->burn_subtitles ()) {
+ _writer->write (_player->get_subtitles (t, frame, true));
+ }
+ }
+
+ _finishing = true;
+ _encoder->end ();
+ _writer->finish ();
+
+ _player->statistics().dump (_film->log ());