+ int const process_channels = av_get_channel_layout_nb_channels (_channel_layout);
+ DCPOMATIC_ASSERT (process_channels >= buffers->channels());
+
+ if (buffers->channels() < process_channels) {
+ /* We are processing more data than we actually have (see the hack in
+ the constructor) so we need to create new buffers with some extra
+ silent channels.
+ */
+ shared_ptr<AudioBuffers> extended_buffers (new AudioBuffers (process_channels, buffers->frames()));
+ for (int i = 0; i < buffers->channels(); ++i) {
+ extended_buffers->copy_channel_from (buffers.get(), i, i);
+ }
+ for (int i = buffers->channels(); i < process_channels; ++i) {
+ extended_buffers->make_silent (i);
+ }
+
+ buffers = extended_buffers;
+ }
+
+ _in_frame->extended_data = new uint8_t*[process_channels];