Some export tidying up.
authorCarl Hetherington <cth@carlh.net>
Tue, 9 May 2017 22:08:34 +0000 (23:08 +0100)
committerCarl Hetherington <cth@carlh.net>
Tue, 9 May 2017 22:08:34 +0000 (23:08 +0100)
src/lib/encoder.cc
src/lib/event_history.h
src/lib/ffmpeg_transcoder.cc
src/lib/ffmpeg_transcoder.h
src/tools/dcpomatic.cc
src/wx/export_dialog.cc
src/wx/export_dialog.h
test/ffmpeg_transcoder_test.cc

index e82c4af7e3e1637c40240a106a65f6be65e051e6..2d916d47e44c44e1a46bbca71dbda1f7b54a3e94 100644 (file)
@@ -59,8 +59,8 @@ using dcp::Data;
  */
 Encoder::Encoder (shared_ptr<const Film> film, shared_ptr<Writer> writer)
        : _film (film)
-       , _writer (writer)
        , _history (200)
+       , _writer (writer)
 {
        servers_list_changed ();
 }
index 5b0f9a6a3879a876810cacb772a1aa1d08761405..f723591fbd19bd81c0fa052e997a59c88195a22c 100644 (file)
@@ -18,6 +18,9 @@
 
 */
 
+#ifndef DCPOMATIC_EVENT_HISTORY_H
+#define DCPOMATIC_EVENT_HISTORY_H
+
 #include <boost/thread/mutex.hpp>
 #include <list>
 
@@ -39,3 +42,5 @@ private:
        /** Number of events that we should keep history for */
        int const _size;
 };
+
+#endif
index 19c55ff7ab22f824940e0cdbc7808af9f0031774..b3d1e9926a1e51b9c575a7223b75bd57430e8108 100644 (file)
@@ -43,21 +43,24 @@ force_pixel_format (AVPixelFormat, AVPixelFormat out)
        return out;
 }
 
-FFmpegTranscoder::FFmpegTranscoder (shared_ptr<const Film> film, weak_ptr<Job> job)
+FFmpegTranscoder::FFmpegTranscoder (shared_ptr<const Film> film, weak_ptr<Job> job, boost::filesystem::path output, Format format)
        : Transcoder (film, job)
-       , _pixel_format (AV_PIX_FMT_YUV422P10)
        , _history (1000)
+       , _output (output)
 {
-
+       switch (format) {
+       case FORMAT_PRORES:
+               _pixel_format = AV_PIX_FMT_YUV422P10;
+               _codec_name = "prores_ks";
+       }
 }
 
 void
 FFmpegTranscoder::go ()
 {
-       string const codec_name = "prores_ks";
-       AVCodec* codec = avcodec_find_encoder_by_name (codec_name.c_str());
+       AVCodec* codec = avcodec_find_encoder_by_name (_codec_name.c_str());
        if (!codec) {
-               throw runtime_error (String::compose ("could not find FFmpeg codec %1", codec_name));
+               throw runtime_error (String::compose ("could not find FFmpeg codec %1", _codec_name));
        }
 
        _codec_context = avcodec_alloc_context3 (codec);
index 5380e84b01802a9f1448405f5358de9dcd2f7b2a..9799285e2521f584ac17568389ca6d90216266d8 100644 (file)
@@ -18,6 +18,9 @@
 
 */
 
+#ifndef DCPOMATIC_FFMPEG_TRANSCODER_H
+#define DCPOMATIC_FFMPEG_TRANSCODER_H
+
 #include "transcoder.h"
 #include "event_history.h"
 extern "C" {
@@ -28,7 +31,12 @@ extern "C" {
 class FFmpegTranscoder : public Transcoder
 {
 public:
-       FFmpegTranscoder (boost::shared_ptr<const Film> film, boost::weak_ptr<Job> job);
+       enum Format
+       {
+               FORMAT_PRORES
+       };
+
+       FFmpegTranscoder (boost::shared_ptr<const Film> film, boost::weak_ptr<Job> job, boost::filesystem::path output, Format format);
 
        void go ();
 
@@ -38,10 +46,6 @@ public:
                return false;
        }
 
-       void set_output (boost::filesystem::path o) {
-               _output = o;
-       }
-
 private:
        void video (boost::shared_ptr<PlayerVideo>, DCPTime);
        void audio (boost::shared_ptr<AudioBuffers>, DCPTime);
@@ -51,6 +55,7 @@ private:
        AVFormatContext* _format_context;
        AVStream* _video_stream;
        AVPixelFormat _pixel_format;
+       std::string _codec_name;
 
        mutable boost::mutex _mutex;
        DCPTime _last_time;
@@ -59,3 +64,5 @@ private:
 
        boost::filesystem::path _output;
 };
+
+#endif
index ccaa44edb74742cb288ca38258f222c7ce736a66..c193366312af286b18908724a9f3111438762703 100644 (file)
@@ -707,8 +707,7 @@ private:
                ExportDialog* d = new ExportDialog (this);
                if (d->ShowModal() == wxID_OK) {
                        shared_ptr<TranscodeJob> job (new TranscodeJob (_film));
-                       shared_ptr<FFmpegTranscoder> tx (new FFmpegTranscoder (_film, job));
-                       tx->set_output (d->path ());
+                       shared_ptr<FFmpegTranscoder> tx (new FFmpegTranscoder (_film, job, d->path(), d->format()));
                        job->set_transcoder (tx);
                        JobManager::instance()->add (job);
                }
index e21a49e8af633971b0dd1116844d05d880c95450..fb50e11347a2179c2d012de7f201b5a8758323c3 100644 (file)
 
 using boost::bind;
 
+#define FORMATS 1
+
+wxString format_names[] = {
+       _("ProRes"),
+};
+
+wxString format_filters[] = {
+       _("MOV files (*.mov)|*.mov"),
+};
+
+FFmpegTranscoder::Format formats[] = {
+       FFmpegTranscoder::FORMAT_PRORES,
+};
+
 ExportDialog::ExportDialog (wxWindow* parent)
        : TableDialog (parent, _("Export film"), 2, 1, true)
 {
@@ -32,10 +46,12 @@ ExportDialog::ExportDialog (wxWindow* parent)
        _format = new wxChoice (this, wxID_ANY);
        add (_format);
        add (_("Output file"), true);
-       _file = new FilePickerCtrl (this, _("Select output file"), _("MOV files (*.mov)|*.mov"), false);
+       _file = new FilePickerCtrl (this, _("Select output file"), format_filters[0], false);
        add (_file);
 
-       _format->Append (_("ProRes 422"));
+       for (int i = 0; i < FORMATS; ++i) {
+               _format->Append (format_names[i]);
+       }
        _format->SetSelection (0);
 
        _format->Bind (wxEVT_CHOICE, bind (&ExportDialog::format_changed, this));
@@ -46,12 +62,8 @@ ExportDialog::ExportDialog (wxWindow* parent)
 void
 ExportDialog::format_changed ()
 {
-       switch (_format->GetSelection()) {
-       case 0:
-               _file->SetWildcard (_("MOV files (*.mov)"));
-               break;
-       }
-
+       DCPOMATIC_ASSERT (_format->GetSelection() >= 0 && _format->GetSelection() < FORMATS);
+       _file->SetWildcard (format_filters[_format->GetSelection()]);
        _file->SetPath ("");
 }
 
@@ -60,3 +72,10 @@ ExportDialog::path () const
 {
        return wx_to_std (_file->GetPath ());
 }
+
+FFmpegTranscoder::Format
+ExportDialog::format () const
+{
+       DCPOMATIC_ASSERT (_format->GetSelection() >= 0 && _format->GetSelection() < FORMATS);
+       return formats[_format->GetSelection()];
+}
index 8f0be7194abd0bf5215feab4d4371b9e841be40f..04a516bca6bd49148f1c1b16370847acf4e6b843 100644 (file)
@@ -19,6 +19,7 @@
 */
 
 #include "table_dialog.h"
+#include "lib/ffmpeg_transcoder.h"
 #include <wx/wx.h>
 #include <boost/filesystem.hpp>
 
@@ -30,6 +31,7 @@ public:
        ExportDialog (wxWindow* parent);
 
        boost::filesystem::path path () const;
+       FFmpegTranscoder::Format format () const;
 
 private:
        void format_changed ();
index c97287cb7843f2593a7854bf6ab7fd6a075ed087..bf4f991f8ebfce87414e7661474a5f7aaa3519a4 100644 (file)
@@ -40,6 +40,6 @@ BOOST_AUTO_TEST_CASE (ffmpeg_transcoder_basic_test)
        wait_for_jobs ();
 
        shared_ptr<Job> job (new TranscodeJob (film));
-       FFmpegTranscoder transcoder (film, job);
+       FFmpegTranscoder transcoder (film, job, "build/test/ffmpeg_transcoder_basic_test/test.mov", FFmpegTranscoder::FORMAT_PRORES);
        transcoder.go ();
 }