Fix output file for export.
[dcpomatic.git] / src / lib / ffmpeg_transcoder.cc
index 19c55ff7ab22f824940e0cdbc7808af9f0031774..510966f0c16422a81cd6ed705c73d620e54c92d3 100644 (file)
@@ -43,21 +43,25 @@ 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";
+               break;
+       }
 }
 
 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 encoder %1", _codec_name));
        }
 
        _codec_context = avcodec_alloc_context3 (codec);
@@ -75,7 +79,6 @@ FFmpegTranscoder::go ()
        _codec_context->pix_fmt = _pixel_format;
        _codec_context->flags |= CODEC_FLAG_QSCALE | CODEC_FLAG_GLOBAL_HEADER;
 
-       boost::filesystem::path filename = _film->file(_film->isdcf_name(true) + ".mov");
        avformat_alloc_output_context2 (&_format_context, 0, 0, _output.string().c_str());
        if (!_format_context) {
                throw runtime_error ("could not allocate FFmpeg format context");
@@ -98,7 +101,7 @@ FFmpegTranscoder::go ()
                throw runtime_error ("could not open FFmpeg codec");
        }
 
-       if (avio_open (&_format_context->pb, filename.c_str(), AVIO_FLAG_WRITE) < 0) {
+       if (avio_open (&_format_context->pb, _output.c_str(), AVIO_FLAG_WRITE) < 0) {
                throw runtime_error ("could not open FFmpeg output file");
        }