Unified · Split
| @@ -32,7 +32,7 @@ · 31 unmodified lines | |||
| 32 | #include "samplefmt.h" | 32 | #include "samplefmt.h" |
| 33 | 33 | ||
| 34 | struct AVAudioFifo { | 34 | 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 */ |
| 36 | int nb_buffers; /**< number of buffers */ | 36 | int nb_buffers; /**< number of buffers */ |
| 37 | int nb_samples; /**< number of samples currently in the FIFO */ | 37 | int nb_samples; /**< number of samples currently in the FIFO */ |
| 38 | int allocated_samples; /**< current allocated size, in samples */ | 38 | int allocated_samples; /**< current allocated size, in samples */ |
| @@ -48,7 +48,7 @@ void av_audio_fifo_free(AVAudioFifo *af) · 9 unmodified lines | |||
| 48 | if (af->buf) { | 48 | if (af->buf) { |
| 49 | int i; | 49 | int i; |
| 50 | for (i = 0; i < af->nb_buffers; i++) { | 50 | for (i = 0; i < af->nb_buffers; i++) { |
| 51 | av_fifo_freep(&af->buf[i]); | 51 | av_fifo_freep2(&af->buf[i]); |
| 52 | } | 52 | } |
| 53 | av_freep(&af->buf); | 53 | av_freep(&af->buf); |
| 54 | } | 54 | } |
| @@ -80,7 +80,7 @@ AVAudioFifo *av_audio_fifo_alloc(enum AVSampleFormat sample_fmt, int channels, · 25 unmodified lines | |||
| 80 | goto error; | 80 | goto error; |
| 81 | 81 | ||
| 82 | for (i = 0; i < af->nb_buffers; i++) { | 82 | 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); |
| 84 | if (!af->buf[i]) | 84 | if (!af->buf[i]) |
| 85 | goto error; | 85 | goto error; |
| 86 | } | 86 | } |
| @@ -95,15 +95,19 @@ error: · 8 unmodified lines | |||
| 95 | 95 | ||
| 96 | int av_audio_fifo_realloc(AVAudioFifo *af, int nb_samples) | 96 | int av_audio_fifo_realloc(AVAudioFifo *af, int nb_samples) |
| 97 | { | 97 | { |
| 98 | const size_t cur_size = av_fifo_can_read (af->buf[0]) + | ||
| 99 | av_fifo_can_write(af->buf[0]); | ||
| 98 | int i, ret, buf_size; | 100 | int i, ret, buf_size; |
| 99 | 101 | ||
| 100 | if ((ret = av_samples_get_buffer_size(&buf_size, af->channels, nb_samples, | 102 | if ((ret = av_samples_get_buffer_size(&buf_size, af->channels, nb_samples, |
| 101 | af->sample_fmt, 1)) < 0) | 103 | af->sample_fmt, 1)) < 0) |
| 102 | return ret; | 104 | return ret; |
| 103 | 105 | ||
| 104 | for (i = 0; i < af->nb_buffers; i++) { | 106 | if (buf_size > cur_size) { |
| 105 | if ((ret = av_fifo_realloc2(af->buf[i], buf_size)) < 0) | 107 | for (i = 0; i < af->nb_buffers; i++) { |
| 106 | return ret; | 108 | if ((ret = av_fifo_grow2(af->buf[i], buf_size - cur_size)) < 0) |
| 109 | return ret; | ||
| 110 | } | ||
| 107 | } | 111 | } |
| 108 | af->allocated_samples = nb_samples; | 112 | af->allocated_samples = nb_samples; |
| 109 | return 0; | 113 | return 0; |
| @@ -126,8 +130,8 @@ int av_audio_fifo_write(AVAudioFifo *af, void **data, int nb_samples) · 16 unmodified lines | |||
| 126 | 130 | ||
| 127 | size = nb_samples * af->sample_size; | 131 | size = nb_samples * af->sample_size; |
| 128 | for (i = 0; i < af->nb_buffers; i++) { | 132 | for (i = 0; i < af->nb_buffers; i++) { |
| 129 | ret = av_fifo_generic_write(af->buf[i], data[i], size, NULL); | 133 | ret = av_fifo_write(af->buf[i], data[i], size); |
| 130 | if (ret != size) | 134 | if (ret < 0) |
| 131 | return AVERROR_BUG; | 135 | return AVERROR_BUG; |
| 132 | } | 136 | } |
| 133 | af->nb_samples += nb_samples; | 137 | af->nb_samples += nb_samples; |
| @@ -137,21 +141,7 @@ int av_audio_fifo_write(AVAudioFifo *af, void **data, int nb_samples) · 3 unmodified lines | |||
| 137 | 141 | ||
| 138 | int av_audio_fifo_peek(AVAudioFifo *af, void **data, int nb_samples) | 142 | int av_audio_fifo_peek(AVAudioFifo *af, void **data, int nb_samples) |
| 139 | { | 143 | { |
| 140 | int i, ret, size; | 144 | return av_audio_fifo_peek_at(af, data, nb_samples, 0); |
| 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; | ||
| 155 | } | 145 | } |
| 156 | 146 | ||
| 157 | int av_audio_fifo_peek_at(AVAudioFifo *af, void **data, int nb_samples, int offset) | 147 | 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 | |||
| 171 | offset *= af->sample_size; | 161 | offset *= af->sample_size; |
| 172 | size = nb_samples * af->sample_size; | 162 | size = nb_samples * af->sample_size; |
| 173 | for (i = 0; i < af->nb_buffers; i++) { | 163 | 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) |
| 175 | return AVERROR_BUG; | 165 | return AVERROR_BUG; |
| 176 | } | 166 | } |
| 177 | 167 | ||
| @@ -190,7 +180,7 @@ int av_audio_fifo_read(AVAudioFifo *af, void **data, int nb_samples) · 12 unmodified lines | |||
| 190 | 180 | ||
| 191 | size = nb_samples * af->sample_size; | 181 | size = nb_samples * af->sample_size; |
| 192 | for (i = 0; i < af->nb_buffers; i++) { | 182 | 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) |
| 194 | return AVERROR_BUG; | 184 | return AVERROR_BUG; |
| 195 | } | 185 | } |
| 196 | af->nb_samples -= nb_samples; | 186 | af->nb_samples -= nb_samples; |
| @@ -209,7 +199,7 @@ int av_audio_fifo_drain(AVAudioFifo *af, int nb_samples) · 12 unmodified lines | |||
| 209 | if (nb_samples) { | 199 | if (nb_samples) { |
| 210 | size = nb_samples * af->sample_size; | 200 | size = nb_samples * af->sample_size; |
| 211 | for (i = 0; i < af->nb_buffers; i++) | 201 | for (i = 0; i < af->nb_buffers; i++) |
| 212 | av_fifo_drain(af->buf[i], size); | 202 | av_fifo_drain2(af->buf[i], size); |
| 213 | af->nb_samples -= nb_samples; | 203 | af->nb_samples -= nb_samples; |
| 214 | } | 204 | } |
| 215 | return 0; | 205 | return 0; |
| @@ -220,7 +210,7 @@ void av_audio_fifo_reset(AVAudioFifo *af) · 4 unmodified lines | |||
| 220 | int i; | 210 | int i; |
| 221 | 211 | ||
| 222 | for (i = 0; i < af->nb_buffers; i++) | 212 | for (i = 0; i < af->nb_buffers; i++) |
| 223 | av_fifo_reset(af->buf[i]); | 213 | av_fifo_reset2(af->buf[i]); |
| 224 | 214 | ||
| 225 | af->nb_samples = 0; | 215 | af->nb_samples = 0; |
| 226 | } | 216 | } |