Skip to content

Commit dca6e34

Browse files
committed
new ADPCM library version
1 parent c06b3ba commit dca6e34

File tree

1 file changed

+24
-22
lines changed

1 file changed

+24
-22
lines changed

src/AudioTools/AudioCodecs/CodecADPCM.h

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -17,23 +17,24 @@ class ADPCMDecoder : public AudioDecoderExt {
1717
info.sample_rate = 44100;
1818
info.channels = 2;
1919
info.bits_per_sample = 16;
20-
decoder.setCodecID(id);
21-
decoder.setBlockSize(blockSize);
20+
p_decoder = adpcm_ffmpeg::ADPCMDecoderFactory::create(id);
21+
p_decoder->setCodecID(id);
22+
p_decoder->setBlockSize(blockSize);
2223
}
2324

2425
// defines the block size
2526
void setBlockSize(int blockSize) override {
26-
decoder.setBlockSize(blockSize);
27+
p_decoder->setBlockSize(blockSize);
2728
}
2829

2930
/// Provides the block size (size of encoded frame) (only available after calling begin)
3031
int blockSize() {
31-
return decoder.blockSize();
32+
return p_decoder->blockSize();
3233
}
3334

3435
/// Provides the frame size (size of decoded frame) (only available after calling begin)
3536
int frameSize() {
36-
return decoder.frameSize()*2;
37+
return p_decoder->frameSize()*2;
3738
}
3839

3940

@@ -42,12 +43,12 @@ class ADPCMDecoder : public AudioDecoderExt {
4243
if (is_started) return true;
4344
current_byte = 0;
4445
LOGI("sample_rate: %d, channels: %d", info.sample_rate, info.channels);
45-
decoder.begin(info.sample_rate, info.channels);
46+
p_decoder->begin(info.sample_rate, info.channels);
4647
LOGI("frameSize: %d", (int)frameSize());
4748
LOGI("blockSize: %d", (int)blockSize());
48-
block_size = decoder.blockSize();
49+
block_size = p_decoder->blockSize();
4950
assert(block_size > 0);
50-
assert(decoder.frameSize() > 0);
51+
assert(p_decoder->frameSize() > 0);
5152
adpcm_block.resize(block_size);
5253

5354
notifyAudioChange(info);
@@ -57,7 +58,7 @@ class ADPCMDecoder : public AudioDecoderExt {
5758

5859
void end() override {
5960
TRACEI();
60-
decoder.end();
61+
p_decoder->end();
6162
adpcm_block.resize(0);
6263
is_started = false;
6364
}
@@ -78,7 +79,7 @@ class ADPCMDecoder : public AudioDecoderExt {
7879
operator bool() override { return is_started; }
7980

8081
protected:
81-
adpcm_ffmpeg::ADPCMDecoder decoder;
82+
adpcm_ffmpeg::ADPCMDecoder *p_decoder=nullptr;
8283
Vector<uint8_t> adpcm_block;
8384
Print *p_print = nullptr;
8485
int current_byte = 0;
@@ -90,7 +91,7 @@ class ADPCMDecoder : public AudioDecoderExt {
9091

9192
if (current_byte >= block_size) {
9293
TRACED();
93-
AVFrame &frame = decoder.decode(&adpcm_block[0], block_size);
94+
adpcm_ffmpeg::AVFrame &frame = p_decoder->decode(&adpcm_block[0], block_size);
9495
// print the result
9596
int16_t *data = (int16_t *)frame.data[0];
9697
size_t byte_count = frame.nb_samples * sizeof(int16_t) * info.channels;
@@ -111,7 +112,7 @@ class ADPCMDecoder : public AudioDecoderExt {
111112
/**
112113
* @brief Encoder for ADPCM - Depends on https://github.com/pschatzmann/adpcm
113114
* @ingroup codecs
114-
* @ingroup encoder
115+
* @ingroup p_encoder->
115116
* @author Phil Schatzmann
116117
* @copyright GPLv3
117118
*/
@@ -121,30 +122,31 @@ class ADPCMEncoder : public AudioEncoderExt {
121122
info.sample_rate = 44100;
122123
info.channels = 2;
123124
info.bits_per_sample = 16;
124-
encoder.setCodecID(id);
125-
encoder.setBlockSize(blockSize);
125+
p_encoder = adpcm_ffmpeg::ADPCMEncoderFactory::create(id);
126+
p_encoder->setCodecID(id);
127+
p_encoder->setBlockSize(blockSize);
126128
}
127129

128130
/// Provides the block size (size of encoded frame) (only available after calling begin)
129131
int blockSize() override {
130-
return encoder.blockSize();
132+
return p_encoder->blockSize();
131133
}
132134

133135
/// Provides the frame size (size of decoded frame) (only available after calling begin)
134136
int frameSize() {
135-
return encoder.frameSize()*2;
137+
return p_encoder->frameSize()*2;
136138
}
137139

138140
bool begin() override {
139141
TRACEI();
140142
if (is_started) return true;
141143
LOGI("sample_rate: %d, channels: %d", info.sample_rate, info.channels);
142-
encoder.begin(info.sample_rate, info.channels);
144+
p_encoder->begin(info.sample_rate, info.channels);
143145
LOGI("frameSize: %d", (int)frameSize());
144146
LOGI("blockSize: %d", (int)blockSize());
145147
assert(info.sample_rate != 0);
146-
assert(encoder.frameSize() != 0);
147-
total_samples = encoder.frameSize()*info.channels;
148+
assert(p_encoder->frameSize() != 0);
149+
total_samples = p_encoder->frameSize()*info.channels;
148150
pcm_block.resize(total_samples);
149151
current_sample = 0;
150152

@@ -155,7 +157,7 @@ class ADPCMEncoder : public AudioEncoderExt {
155157
void end() override {
156158
TRACEI();
157159
pcm_block.resize(0);
158-
encoder.end();
160+
p_encoder->end();
159161
is_started = false;
160162
}
161163

@@ -175,7 +177,7 @@ class ADPCMEncoder : public AudioEncoderExt {
175177
}
176178

177179
protected:
178-
adpcm_ffmpeg::ADPCMEncoder encoder;
180+
adpcm_ffmpeg::ADPCMEncoder* p_encoder = nullptr;
179181
Vector<int16_t> pcm_block;
180182
Print *p_print = nullptr;
181183
bool is_started = false;
@@ -186,7 +188,7 @@ class ADPCMEncoder : public AudioEncoderExt {
186188
pcm_block[current_sample++] = sample;
187189
if (current_sample >= total_samples) {
188190
TRACED();
189-
AVPacket &packet = encoder.encode(&pcm_block[0], total_samples);
191+
adpcm_ffmpeg::AVPacket &packet = p_encoder->encode(&pcm_block[0], total_samples);
190192
if (packet.size > 0) {
191193
size_t written = p_print->write(packet.data, packet.size);
192194
if (written != packet.size) {

0 commit comments

Comments
 (0)