1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef MEDIA_BASE_AUDIO_FIFO_H_
6 #define MEDIA_BASE_AUDIO_FIFO_H_
8 #include "media/base/audio_bus.h"
9 #include "media/base/media_export.h"
13 // First-in first-out container for AudioBus elements.
14 // The maximum number of audio frames in the FIFO is set at construction and
15 // can not be extended dynamically. The allocated memory is utilized as a
17 // This class is thread-unsafe.
18 class MEDIA_EXPORT AudioFifo
{
20 // Creates a new AudioFifo and allocates |channels| of length |frames|.
21 AudioFifo(int channels
, int frames
);
24 // Pushes all audio channel data from |source| to the FIFO.
25 // Push() will crash if the allocated space is insufficient.
26 void Push(const AudioBus
* source
);
28 // Consumes |frames_to_consume| audio frames from the FIFO and copies
29 // them to |destination| starting at position |start_frame|.
30 // Consume() will crash if the FIFO does not contain |frames_to_consume|
31 // frames or if there is insufficient space in |destination| to store the
33 void Consume(AudioBus
* destination
, int start_frame
, int frames_to_consume
);
35 // Empties the FIFO without deallocating any memory.
38 // Number of actual audio frames in the FIFO.
41 int max_frames() const { return max_frames_
; }
44 // The actual FIFO is an audio bus implemented as a ring buffer.
45 scoped_ptr
<AudioBus
> audio_bus_
;
47 // Maximum number of elements the FIFO can contain.
48 // This value is set by |frames| in the constructor.
49 const int max_frames_
;
51 // Number of actual elements in the FIFO.
55 // Current read position.
58 // Current write position.
61 DISALLOW_COPY_AND_ASSIGN(AudioFifo
);
66 #endif // MEDIA_BASE_AUDIO_FIFO_H_