| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright (C) 2011 Google Inc. All rights reserved. | 2  * Copyright (C) 2011 Google Inc. All rights reserved. | 
| 3  * | 3  * | 
| 4  * Redistribution and use in source and binary forms, with or without | 4  * Redistribution and use in source and binary forms, with or without | 
| 5  * modification, are permitted provided that the following conditions | 5  * modification, are permitted provided that the following conditions | 
| 6  * are met: | 6  * are met: | 
| 7  * | 7  * | 
| 8  * 1.  Redistributions of source code must retain the above copyright | 8  * 1.  Redistributions of source code must retain the above copyright | 
| 9  *     notice, this list of conditions and the following disclaimer. | 9  *     notice, this list of conditions and the following disclaimer. | 
| 10  * 2.  Redistributions in binary form must reproduce the above copyright | 10  * 2.  Redistributions in binary form must reproduce the above copyright | 
| (...skipping 28 matching lines...) Expand all  Loading... | 
| 39 | 39 | 
| 40 // SincResampler is a high-quality sample-rate converter. | 40 // SincResampler is a high-quality sample-rate converter. | 
| 41 | 41 | 
| 42 class PLATFORM_EXPORT SincResampler { | 42 class PLATFORM_EXPORT SincResampler { | 
| 43   USING_FAST_MALLOC(SincResampler); | 43   USING_FAST_MALLOC(SincResampler); | 
| 44   WTF_MAKE_NONCOPYABLE(SincResampler); | 44   WTF_MAKE_NONCOPYABLE(SincResampler); | 
| 45 | 45 | 
| 46  public: | 46  public: | 
| 47   // scaleFactor == sourceSampleRate / destinationSampleRate | 47   // scaleFactor == sourceSampleRate / destinationSampleRate | 
| 48   // kernelSize can be adjusted for quality (higher is better) | 48   // kernelSize can be adjusted for quality (higher is better) | 
| 49   // numberOfKernelOffsets is used for interpolation and is the number of sub-sa
     mple kernel shifts. | 49   // numberOfKernelOffsets is used for interpolation and is the number of | 
|  | 50   // sub-sample kernel shifts. | 
| 50   SincResampler(double scaleFactor, | 51   SincResampler(double scaleFactor, | 
| 51                 unsigned kernelSize = 32, | 52                 unsigned kernelSize = 32, | 
| 52                 unsigned numberOfKernelOffsets = 32); | 53                 unsigned numberOfKernelOffsets = 32); | 
| 53 | 54 | 
| 54   // Processes numberOfSourceFrames from source to produce numberOfSourceFrames 
     / scaleFactor frames in destination. | 55   // Processes numberOfSourceFrames from source to produce numberOfSourceFrames | 
|  | 56   // / scaleFactor frames in destination. | 
| 55   void process(const float* source, | 57   void process(const float* source, | 
| 56                float* destination, | 58                float* destination, | 
| 57                unsigned numberOfSourceFrames); | 59                unsigned numberOfSourceFrames); | 
| 58 | 60 | 
| 59   // Process with input source callback function for streaming applications. | 61   // Process with input source callback function for streaming applications. | 
| 60   void process(AudioSourceProvider*, | 62   void process(AudioSourceProvider*, | 
| 61                float* destination, | 63                float* destination, | 
| 62                size_t framesToProcess); | 64                size_t framesToProcess); | 
| 63 | 65 | 
| 64  protected: | 66  protected: | 
| 65   void initializeKernel(); | 67   void initializeKernel(); | 
| 66   void consumeSource(float* buffer, unsigned numberOfSourceFrames); | 68   void consumeSource(float* buffer, unsigned numberOfSourceFrames); | 
| 67 | 69 | 
| 68   double m_scaleFactor; | 70   double m_scaleFactor; | 
| 69   unsigned m_kernelSize; | 71   unsigned m_kernelSize; | 
| 70   unsigned m_numberOfKernelOffsets; | 72   unsigned m_numberOfKernelOffsets; | 
| 71 | 73 | 
| 72   // m_kernelStorage has m_numberOfKernelOffsets kernels back-to-back, each of s
     ize m_kernelSize. | 74   // m_kernelStorage has m_numberOfKernelOffsets kernels back-to-back, each of | 
| 73   // The kernel offsets are sub-sample shifts of a windowed sinc() shifted from 
     0.0 to 1.0 sample. | 75   // size m_kernelSize.  The kernel offsets are sub-sample shifts of a windowed | 
|  | 76   // sinc() shifted from 0.0 to 1.0 sample. | 
| 74   AudioFloatArray m_kernelStorage; | 77   AudioFloatArray m_kernelStorage; | 
| 75 | 78 | 
| 76   // m_virtualSourceIndex is an index on the source input buffer with sub-sample
      precision. | 79   // m_virtualSourceIndex is an index on the source input buffer with sub-sample | 
| 77   // It must be double precision to avoid drift. | 80   // precision.  It must be double precision to avoid drift. | 
| 78   double m_virtualSourceIndex; | 81   double m_virtualSourceIndex; | 
| 79 | 82 | 
| 80   // This is the number of destination frames we generate per processing pass on
      the buffer. | 83   // This is the number of destination frames we generate per processing pass on | 
|  | 84   // the buffer. | 
| 81   unsigned m_blockSize; | 85   unsigned m_blockSize; | 
| 82 | 86 | 
| 83   // Source is copied into this buffer for each processing pass. | 87   // Source is copied into this buffer for each processing pass. | 
| 84   AudioFloatArray m_inputBuffer; | 88   AudioFloatArray m_inputBuffer; | 
| 85 | 89 | 
| 86   const float* m_source; | 90   const float* m_source; | 
| 87   unsigned m_sourceFramesAvailable; | 91   unsigned m_sourceFramesAvailable; | 
| 88 | 92 | 
| 89   // m_sourceProvider is used to provide the audio input stream to the resampler
     . | 93   // m_sourceProvider is used to provide the audio input stream to the | 
|  | 94   // resampler. | 
| 90   AudioSourceProvider* m_sourceProvider; | 95   AudioSourceProvider* m_sourceProvider; | 
| 91 | 96 | 
| 92   // The buffer is primed once at the very beginning of processing. | 97   // The buffer is primed once at the very beginning of processing. | 
| 93   bool m_isBufferPrimed; | 98   bool m_isBufferPrimed; | 
| 94 }; | 99 }; | 
| 95 | 100 | 
| 96 }  // namespace blink | 101 }  // namespace blink | 
| 97 | 102 | 
| 98 #endif  // SincResampler_h | 103 #endif  // SincResampler_h | 
| OLD | NEW | 
|---|