Bug 1440169 - Take TrackTicks samples in SineWaveGenerator::generate. r?achronop draft
authorAndreas Pehrson <pehrsons@mozilla.com>
Fri, 02 Mar 2018 11:43:57 +0100
changeset 762481 ac2c735fe70329aaf98f1ab32a4f4535bf025532
parent 762087 d7897ecd82ac606ca1fd54b6362af7b8b07788a6
child 762482 be87c3f05e48346a4a20faf0073c3e00c24c35d5
push id101174
push userbmo:apehrson@mozilla.com
push dateFri, 02 Mar 2018 13:11:54 +0000
reviewersachronop
bugs1440169
milestone60.0a1
Bug 1440169 - Take TrackTicks samples in SineWaveGenerator::generate. r?achronop MediaEngineDefaultAudio uses the SineWaveGenerator and passes a TrackTicks (int64_t) arg to generate(). It need to take the same type or bad things can happen. MozReview-Commit-ID: EoybtTFkWhT
dom/media/webrtc/SineWaveGenerator.h
--- a/dom/media/webrtc/SineWaveGenerator.h
+++ b/dom/media/webrtc/SineWaveGenerator.h
@@ -1,15 +1,17 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #ifndef SINEWAVEGENERATOR_H_
 #define SINEWAVEGENERATOR_H_
 
+#include "MediaSegment.h"
+
 namespace mozilla {
 
 // generate 1k sine wave per second
 class SineWaveGenerator
 {
 public:
   static const int bytesPerSample = 2;
   static const int millisecondsPerSecond = PR_MSEC_PER_SEC;
@@ -23,21 +25,21 @@ public:
     mAudioBuffer = MakeUnique<int16_t[]>(mTotalLength);
     for (int i = 0; i < mTotalLength; i++) {
       // Set volume to -20db. It's from 32768.0 * 10^(-20/20) = 3276.8
       mAudioBuffer[i] = (3276.8f * sin(2 * M_PI * i / mTotalLength));
     }
   }
 
   // NOTE: only safely called from a single thread (MSG callback)
-  void generate(int16_t* aBuffer, int16_t aLengthInSamples) {
-    int16_t remaining = aLengthInSamples;
+  void generate(int16_t* aBuffer, TrackTicks aLengthInSamples) {
+    TrackTicks remaining = aLengthInSamples;
 
     while (remaining) {
-      int16_t processSamples = 0;
+      TrackTicks processSamples = 0;
 
       if (mTotalLength - mReadLength >= remaining) {
         processSamples = remaining;
       } else {
         processSamples = mTotalLength - mReadLength;
       }
       memcpy(aBuffer, &mAudioBuffer[mReadLength], processSamples * bytesPerSample);
       aBuffer += processSamples;
@@ -46,15 +48,15 @@ public:
       if (mReadLength == mTotalLength) {
         mReadLength = 0;
       }
     }
   }
 
 private:
   UniquePtr<int16_t[]> mAudioBuffer;
-  int16_t mTotalLength;
-  int16_t mReadLength;
+  TrackTicks mTotalLength;
+  TrackTicks mReadLength;
 };
 
 } // namespace mozilla
 
 #endif /* SINEWAVEGENERATOR_H_ */