OLD | NEW |
---|---|
(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 #ifndef MEDIA_BASE_MULTI_CHANNEL_RESAMPLER_H_ | |
6 #define MEDIA_BASE_MULTI_CHANNEL_RESAMPLER_H_ | |
7 | |
8 #include <vector> | |
9 | |
10 #include "base/memory/scoped_ptr.h" | |
11 #include "media/base/sinc_resampler.h" | |
12 | |
13 namespace media { | |
14 | |
15 class MEDIA_EXPORT MultiChannelResampler | |
Ami GONE FROM CHROMIUM
2012/06/30 20:12:14
Add a class-level comment (what this does, how it'
DaleCurtis
2012/07/03 03:02:57
Done.
| |
16 : public SincResampler::AudioSourceProvider { | |
17 public: | |
18 // Abstract base-class for a pulling data into the resampler. | |
Ami GONE FROM CHROMIUM
2012/06/30 20:12:14
english
DaleCurtis
2012/07/03 03:02:57
Removed.
| |
19 class MultiChannelAudioSourceProvider { | |
Ami GONE FROM CHROMIUM
2012/06/30 20:12:14
Is this a provider of "audio source"s or a provide
DaleCurtis
2012/07/03 03:02:57
Just ReadCB now.
| |
20 public: | |
21 // ProvideInput() is called repeatedly to render time-slices of a continuous | |
22 // multi channel audio stream. | |
23 virtual void ProvideInput(const std::vector<float*>& audio_data, | |
Ami GONE FROM CHROMIUM
2012/06/30 20:12:14
|audio_data|'s format needs description.
My guess
Ami GONE FROM CHROMIUM
2012/06/30 20:12:14
When your interface is just one (or just a few) me
DaleCurtis
2012/07/01 23:27:46
I'm keeping style with AudioRendererSink::RenderCa
DaleCurtis
2012/07/03 03:02:57
Converted to Callback, kept RenderCallback style.
| |
24 int number_of_frames) = 0; | |
Ami GONE FROM CHROMIUM
2012/06/30 20:12:14
fwiw, with a type of int, I think |frames| is clea
DaleCurtis
2012/07/01 23:27:46
Ditto. I prefer frames as well, but am going for c
Ami GONE FROM CHROMIUM
2012/07/01 23:44:44
Yep, in this case.
(note, also, consistency can wo
DaleCurtis
2012/07/02 17:43:45
sgtm.
DaleCurtis
2012/07/03 03:02:57
Done.
| |
25 | |
26 protected: | |
27 virtual ~MultiChannelAudioSourceProvider() {} | |
28 }; | |
29 | |
30 // Constructs a MultiChannelResampler with the specified |provider|, which is | |
31 // used to acquire data for all channels during resampling. |scale_factor| is | |
32 // input_sample_rate / output_sample_rate. | |
33 // TODO(dalecurtis): Should provider be a const ref? Need to make ProvideInput | |
Ami GONE FROM CHROMIUM
2012/06/30 20:12:14
TODO goes away with my callback suggestion above.
DaleCurtis
2012/07/03 03:02:57
Removed.
| |
34 // const if so... Following the RenderCallback model currently. | |
35 MultiChannelResampler(MultiChannelAudioSourceProvider* provider, | |
Ami GONE FROM CHROMIUM
2012/06/30 20:12:14
generally output params follow input params, so th
DaleCurtis
2012/07/03 03:02:57
These are all input parameters? I moved the CB to
| |
36 double scale_factor, int number_of_channels); | |
Ami GONE FROM CHROMIUM
2012/06/30 20:12:14
s/scale_factor/io_sample_rate_ratio/ is clearer?
Ami GONE FROM CHROMIUM
2012/06/30 20:12:14
FWIW, number_of_channels is implicit in the Provid
DaleCurtis
2012/07/03 03:02:57
Doesn't really save anything and makes the already
| |
37 virtual ~MultiChannelResampler(); | |
38 | |
39 // Resample |number_of_frames| of data from |provider_| into |audio_data|. | |
40 void Resample(const std::vector<float*>& audio_data, int number_of_frames); | |
41 | |
42 private: | |
43 int number_of_channels_; | |
Ami GONE FROM CHROMIUM
2012/06/30 20:12:14
const
DaleCurtis
2012/07/03 03:02:57
Removed.
| |
44 | |
45 // Index of the channel currently being processed. | |
Ami GONE FROM CHROMIUM
2012/06/30 20:12:14
This and the next two members are used mostly for
DaleCurtis
2012/07/03 03:02:57
I was able to bind away channel_index_, but I don'
| |
46 size_t channel_index_; | |
47 | |
48 // Number of frames requested by SincResampler from ProvideInput() when the | |
49 // |channel_index_| was 0. | |
50 int last_frame_count_; | |
51 | |
52 // Sanity check to ensure ProvideInput() is only called once per channel. | |
53 size_t callback_count_; | |
54 | |
55 // Source of data for resampling. | |
56 MultiChannelAudioSourceProvider* provider_; | |
57 | |
58 // Each channel has its own high quality resampler. | |
59 std::vector<SincResampler*> resamplers_; | |
Ami GONE FROM CHROMIUM
2012/06/30 20:12:14
ScopedVector
DaleCurtis
2012/07/03 03:02:57
Done.
| |
60 | |
61 // Staging area for data between the MultiChannelAudioSourceProvider and the | |
62 // SincResampler. | |
63 std::vector<float*> resampler_audio_data_; | |
Ami GONE FROM CHROMIUM
2012/06/30 20:12:14
vector<scoped_array<float> > would be clearer abou
DaleCurtis
2012/07/01 23:27:46
I don't think I can pass that along via RenderCall
Ami GONE FROM CHROMIUM
2012/07/01 23:44:44
Ouch (great example of how API choices propagate..
DaleCurtis
2012/07/02 17:43:45
Actually, I don't know what I was talking about. I
DaleCurtis
2012/07/03 03:02:57
Actually, that's not true, I remember what I was t
| |
64 | |
65 // SincResampler::AudioSourceProvider implementation. ProvideInput() will be | |
66 // called once for each channel, starting with the first channel. Each time | |
Ami GONE FROM CHROMIUM
2012/06/30 20:12:14
s/starting with the first channel/in channel order
DaleCurtis
2012/07/03 03:02:57
Done.
| |
67 // it's called, it will provide the next channel of data. | |
68 virtual void ProvideInput(float* destination, int number_of_frames) OVERRIDE; | |
69 }; | |
70 | |
71 } // namespace media | |
72 | |
73 #endif // MEDIA_BASE_MULTI_CHANNEL_RESAMPLER_H_ | |
OLD | NEW |