Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Audio FIFO
  3.  * Copyright (c) 2012 Justin Ruggles <justin.ruggles@gmail.com>
  4.  *
  5.  * This file is part of FFmpeg.
  6.  *
  7.  * FFmpeg is free software; you can redistribute it and/or
  8.  * modify it under the terms of the GNU Lesser General Public
  9.  * License as published by the Free Software Foundation; either
  10.  * version 2.1 of the License, or (at your option) any later version.
  11.  *
  12.  * FFmpeg is distributed in the hope that it will be useful,
  13.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  15.  * Lesser General Public License for more details.
  16.  *
  17.  * You should have received a copy of the GNU Lesser General Public
  18.  * License along with FFmpeg; if not, write to the Free Software
  19.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  20.  */
  21.  
  22. /**
  23.  * @file
  24.  * Audio FIFO Buffer
  25.  */
  26.  
  27. #ifndef AVUTIL_AUDIO_FIFO_H
  28. #define AVUTIL_AUDIO_FIFO_H
  29.  
  30. #include "avutil.h"
  31. #include "fifo.h"
  32. #include "samplefmt.h"
  33.  
  34. /**
  35.  * @addtogroup lavu_audio
  36.  * @{
  37.  *
  38.  * @defgroup lavu_audiofifo Audio FIFO Buffer
  39.  * @{
  40.  */
  41.  
  42. /**
  43.  * Context for an Audio FIFO Buffer.
  44.  *
  45.  * - Operates at the sample level rather than the byte level.
  46.  * - Supports multiple channels with either planar or packed sample format.
  47.  * - Automatic reallocation when writing to a full buffer.
  48.  */
  49. typedef struct AVAudioFifo AVAudioFifo;
  50.  
  51. /**
  52.  * Free an AVAudioFifo.
  53.  *
  54.  * @param af  AVAudioFifo to free
  55.  */
  56. void av_audio_fifo_free(AVAudioFifo *af);
  57.  
  58. /**
  59.  * Allocate an AVAudioFifo.
  60.  *
  61.  * @param sample_fmt  sample format
  62.  * @param channels    number of channels
  63.  * @param nb_samples  initial allocation size, in samples
  64.  * @return            newly allocated AVAudioFifo, or NULL on error
  65.  */
  66. AVAudioFifo *av_audio_fifo_alloc(enum AVSampleFormat sample_fmt, int channels,
  67.                                  int nb_samples);
  68.  
  69. /**
  70.  * Reallocate an AVAudioFifo.
  71.  *
  72.  * @param af          AVAudioFifo to reallocate
  73.  * @param nb_samples  new allocation size, in samples
  74.  * @return            0 if OK, or negative AVERROR code on failure
  75.  */
  76. int av_audio_fifo_realloc(AVAudioFifo *af, int nb_samples);
  77.  
  78. /**
  79.  * Write data to an AVAudioFifo.
  80.  *
  81.  * The AVAudioFifo will be reallocated automatically if the available space
  82.  * is less than nb_samples.
  83.  *
  84.  * @see enum AVSampleFormat
  85.  * The documentation for AVSampleFormat describes the data layout.
  86.  *
  87.  * @param af          AVAudioFifo to write to
  88.  * @param data        audio data plane pointers
  89.  * @param nb_samples  number of samples to write
  90.  * @return            number of samples actually written, or negative AVERROR
  91.  *                    code on failure. If successful, the number of samples
  92.  *                    actually written will always be nb_samples.
  93.  */
  94. int av_audio_fifo_write(AVAudioFifo *af, void **data, int nb_samples);
  95.  
  96. /**
  97.  * Peek data from an AVAudioFifo.
  98.  *
  99.  * @see enum AVSampleFormat
  100.  * The documentation for AVSampleFormat describes the data layout.
  101.  *
  102.  * @param af          AVAudioFifo to read from
  103.  * @param data        audio data plane pointers
  104.  * @param nb_samples  number of samples to peek
  105.  * @return            number of samples actually peek, or negative AVERROR code
  106.  *                    on failure. The number of samples actually peek will not
  107.  *                    be greater than nb_samples, and will only be less than
  108.  *                    nb_samples if av_audio_fifo_size is less than nb_samples.
  109.  */
  110. int av_audio_fifo_peek(AVAudioFifo *af, void **data, int nb_samples);
  111.  
  112. /**
  113.  * Read data from an AVAudioFifo.
  114.  *
  115.  * @see enum AVSampleFormat
  116.  * The documentation for AVSampleFormat describes the data layout.
  117.  *
  118.  * @param af          AVAudioFifo to read from
  119.  * @param data        audio data plane pointers
  120.  * @param nb_samples  number of samples to read
  121.  * @return            number of samples actually read, or negative AVERROR code
  122.  *                    on failure. The number of samples actually read will not
  123.  *                    be greater than nb_samples, and will only be less than
  124.  *                    nb_samples if av_audio_fifo_size is less than nb_samples.
  125.  */
  126. int av_audio_fifo_read(AVAudioFifo *af, void **data, int nb_samples);
  127.  
  128. /**
  129.  * Drain data from an AVAudioFifo.
  130.  *
  131.  * Removes the data without reading it.
  132.  *
  133.  * @param af          AVAudioFifo to drain
  134.  * @param nb_samples  number of samples to drain
  135.  * @return            0 if OK, or negative AVERROR code on failure
  136.  */
  137. int av_audio_fifo_drain(AVAudioFifo *af, int nb_samples);
  138.  
  139. /**
  140.  * Reset the AVAudioFifo buffer.
  141.  *
  142.  * This empties all data in the buffer.
  143.  *
  144.  * @param af  AVAudioFifo to reset
  145.  */
  146. void av_audio_fifo_reset(AVAudioFifo *af);
  147.  
  148. /**
  149.  * Get the current number of samples in the AVAudioFifo available for reading.
  150.  *
  151.  * @param af  the AVAudioFifo to query
  152.  * @return    number of samples available for reading
  153.  */
  154. int av_audio_fifo_size(AVAudioFifo *af);
  155.  
  156. /**
  157.  * Get the current number of samples in the AVAudioFifo available for writing.
  158.  *
  159.  * @param af  the AVAudioFifo to query
  160.  * @return    number of samples available for writing
  161.  */
  162. int av_audio_fifo_space(AVAudioFifo *af);
  163.  
  164. /**
  165.  * @}
  166.  * @}
  167.  */
  168.  
  169. #endif /* AVUTIL_AUDIO_FIFO_H */
  170.