11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
21PROMEKI_NAMESPACE_BEGIN
87class AudioEncoderMediaIO :
public SharedThreadMediaIO {
88 PROMEKI_OBJECT(AudioEncoderMediaIO, SharedThreadMediaIO)
91 static inline const MediaIOStats::ID StatsFramesEncoded{
"FramesEncoded"};
94 static inline const MediaIOStats::ID StatsPacketsOut{
"PacketsOut"};
96 AudioEncoderMediaIO(ObjectBase *parent =
nullptr);
97 ~AudioEncoderMediaIO()
override;
99 Error describe(MediaIODescription *out)
const override;
100 Error proposeInput(
const MediaDesc &offered, MediaDesc *preferred)
const override;
101 Error proposeOutput(
const MediaDesc &requested, MediaDesc *achievable,
102 MediaConfig *configDelta =
nullptr)
const override;
103 int pendingInternalWrites()
const override;
106 Error executeCmd(MediaIOCommandOpen &cmd)
override;
107 Error executeCmd(MediaIOCommandClose &cmd)
override;
108 Error executeCmd(MediaIOCommandRead &cmd)
override;
109 Error executeCmd(MediaIOCommandWrite &cmd)
override;
110 Error executeCmd(MediaIOCommandStats &cmd)
override;
111 void configChanged(
const MediaConfig &delta)
override;
119 void drainEncoderInto();
123 AudioEncoder::UPtr _encoder;
125 Frame::List _outputQueue;
126 FrameCount _frameCount{0};
127 int64_t _readCount = 0;
128 FrameCount _framesEncoded{0};
129 int64_t _packetsOut = 0;
130 bool _capacityWarned =
false;
131 bool _closed =
false;
138class AudioEncoderFactory :
public MediaIOFactory {
140 AudioEncoderFactory() =
default;
142 String name()
const override {
return String(
"AudioEncoder"); }
143 String displayName()
const override {
return String(
"Audio Encoder"); }
144 String description()
const override {
145 return String(
"Encodes PCM audio frames into a registered AudioCodec bitstream");
147 bool canBeTransform()
const override {
return true; }
149 Config::SpecMap configSpecs()
const override;
150 bool bridge(
const MediaDesc &from,
const MediaDesc &to, Config *outConfig,
151 int *outCost)
const override;
152 MediaIO *create(
const Config &config, ObjectBase *parent =
nullptr)
const override;