]> git.sesse.net Git - ffmpeg/blobdiff - libavutil/audio_fifo.c
Merge commit 'd4066a702407352a0648af882c34ea81a404fa2b'
[ffmpeg] / libavutil / audio_fifo.c
index d5298cce4d05a4050f50d70ef8a09e91b6cd943e..e4d38e05246a466169bacc710a269ddc1f472cca 100644 (file)
@@ -155,6 +155,30 @@ int av_audio_fifo_peek(AVAudioFifo *af, void **data, int nb_samples)
     return nb_samples;
 }
 
+int av_audio_fifo_peek_at(AVAudioFifo *af, void **data, int nb_samples, int offset)
+{
+    int i, ret, size;
+
+    if (offset < 0 || offset >= af->nb_samples)
+        return AVERROR(EINVAL);
+    if (nb_samples < 0)
+        return AVERROR(EINVAL);
+    nb_samples = FFMIN(nb_samples, af->nb_samples);
+    if (!nb_samples)
+        return 0;
+    if (offset > af->nb_samples - nb_samples)
+        return AVERROR(EINVAL);
+
+    offset *= af->sample_size;
+    size = nb_samples * af->sample_size;
+    for (i = 0; i < af->nb_buffers; i++) {
+        if ((ret = av_fifo_generic_peek_at(af->buf[i], data[i], offset, size, NULL)) < 0)
+            return AVERROR_BUG;
+    }
+
+    return nb_samples;
+}
+
 int av_audio_fifo_read(AVAudioFifo *af, void **data, int nb_samples)
 {
     int i, ret, size;