Cleanup: use some more make_shared.
[dcpomatic.git] / src / lib / ffmpeg_file_encoder.cc
index 705557f799b3b76f434eb182fe116b4a32b03e85..9189c3e8347d8403d077a27448d0178c4543a7be 100644 (file)
@@ -127,14 +127,15 @@ public:
                return false;
        }
 
-       void write (int size, int channel_offset, int channels, float** data, int64_t sample_offset)
+       void write (int size, int channel_offset, int channels, float* const* data, int64_t sample_offset)
        {
                DCPOMATIC_ASSERT (size);
 
                auto frame = av_frame_alloc ();
                DCPOMATIC_ASSERT (frame);
 
-               int const buffer_size = av_samples_get_buffer_size (0, channels, size, _codec_context->sample_fmt, 0);
+               int line_size;
+               int const buffer_size = av_samples_get_buffer_size (&line_size, channels, size, _codec_context->sample_fmt, 0);
                DCPOMATIC_ASSERT (buffer_size >= 0);
 
                auto samples = av_malloc (buffer_size);
@@ -169,10 +170,8 @@ public:
                }
                case AV_SAMPLE_FMT_FLTP:
                {
-                       float* q = reinterpret_cast<float*> (samples);
                        for (int i = 0; i < channels; ++i) {
-                               memcpy (q, data[i + channel_offset], sizeof(float) * size);
-                               q += size;
+                               memcpy (reinterpret_cast<float*>(static_cast<uint8_t*>(samples) + i * line_size), data[i + channel_offset], sizeof(float) * size);
                        }
                        break;
                }
@@ -272,7 +271,7 @@ FFmpegFileEncoder::FFmpegFileEncoder (
                throw EncodeError (N_("avformat_write_header"), N_("FFmpegFileEncoder::FFmpegFileEncoder"), r);
        }
 
-       _pending_audio.reset (new AudioBuffers(channels, 0));
+       _pending_audio = make_shared<AudioBuffers>(channels, 0);
 }
 
 
@@ -400,7 +399,7 @@ FFmpegFileEncoder::video (shared_ptr<PlayerVideo> video, DCPTime time)
 {
        /* All our output formats are video range at the moment */
        auto image = video->image (
-               bind (&PlayerVideo::force, _1, _pixel_format),
+               bind (&PlayerVideo::force, _pixel_format),
                VideoRange::VIDEO,
                false
                );