History

lavu/audio_fifo: switch to new FIFO API

Anton Khirnov committed 4 years ago

Commit d1bd1891 parent 08213621 file · +17 −27Browse files

Unified · Split

libavutil/audio_fifo.c+17−27
@@ -32,7 +32,7 @@ · 31 unmodified lines
3232 #include "samplefmt.h"
3333
3434 struct AVAudioFifo {
35− AVFifoBuffer **buf; /**< single buffer for interleaved, per-channel buffers for planar */
35+ AVFifo **buf; /**< single buffer for interleaved, per-channel buffers for planar */
3636 int nb_buffers; /**< number of buffers */
3737 int nb_samples; /**< number of samples currently in the FIFO */
3838 int allocated_samples; /**< current allocated size, in samples */
@@ -48,7 +48,7 @@ void av_audio_fifo_free(AVAudioFifo *af) · 9 unmodified lines
4848 if (af->buf) {
4949 int i;
5050 for (i = 0; i < af->nb_buffers; i++) {
51− av_fifo_freep(&af->buf[i]);
51+ av_fifo_freep2(&af->buf[i]);
5252 }
5353 av_freep(&af->buf);
5454 }
@@ -80,7 +80,7 @@ AVAudioFifo *av_audio_fifo_alloc(enum AVSampleFormat sample_fmt, int channels, · 25 unmodified lines
8080 goto error;
8181
8282 for (i = 0; i < af->nb_buffers; i++) {
83− af->buf[i] = av_fifo_alloc(buf_size);
83+ af->buf[i] = av_fifo_alloc2(buf_size, 1, 0);
8484 if (!af->buf[i])
8585 goto error;
8686 }
@@ -95,15 +95,19 @@ error: · 8 unmodified lines
9595
9696 int av_audio_fifo_realloc(AVAudioFifo *af, int nb_samples)
9797 {
98+ const size_t cur_size = av_fifo_can_read (af->buf[0]) +
99+ av_fifo_can_write(af->buf[0]);
98100 int i, ret, buf_size;
99101
100102 if ((ret = av_samples_get_buffer_size(&buf_size, af->channels, nb_samples,
101103 af->sample_fmt, 1)) < 0)
102104 return ret;
103105
104− for (i = 0; i < af->nb_buffers; i++) {
105− if ((ret = av_fifo_realloc2(af->buf[i], buf_size)) < 0)
106− return ret;
106+ if (buf_size > cur_size) {
107+ for (i = 0; i < af->nb_buffers; i++) {
108+ if ((ret = av_fifo_grow2(af->buf[i], buf_size - cur_size)) < 0)
109+ return ret;
110+ }
107111 }
108112 af->allocated_samples = nb_samples;
109113 return 0;
@@ -126,8 +130,8 @@ int av_audio_fifo_write(AVAudioFifo *af, void **data, int nb_samples) · 16 unmodified lines
126130
127131 size = nb_samples * af->sample_size;
128132 for (i = 0; i < af->nb_buffers; i++) {
129− ret = av_fifo_generic_write(af->buf[i], data[i], size, NULL);
130− if (ret != size)
133+ ret = av_fifo_write(af->buf[i], data[i], size);
134+ if (ret < 0)
131135 return AVERROR_BUG;
132136 }
133137 af->nb_samples += nb_samples;
@@ -137,21 +141,7 @@ int av_audio_fifo_write(AVAudioFifo *af, void **data, int nb_samples) · 3 unmodified lines
137141
138142 int av_audio_fifo_peek(AVAudioFifo *af, void **data, int nb_samples)
139143 {
140− int i, ret, size;
141−
142− if (nb_samples < 0)
143− return AVERROR(EINVAL);
144− nb_samples = FFMIN(nb_samples, af->nb_samples);
145− if (!nb_samples)
146− return 0;
147−
148− size = nb_samples * af->sample_size;
149− for (i = 0; i < af->nb_buffers; i++) {
150− if ((ret = av_fifo_generic_peek(af->buf[i], data[i], size, NULL)) < 0)
151− return AVERROR_BUG;
152− }
153−
154− return nb_samples;
144+ return av_audio_fifo_peek_at(af, data, nb_samples, 0);
155145 }
156146
157147 int av_audio_fifo_peek_at(AVAudioFifo *af, void **data, int nb_samples, int offset)
@@ -171,7 +161,7 @@ int av_audio_fifo_peek_at(AVAudioFifo *af, void **data, int nb_samples, int offs · 13 unmodified lines
171161 offset *= af->sample_size;
172162 size = nb_samples * af->sample_size;
173163 for (i = 0; i < af->nb_buffers; i++) {
174− if ((ret = av_fifo_generic_peek_at(af->buf[i], data[i], offset, size, NULL)) < 0)
164+ if ((ret = av_fifo_peek(af->buf[i], data[i], size, offset)) < 0)
175165 return AVERROR_BUG;
176166 }
177167
@@ -190,7 +180,7 @@ int av_audio_fifo_read(AVAudioFifo *af, void **data, int nb_samples) · 12 unmodified lines
190180
191181 size = nb_samples * af->sample_size;
192182 for (i = 0; i < af->nb_buffers; i++) {
193− if (av_fifo_generic_read(af->buf[i], data[i], size, NULL) < 0)
183+ if (av_fifo_read(af->buf[i], data[i], size) < 0)
194184 return AVERROR_BUG;
195185 }
196186 af->nb_samples -= nb_samples;
@@ -209,7 +199,7 @@ int av_audio_fifo_drain(AVAudioFifo *af, int nb_samples) · 12 unmodified lines
209199 if (nb_samples) {
210200 size = nb_samples * af->sample_size;
211201 for (i = 0; i < af->nb_buffers; i++)
212− av_fifo_drain(af->buf[i], size);
202+ av_fifo_drain2(af->buf[i], size);
213203 af->nb_samples -= nb_samples;
214204 }
215205 return 0;
@@ -220,7 +210,7 @@ void av_audio_fifo_reset(AVAudioFifo *af) · 4 unmodified lines
220210 int i;
221211
222212 for (i = 0; i < af->nb_buffers; i++)
223− av_fifo_reset(af->buf[i]);
213+ av_fifo_reset2(af->buf[i]);
224214
225215 af->nb_samples = 0;
226216 }

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t