Index: media/base/sinc_resampler.h |
diff --git a/media/base/sinc_resampler.h b/media/base/sinc_resampler.h |
index 3ccb85c5d8e8b2a325f17ec9aa26dbd36da45375..84695b190dfd72ff883ebb381b2598cc62a86d98 100644 |
--- a/media/base/sinc_resampler.h |
+++ b/media/base/sinc_resampler.h |
@@ -23,38 +23,35 @@ class MEDIA_EXPORT SincResampler { |
// TODO(dalecurtis): Test performance to see if we can jack this up to 64+. |
kKernelSize = 32, |
- // The number of destination frames generated per processing pass. Affects |
- // how often and for how much SincResampler calls back for input. Must be |
- // greater than kKernelSize. |
- kBlockSize = 512, |
+ // Default request size. Affects how often and for how much SincResampler |
+ // calls back for input. Must be greater than kKernelSize. |
+ kDefaultRequestSize = 512, |
// The kernel offset count is used for interpolation and is the number of |
// sub-sample kernel shifts. Can be adjusted for quality (higher is better) |
// at the expense of allocating more memory. |
kKernelOffsetCount = 32, |
kKernelStorageSize = kKernelSize * (kKernelOffsetCount + 1), |
- |
- // The size (in samples) of the internal buffer used by the resampler. |
- kBufferSize = kBlockSize + kKernelSize, |
- |
- // The maximum number of samples that may be requested from the callback |
- // ahead of the current position in the stream. |
- kMaximumLookAheadSize = kBufferSize |
}; |
// Callback type for providing more data into the resampler. Expects |frames| |
// of data to be rendered into |destination|; zero padded if not enough frames |
// are available to satisfy the request. |
- typedef base::Callback<void(float* destination, int frames)> ReadCB; |
+ typedef base::Callback<void(int frames, float* destination)> ReadCB; |
// Constructs a SincResampler with the specified |read_cb|, which is used to |
- // acquire audio data for resampling. |io_sample_rate_ratio| is the ratio of |
- // input / output sample rates. |
- SincResampler(double io_sample_rate_ratio, const ReadCB& read_cb); |
+ // acquire audio data for resampling. |io_sample_rate_ratio| is the ratio |
+ // of input / output sample rates. |request_frames| controls the size in |
+ // frames of the buffer requested by each |read_cb| call. The value must be |
+ // greater than kKernelSize. Specify kDefaultRequestSize if there are no |
+ // request size constraints. |
+ SincResampler(double io_sample_rate_ratio, |
+ size_t request_frames, |
+ const ReadCB& read_cb); |
virtual ~SincResampler(); |
// Resample |frames| of data from |read_cb_| into |destination|. |
- void Resample(float* destination, int frames); |
+ void Resample(int frames, float* destination); |
// The maximum size in frames that guarantees Resample() will only make a |
// single call to |read_cb_| for more data. |
@@ -76,6 +73,7 @@ class MEDIA_EXPORT SincResampler { |
FRIEND_TEST_ALL_PREFIXES(SincResamplerTest, ConvolveBenchmark); |
void InitializeKernel(); |
+ void UpdateRegions(bool second_load); |
// Compute convolution of |k1| and |k2| over |input_ptr|, resultant sums are |
// linearly interpolated using |kernel_interpolation_factor|. On x86, the |
@@ -104,7 +102,16 @@ class MEDIA_EXPORT SincResampler { |
bool buffer_primed_; |
// Source of data for resampling. |
- ReadCB read_cb_; |
+ const ReadCB read_cb_; |
+ |
+ // The size (in samples) to request from each |read_cb_| execution. |
+ const size_t request_frames_; |
+ |
+ // The number of source frames processed per pass. |
+ size_t block_size_; |
+ |
+ // The size (in samples) of the internal buffer used by the resampler. |
+ const size_t input_buffer_size_; |
// Contains kKernelOffsetCount kernels back-to-back, each of size kKernelSize. |
// The kernel offsets are sub-sample shifts of a windowed sinc shifted from |
@@ -125,12 +132,11 @@ class MEDIA_EXPORT SincResampler { |
// Pointers to the various regions inside |input_buffer_|. See the diagram at |
// the top of the .cc file for more information. |
- float* const r0_; |
+ float* r0_; |
float* const r1_; |
float* const r2_; |
- float* const r3_; |
- float* const r4_; |
- float* const r5_; |
+ float* r3_; |
+ float* r4_; |
DISALLOW_COPY_AND_ASSIGN(SincResampler); |
}; |