Skip to content

Commit bf9df10

Browse files
authored
audio/hwopus-decoder: fix glitchy playback (#110)
* audio/hwopus-decoder: fix offset for pointer to wavebuf start * audio/hwopus-decoder: change to 4 wavebufs and reduce size of wavebufs
1 parent 5e36dc2 commit bf9df10

File tree

1 file changed

+7
-7
lines changed
  • audio/hwopus-decoder/source

1 file changed

+7
-7
lines changed

audio/hwopus-decoder/source/main.c

+7-7
Original file line numberDiff line numberDiff line change
@@ -74,15 +74,15 @@ int main(void)
7474

7575
size_t num_channels = 1;
7676
size_t samplerate = 48000;
77-
size_t max_samples = samplerate;
77+
size_t max_samples = samplerate/20;//each wavebuf can hold upto 1sec/20 = 50ms of audio data
7878
size_t max_samples_datasize = max_samples*num_channels*sizeof(opus_int16);
79-
size_t mempool_size = (max_samples_datasize*2 + 0xFFF) &~ 0xFFF;//*2 for 2 wavebufs.
79+
size_t mempool_size = (max_samples_datasize*4 + 0xFFF) &~ 0xFFF;//*4 for 4 wavebufs.
8080
void* mempool_ptr = memalign(0x1000, mempool_size);
8181
void* tmpdata_ptr = malloc(max_samples_datasize);
8282
opuspkt_tmpbuf = (u8*)malloc(opuspkt_tmpbuf_size);
8383
opus_int16* curbuf = NULL;
8484

85-
AudioDriverWaveBuf wavebuf[2] = {0};
85+
AudioDriverWaveBuf wavebuf[4] = {0};
8686
int i, wavei;
8787

8888
HwopusDecoder hwdecoder = {0};
@@ -151,9 +151,9 @@ int main(void)
151151
}
152152
audrvVoiceStart(&drv, 0);
153153

154-
for(i=0; i<2; i++) {
154+
for(i=0; i<4; i++) {
155155
wavebuf[i].data_raw = mempool_ptr;
156-
wavebuf[i].size = max_samples_datasize*2;//*2 for 2 wavebufs.
156+
wavebuf[i].size = max_samples_datasize*4;//*4 for 4 wavebufs.
157157
wavebuf[i].start_sample_offset = i * max_samples;
158158
wavebuf[i].end_sample_offset = wavebuf[i].start_sample_offset + max_samples;
159159
}
@@ -198,15 +198,15 @@ int main(void)
198198

199199
if (audio_playing) {
200200
wavei = -1;
201-
for(i=0; i<2; i++) {
201+
for(i=0; i<4; i++) {
202202
if (wavebuf[i].state == AudioDriverWaveBufState_Free || wavebuf[i].state == AudioDriverWaveBufState_Done) {
203203
wavei = i;
204204
break;
205205
}
206206
}
207207

208208
if (wavei >= 0) {
209-
curbuf = (opus_int16*)(mempool_ptr + wavebuf[wavei].start_sample_offset);
209+
curbuf = (opus_int16*)(mempool_ptr + wavebuf[wavei].start_sample_offset * sizeof(opus_int16));
210210

211211
opret = op_read(of, tmpdata_ptr, max_samples * num_channels, NULL);//The buffer used here has to be seperate from mempool_ptr.
212212
if (opret < 0)

0 commit comments

Comments
 (0)