*/
Encoder::Encoder (shared_ptr<const Film> film, shared_ptr<Writer> writer)
: _film (film)
- , _writer (writer)
, _history (200)
+ , _writer (writer)
{
servers_list_changed ();
}
*/
+#ifndef DCPOMATIC_EVENT_HISTORY_H
+#define DCPOMATIC_EVENT_HISTORY_H
+
#include <boost/thread/mutex.hpp>
#include <list>
/** Number of events that we should keep history for */
int const _size;
};
+
+#endif
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);
*/
+#ifndef DCPOMATIC_FFMPEG_TRANSCODER_H
+#define DCPOMATIC_FFMPEG_TRANSCODER_H
+
#include "transcoder.h"
#include "event_history.h"
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 ();
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);
AVFormatContext* _format_context;
AVStream* _video_stream;
AVPixelFormat _pixel_format;
+ std::string _codec_name;
mutable boost::mutex _mutex;
DCPTime _last_time;
boost::filesystem::path _output;
};
+
+#endif
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);
}
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)
{
_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));
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 ("");
}
{
return wx_to_std (_file->GetPath ());
}
+
+FFmpegTranscoder::Format
+ExportDialog::format () const
+{
+ DCPOMATIC_ASSERT (_format->GetSelection() >= 0 && _format->GetSelection() < FORMATS);
+ return formats[_format->GetSelection()];
+}
*/
#include "table_dialog.h"
+#include "lib/ffmpeg_transcoder.h"
#include <wx/wx.h>
#include <boost/filesystem.hpp>
ExportDialog (wxWindow* parent);
boost::filesystem::path path () const;
+ FFmpegTranscoder::Format format () const;
private:
void format_changed ();
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 ();
}