summaryrefslogtreecommitdiff
path: root/libavutil
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2016-02-11 22:05:54 +0100
committerPaul B Mahol <onemda@gmail.com>2016-02-18 11:55:00 +0100
commit08acab85d3421d4bd4cd278447b9ff578c8a2ac4 (patch)
treee7b980e01ba71cae9faeef9bfab9e01a194a3c92 /libavutil
parent5590ab45e0b1cd45e48580608f99615ad0a429b8 (diff)
avfilter: add loop filters
Signed-off-by: Paul B Mahol <onemda@gmail.com>
Diffstat (limited to 'libavutil')
-rw-r--r--libavutil/audio_fifo.c24
-rw-r--r--libavutil/audio_fifo.h17
2 files changed, 41 insertions, 0 deletions
diff --git a/libavutil/audio_fifo.c b/libavutil/audio_fifo.c
index d5298cce4d..e4d38e0524 100644
--- a/libavutil/audio_fifo.c
+++ b/libavutil/audio_fifo.c
@@ -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;
diff --git a/libavutil/audio_fifo.h b/libavutil/audio_fifo.h
index 24f91dab72..d8a9194a8d 100644
--- a/libavutil/audio_fifo.h
+++ b/libavutil/audio_fifo.h
@@ -111,6 +111,23 @@ int av_audio_fifo_write(AVAudioFifo *af, void **data, int nb_samples);
int av_audio_fifo_peek(AVAudioFifo *af, void **data, int nb_samples);
/**
+ * Peek data from an AVAudioFifo.
+ *
+ * @see enum AVSampleFormat
+ * The documentation for AVSampleFormat describes the data layout.
+ *
+ * @param af AVAudioFifo to read from
+ * @param data audio data plane pointers
+ * @param nb_samples number of samples to peek
+ * @param offset offset from current read position
+ * @return number of samples actually peek, or negative AVERROR code
+ * on failure. The number of samples actually peek will not
+ * be greater than nb_samples, and will only be less than
+ * nb_samples if av_audio_fifo_size is less than nb_samples.
+ */
+int av_audio_fifo_peek_at(AVAudioFifo *af, void **data, int nb_samples, int offset);
+
+/**
* Read data from an AVAudioFifo.
*
* @see enum AVSampleFormat