make zlib and pcm codecs not actually allocate encoder/decoders

This commit is contained in:
Brad Hefta-Gaub 2016-07-11 14:21:32 -07:00
parent 743576134f
commit 125aa6b337
3 changed files with 30 additions and 65 deletions

View file

@ -14,11 +14,13 @@
class Encoder {
public:
virtual ~Encoder() { }
virtual void encode(const QByteArray& decodedBuffer, QByteArray& encodedBuffer) = 0;
};
class Decoder {
public:
virtual ~Decoder() { }
virtual void decode(const QByteArray& encodedBuffer, QByteArray& decodedBuffer) = 0;
// numFrames - number of samples (mono) or sample-pairs (stereo)

View file

@ -37,55 +37,24 @@ bool PCMCodec::isSupported() const {
return true;
}
class PCMEncoder : public Encoder {
public:
virtual void encode(const QByteArray& decodedBuffer, QByteArray& encodedBuffer) override {
encodedBuffer = decodedBuffer;
}
};
class PCMDecoder : public Decoder {
public:
virtual void decode(const QByteArray& encodedBuffer, QByteArray& decodedBuffer) override {
decodedBuffer = encodedBuffer;
}
virtual void trackLostFrames(int numFrames) override { }
};
Encoder* PCMCodec::createEncoder(int sampleRate, int numChannels) {
return new PCMEncoder();
return this;
}
Decoder* PCMCodec::createDecoder(int sampleRate, int numChannels) {
return new PCMDecoder();
return this;
}
void PCMCodec::releaseEncoder(Encoder* encoder) {
delete static_cast<PCMEncoder*>(encoder);
// do nothing
}
void PCMCodec::releaseDecoder(Decoder* decoder) {
delete static_cast<PCMDecoder*>(decoder);
// do nothing
}
class zLibEncoder : public Encoder {
public:
virtual void encode(const QByteArray& decodedBuffer, QByteArray& encodedBuffer) override {
encodedBuffer = qCompress(decodedBuffer);
}
};
class zLibDecoder : public Decoder {
public:
virtual void decode(const QByteArray& encodedBuffer, QByteArray& decodedBuffer) override {
decodedBuffer = qUncompress(encodedBuffer);
}
virtual void trackLostFrames(int numFrames) override { }
};
const QString zLibCodec::NAME = "zlib";
void zLibCodec::init() {
@ -103,24 +72,23 @@ void zLibCodec::deactivate() {
CodecPlugin::deactivate();
}
bool zLibCodec::isSupported() const {
return true;
}
Encoder* zLibCodec::createEncoder(int sampleRate, int numChannels) {
return new zLibEncoder();
return this;
}
Decoder* zLibCodec::createDecoder(int sampleRate, int numChannels) {
return new zLibDecoder();
return this;
}
void zLibCodec::releaseEncoder(Encoder* encoder) {
delete static_cast<zLibEncoder*>(encoder);
// do nothing... it wasn't allocated
}
void zLibCodec::releaseDecoder(Decoder* decoder) {
delete static_cast<zLibDecoder*>(decoder);
// do nothing... it wasn't allocated
}

View file

@ -14,30 +14,7 @@
#include <plugins/CodecPlugin.h>
/*
class Encoder {
public:
virtual void encode(const QByteArray& decodedBuffer, QByteArray& encodedBuffer) = 0;
};
class Decoder {
public:
virtual void decode(const QByteArray& encodedBuffer, QByteArray& decodedBuffer) = 0;
// numFrames - number of samples (mono) or sample-pairs (stereo)
virtual void trackLostFrames(int numFrames) = 0;
};
class CodecPlugin : public Plugin {
public:
virtual Encoder* createEncoder(int sampleRate, int numChannels) = 0;
virtual Decoder* createDecoder(int sampleRate, int numChannels) = 0;
virtual void releaseEncoder(Encoder* encoder) = 0;
virtual void releaseDecoder(Decoder* decoder) = 0;
};
*/
class PCMCodec : public CodecPlugin {
class PCMCodec : public CodecPlugin, public Encoder, public Decoder {
Q_OBJECT
public:
@ -58,11 +35,20 @@ public:
virtual void releaseEncoder(Encoder* encoder) override;
virtual void releaseDecoder(Decoder* decoder) override;
virtual void encode(const QByteArray& decodedBuffer, QByteArray& encodedBuffer) override {
encodedBuffer = decodedBuffer;
}
virtual void decode(const QByteArray& encodedBuffer, QByteArray& decodedBuffer) override {
decodedBuffer = encodedBuffer;
}
virtual void trackLostFrames(int numFrames) override { }
private:
static const QString NAME;
};
class zLibCodec : public CodecPlugin {
class zLibCodec : public CodecPlugin, public Encoder, public Decoder {
Q_OBJECT
public:
@ -83,6 +69,15 @@ public:
virtual void releaseEncoder(Encoder* encoder) override;
virtual void releaseDecoder(Decoder* decoder) override;
virtual void encode(const QByteArray& decodedBuffer, QByteArray& encodedBuffer) override {
encodedBuffer = qCompress(decodedBuffer);
}
virtual void decode(const QByteArray& encodedBuffer, QByteArray& decodedBuffer) override {
decodedBuffer = qUncompress(encodedBuffer);
}
virtual void trackLostFrames(int numFrames) override { }
private:
static const QString NAME;