filter/ffmpeg: interleave the output AVFrame
If the FFmpeg filter outputs planar data, interleave it, just like the FFmpeg decoder plugin does.
This commit is contained in:
parent
2d606fa989
commit
226eb26300
1
NEWS
1
NEWS
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue