]> git.sesse.net Git - casparcg/blobdiff - modules/ffmpeg/producer/filter/audio_filter.h
ffmpeg_producer: Multiple audio streams are now merged (flattened) before the audio...
[casparcg] / modules / ffmpeg / producer / filter / audio_filter.h
index 71b71f0a4593d71b5061cfc323d5ca426036c2ed..370bed04530a868571cfccfc3671a7104f30e91e 100644 (file)
@@ -45,24 +45,56 @@ struct AVFrame;
 
 namespace caspar { namespace ffmpeg {
 
+struct audio_input_pad
+{
+       boost::rational<int>    time_base;
+       int                                             sample_rate;
+       AVSampleFormat                  sample_fmt;
+       std::int64_t                    audio_channel_layout;
+
+       audio_input_pad(
+                       boost::rational<int> time_base,
+                       int sample_rate,
+                       AVSampleFormat sample_fmt,
+                       std::int64_t audio_channel_layout)
+               : time_base(std::move(time_base))
+               , sample_rate(sample_rate)
+               , sample_fmt(sample_fmt)
+               , audio_channel_layout(audio_channel_layout)
+       {
+       }
+};
+
+struct audio_output_pad
+{
+       std::vector<int>                        sample_rates;
+       std::vector<AVSampleFormat>     sample_fmts;
+       std::vector<std::int64_t>       audio_channel_layouts;
+
+       audio_output_pad(
+                       std::vector<int> sample_rates,
+                       std::vector<AVSampleFormat> sample_fmts,
+                       std::vector<std::int64_t> audio_channel_layouts)
+               : sample_rates(std::move(sample_rates))
+               , sample_fmts(std::move(sample_fmts))
+               , audio_channel_layouts(std::move(audio_channel_layouts))
+       {
+       }
+};
+
 class audio_filter : boost::noncopyable
 {
 public:
        audio_filter(
-                       boost::rational<int> in_time_base,
-                       int in_sample_rate,
-                       AVSampleFormat in_sample_fmt,
-                       std::int64_t in_audio_channel_layout,
-                       std::vector<int> out_sample_rates,
-                       std::vector<AVSampleFormat> out_sample_fmts,
-                       std::vector<std::int64_t> out_audio_channel_layouts,
+                       std::vector<audio_input_pad> input_pads,
+                       std::vector<audio_output_pad> output_pads,
                        const std::string& filtergraph);
        audio_filter(audio_filter&& other);
        audio_filter& operator=(audio_filter&& other);
 
-       void push(const std::shared_ptr<AVFrame>& frame);
-       std::shared_ptr<AVFrame> poll();
-       std::vector<spl::shared_ptr<AVFrame>> poll_all();
+       void push(int input_pad_id, const std::shared_ptr<AVFrame>& frame);
+       std::shared_ptr<AVFrame> poll(int output_pad_id);
+       std::vector<spl::shared_ptr<AVFrame>> poll_all(int output_pad_id);
 
        std::wstring filter_str() const;
 private: