Commit 226eb263 authored by Max Kellermann's avatar Max Kellermann

filter/ffmpeg: interleave the output AVFrame

If the FFmpeg filter outputs planar data, interleave it, just like the FFmpeg decoder plugin does.
parent 2d606fa9
......@@ -3,6 +3,7 @@ ver 0.22.3 (not yet released)
- add option "as_directory", making CUE file expansion optional
* filter
- fix garbage after "Audio format not supported by filter" message
- ffmpeg: support planar output
ver 0.22.2 (2020/10/28)
* database
......
......@@ -18,6 +18,7 @@
*/
#include "FfmpegFilter.hxx"
#include "lib/ffmpeg/Interleave.hxx"
#include "lib/ffmpeg/SampleFormat.hxx"
#include "util/ConstBuffer.hxx"
......@@ -79,5 +80,5 @@ FfmpegFilter::FilterPCM(ConstBuffer<void> src)
/* TODO: call av_buffersink_get_frame() repeatedly? Not
possible with MPD's current Filter API */
return {frame.GetData(0), frame->nb_samples * GetOutAudioFormat().GetFrameSize()};
return Ffmpeg::InterleaveFrame(*frame, interleave_buffer);
}
......@@ -21,6 +21,7 @@
#define MPD_FFMPEG_FILTER__HXX
#include "filter/Filter.hxx"
#include "lib/ffmpeg/Buffer.hxx"
#include "lib/ffmpeg/Filter.hxx"
#include "lib/ffmpeg/Frame.hxx"
......@@ -32,6 +33,8 @@ class FfmpegFilter final : public Filter {
Ffmpeg::FilterContext buffer_src, buffer_sink;
Ffmpeg::Frame frame;
FfmpegBuffer interleave_buffer;
const int in_format, in_sample_rate, in_channels;
const size_t in_audio_frame_size;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment