Make Transcoder a virtual base.
authorCarl Hetherington <cth@carlh.net>
Tue, 9 May 2017 12:58:35 +0000 (13:58 +0100)
committerCarl Hetherington <cth@carlh.net>
Tue, 9 May 2017 12:58:35 +0000 (13:58 +0100)
src/lib/transcode_job.cc
src/lib/transcode_job.h
src/lib/transcoder.cc
src/lib/transcoder.h
src/lib/wscript

index 17108c27887917fd7ae11dfd94c688ba707980c2..17738deffaa97ac6c7420ad69b0636bfed91a6d6 100644 (file)
@@ -23,6 +23,7 @@
  */
 
 #include "transcode_job.h"
+#include "dcp_transcoder.h"
 #include "upload_job.h"
 #include "job_manager.h"
 #include "film.h"
@@ -71,7 +72,7 @@ TranscodeJob::run ()
                gettimeofday (&start, 0);
                LOG_GENERAL_NC (N_("Transcode job starting"));
 
-               _transcoder.reset (new Transcoder (_film, shared_from_this ()));
+               _transcoder.reset (new DCPTranscoder (_film, shared_from_this ()));
                _transcoder->go ();
                set_progress (1);
                set_state (FINISHED_OK);
@@ -134,7 +135,7 @@ int
 TranscodeJob::remaining_time () const
 {
        /* _transcoder might be destroyed by the job-runner thread */
-       shared_ptr<Transcoder> t = _transcoder;
+       shared_ptr<DCPTranscoder> t = _transcoder;
 
        if (!t || t->finishing()) {
                /* We aren't doing any actual encoding so just use the job's guess */
index 14ad693c370975a2ca0b0523eb948882240d600a..9e827e41259d1b0981a17edc2fa9488758577e0a 100644 (file)
@@ -25,7 +25,7 @@
 #include "job.h"
 #include <boost/shared_ptr.hpp>
 
-class Transcoder;
+class DCPTranscoder;
 
 /** @class TranscodeJob
  *  @brief A job which transcodes from one format to another.
@@ -43,5 +43,5 @@ public:
 private:
        int remaining_time () const;
 
-       boost::shared_ptr<Transcoder> _transcoder;
+       boost::shared_ptr<DCPTranscoder> _transcoder;
 };
index 21ef60b79d754609ba7256d5d1a8519bfb2a2f7a..c77bf7724c12a6b12472d0d3d41ad1450d00de18 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2012-2016 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2012-2017 Carl Hetherington <cth@carlh.net>
 
     This file is part of DCP-o-matic.
 
  */
 
 #include "transcoder.h"
-#include "encoder.h"
-#include "film.h"
-#include "video_decoder.h"
-#include "audio_decoder.h"
 #include "player.h"
-#include "job.h"
-#include "writer.h"
-#include "compose.hpp"
-#include "referenced_reel_asset.h"
-#include "subtitle_content.h"
-#include "player_video.h"
-#include <boost/signals2.hpp>
-#include <boost/foreach.hpp>
-#include <iostream>
 
 #include "i18n.h"
 
-using std::string;
-using std::cout;
-using std::list;
-using boost::shared_ptr;
 using boost::weak_ptr;
-using boost::dynamic_pointer_cast;
+using boost::shared_ptr;
 
 /** Construct a transcoder.
  *  @param film Film that we are transcoding.
@@ -58,86 +41,8 @@ Transcoder::Transcoder (shared_ptr<const Film> film, weak_ptr<Job> job)
        : _film (film)
        , _job (job)
        , _player (new Player (film, film->playlist ()))
-       , _writer (new Writer (film, job))
-       , _encoder (new Encoder (film, _writer))
-       , _finishing (false)
-       , _non_burnt_subtitles (false)
 {
        _player->Video.connect (bind (&Transcoder::video, this, _1, _2));
        _player->Audio.connect (bind (&Transcoder::audio, this, _1, _2));
        _player->Subtitle.connect (bind (&Transcoder::subtitle, this, _1, _2));
-
-       BOOST_FOREACH (shared_ptr<const Content> c, _film->content ()) {
-               if (c->subtitle && c->subtitle->use() && !c->subtitle->burn()) {
-                       _non_burnt_subtitles = true;
-               }
-       }
-}
-
-void
-Transcoder::go ()
-{
-       _writer->start ();
-       _encoder->begin ();
-
-       {
-               shared_ptr<Job> job = _job.lock ();
-               DCPOMATIC_ASSERT (job);
-               job->sub (_("Encoding"));
-       }
-
-       if (_non_burnt_subtitles) {
-               _writer->write (_player->get_subtitle_fonts ());
-       }
-
-       while (!_player->pass ()) {}
-
-       BOOST_FOREACH (ReferencedReelAsset i, _player->get_reel_assets ()) {
-               _writer->write (i);
-       }
-
-       _finishing = true;
-       _encoder->end ();
-       _writer->finish ();
-}
-
-void
-Transcoder::video (shared_ptr<PlayerVideo> data, DCPTime time)
-{
-       if (!_film->three_d() && data->eyes() == EYES_LEFT) {
-               /* Use left-eye images for both eyes */
-               data->set_eyes (EYES_BOTH);
-       }
-
-       _encoder->encode (data, time);
-}
-
-void
-Transcoder::audio (shared_ptr<AudioBuffers> data, DCPTime time)
-{
-       _writer->write (data);
-
-       shared_ptr<Job> job = _job.lock ();
-       DCPOMATIC_ASSERT (job);
-       job->set_progress (float(time.get()) / _film->length().get());
-}
-
-void
-Transcoder::subtitle (PlayerSubtitles data, DCPTimePeriod period)
-{
-       if (_non_burnt_subtitles) {
-               _writer->write (data, period);
-       }
-}
-
-float
-Transcoder::current_encoding_rate () const
-{
-       return _encoder->current_encoding_rate ();
-}
-
-int
-Transcoder::video_frames_enqueued () const
-{
-       return _encoder->video_frames_enqueued ();
 }
index 50cbfdfec6260fb5d3f0a891d5930b8ce3c5b3f5..b6378119b1062447b731bc4f00f44634f323bc44 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2012 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2012-2017 Carl Hetherington <cth@carlh.net>
 
     This file is part of DCP-o-matic.
 
@@ -18,6 +18,9 @@
 
 */
 
+#ifndef DCPOMATIC_TRANSCODER_H
+#define DCPOMATIC_TRANSCODER_H
+
 #include "types.h"
 #include "player_subtitles.h"
 #include <boost/weak_ptr.hpp>
@@ -25,7 +28,6 @@
 class Film;
 class Encoder;
 class Player;
-class Writer;
 class Job;
 class PlayerVideo;
 class AudioBuffers;
@@ -35,28 +37,21 @@ class Transcoder : public boost::noncopyable
 {
 public:
        Transcoder (boost::shared_ptr<const Film> film, boost::weak_ptr<Job> job);
+       virtual ~Transcoder () {}
 
-       void go ();
-
-       float current_encoding_rate () const;
-       int video_frames_enqueued () const;
+       virtual void go () = 0;
 
-       /** @return true if we are in the process of calling Encoder::process_end */
-       bool finishing () const {
-               return _finishing;
-       }
+       virtual float current_encoding_rate () const = 0;
+       virtual int video_frames_enqueued () const = 0;
 
-private:
-
-       void video (boost::shared_ptr<PlayerVideo>, DCPTime);
-       void audio (boost::shared_ptr<AudioBuffers>, DCPTime);
-       void subtitle (PlayerSubtitles, DCPTimePeriod);
+protected:
+       virtual void video (boost::shared_ptr<PlayerVideo>, DCPTime) = 0;
+       virtual void audio (boost::shared_ptr<AudioBuffers>, DCPTime) = 0;
+       virtual void subtitle (PlayerSubtitles, DCPTimePeriod) = 0;
 
        boost::shared_ptr<const Film> _film;
        boost::weak_ptr<Job> _job;
        boost::shared_ptr<Player> _player;
-       boost::shared_ptr<Writer> _writer;
-       boost::shared_ptr<Encoder> _encoder;
-       bool _finishing;
-       bool _non_burnt_subtitles;
 };
+
+#endif
index 765ee60a34bab30163fb106f4ea08c02f722934c..bf39ce2a77775d04b2b29ce5cea4595793fa27be 100644 (file)
@@ -56,6 +56,7 @@ sources = """
           dcp_subtitle.cc
           dcp_subtitle_content.cc
           dcp_subtitle_decoder.cc
+          dcp_transcoder.cc
           dcp_video.cc
           dcpomatic_socket.cc
           dcpomatic_time.cc