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

Unified Diff: media/base/multi_channel_resampler.h

Issue 10701049: Add MultiChannelResampler wrapper for SincResampler. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Initial Commit! Created 8 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | media/base/multi_channel_resampler.cc » ('j') | media/base/multi_channel_resampler.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/base/multi_channel_resampler.h
diff --git a/media/base/multi_channel_resampler.h b/media/base/multi_channel_resampler.h
new file mode 100644
index 0000000000000000000000000000000000000000..0b6491e8d74ff6dfe8597c6e674487dd5817f994
--- /dev/null
+++ b/media/base/multi_channel_resampler.h
@@ -0,0 +1,73 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef MEDIA_BASE_MULTI_CHANNEL_RESAMPLER_H_
+#define MEDIA_BASE_MULTI_CHANNEL_RESAMPLER_H_
+
+#include <vector>
+
+#include "base/memory/scoped_ptr.h"
+#include "media/base/sinc_resampler.h"
+
+namespace media {
+
+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.
+ : public SincResampler::AudioSourceProvider {
+ public:
+ // 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.
+ 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.
+ public:
+ // ProvideInput() is called repeatedly to render time-slices of a continuous
+ // multi channel audio stream.
+ 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.
+ 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.
+
+ protected:
+ virtual ~MultiChannelAudioSourceProvider() {}
+ };
+
+ // Constructs a MultiChannelResampler with the specified |provider|, which is
+ // used to acquire data for all channels during resampling. |scale_factor| is
+ // input_sample_rate / output_sample_rate.
+ // 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.
+ // const if so... Following the RenderCallback model currently.
+ 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
+ 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
+ virtual ~MultiChannelResampler();
+
+ // Resample |number_of_frames| of data from |provider_| into |audio_data|.
+ void Resample(const std::vector<float*>& audio_data, int number_of_frames);
+
+ private:
+ int number_of_channels_;
Ami GONE FROM CHROMIUM 2012/06/30 20:12:14 const
DaleCurtis 2012/07/03 03:02:57 Removed.
+
+ // 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'
+ size_t channel_index_;
+
+ // Number of frames requested by SincResampler from ProvideInput() when the
+ // |channel_index_| was 0.
+ int last_frame_count_;
+
+ // Sanity check to ensure ProvideInput() is only called once per channel.
+ size_t callback_count_;
+
+ // Source of data for resampling.
+ MultiChannelAudioSourceProvider* provider_;
+
+ // Each channel has its own high quality resampler.
+ std::vector<SincResampler*> resamplers_;
Ami GONE FROM CHROMIUM 2012/06/30 20:12:14 ScopedVector
DaleCurtis 2012/07/03 03:02:57 Done.
+
+ // Staging area for data between the MultiChannelAudioSourceProvider and the
+ // SincResampler.
+ 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
+
+ // SincResampler::AudioSourceProvider implementation. ProvideInput() will be
+ // 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.
+ // it's called, it will provide the next channel of data.
+ virtual void ProvideInput(float* destination, int number_of_frames) OVERRIDE;
+};
+
+} // namespace media
+
+#endif // MEDIA_BASE_MULTI_CHANNEL_RESAMPLER_H_
« no previous file with comments | « no previous file | media/base/multi_channel_resampler.cc » ('j') | media/base/multi_channel_resampler.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698