11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
19PROMEKI_NAMESPACE_BEGIN
78class SrcMediaIO :
public SharedThreadMediaIO {
79 PROMEKI_OBJECT(SrcMediaIO, SharedThreadMediaIO)
82 static inline const MediaIOStats::ID StatsFramesConverted{
"FramesConverted"};
84 SrcMediaIO(ObjectBase *parent =
nullptr);
85 ~SrcMediaIO()
override;
87 Error describe(MediaIODescription *out)
const override;
88 Error proposeInput(
const MediaDesc &offered, MediaDesc *preferred)
const override;
89 Error proposeOutput(
const MediaDesc &requested, MediaDesc *achievable,
90 MediaConfig *configDelta =
nullptr)
const override;
91 int pendingInternalWrites()
const override;
94 Error executeCmd(MediaIOCommandOpen &cmd)
override;
95 Error executeCmd(MediaIOCommandClose &cmd)
override;
96 Error executeCmd(MediaIOCommandRead &cmd)
override;
97 Error executeCmd(MediaIOCommandWrite &cmd)
override;
98 Error executeCmd(MediaIOCommandStats &cmd)
override;
101 Error convertFrame(
const Frame &input, Frame &output);
103 AudioFormat::ID _outputAudioDataType = AudioFormat::Invalid;
104 bool _outputAudioDataTypeSet =
false;
107 Frame::List _outputQueue;
108 FrameCount _frameCount{0};
109 int64_t _readCount = 0;
110 FrameCount _framesConverted{0};
111 bool _capacityWarned =
false;
118class SrcFactory :
public MediaIOFactory {
120 SrcFactory() =
default;
122 String name()
const override {
return String(
"SRC"); }
123 String displayName()
const override {
return String(
"Sample Rate Converter"); }
124 String description()
const override {
return String(
"Audio sample format converter"); }
125 bool canBeTransform()
const override {
return true; }
127 Config::SpecMap configSpecs()
const override;
128 bool bridge(
const MediaDesc &from,
const MediaDesc &to, Config *outConfig,
129 int *outCost)
const override;
130 MediaIO *create(
const Config &config, ObjectBase *parent =
nullptr)
const override;