Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Side by Side Diff: media/base/audio_pull_fifo.cc

Issue 10915123: Adds media::AudioPullFifo class to Chrome. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Finalized AudioPullFifo and added unit test Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
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.
4
5 #include "media/base/audio_pull_fifo.h"
6
7 #include "base/logging.h"
8
9 namespace media {
10
11 AudioPullFifo::AudioPullFifo(int channels, int frames,
DaleCurtis 2012/09/07 13:48:38 Do we really need |read_frames|? It's kind of conf
henrika (OOO until Aug 14) 2012/09/07 16:06:42 Done.
12 const ReadCB& read_cb, int read_frames)
13 : read_cb_(read_cb) {
14 DCHECK_LE(read_frames, frames);
DaleCurtis 2012/09/07 13:48:38 I don't think you should make this assumption sinc
henrika (OOO until Aug 14) 2012/09/07 16:06:42 Done.
15 audio_fifo_.reset(new AudioFifo(channels, frames));
16 audio_bus_ = AudioBus::Create(channels, read_frames);
17 }
18
19 AudioPullFifo::~AudioPullFifo() {
20 read_cb_.Reset();
21 }
22
23 void AudioPullFifo::Consume(AudioBus* destination, int frames_to_consume) {
24 DCHECK(destination);
25
26 if (frames_to_consume > audio_fifo_->frames_in_fifo()) {
27 // We don't have enough data in the FIFO to fulfill the request and must
28 // ask the provider for more data.
29 FillBuffer(frames_to_consume - audio_fifo_->frames_in_fifo());
DaleCurtis 2012/09/07 13:48:38 Per my comment above, if you don't pre-consume the
henrika (OOO until Aug 14) 2012/09/07 16:06:42 Done.
30 }
31
32 // We are now able to copy the requested amount of data to the destination.
33 audio_fifo_->Consume(destination, frames_to_consume);
34 }
35
36 void AudioPullFifo::FillBuffer(int frames) {
37 // Keep asking the provider to give us data until we have received at least
38 // |frames| number of audio data. Push new data to the FIFO in segments with
39 // the same size as the audio bus (set by |read_frames| in the ctor).
40 int frames_provided = 0;
41 while (frames_provided < frames) {
42 // Read audio data from the provider asking for |read_frames|.
43 read_cb_.Run(audio_bus_.get());
44
45 // Add the acquired data to the FIFO.
46 audio_fifo_->Push(audio_bus_.get());
47
48 // Keep adding to the FIFO until we have added at least |frames| number
49 // of frames.
50 frames_provided += audio_bus_->frames();
51 }
52 }
53
54 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698