content/media/gtest/TestTrackEncoder.cpp

Tue, 06 Jan 2015 21:39:09 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Tue, 06 Jan 2015 21:39:09 +0100
branch
TOR_BUG_9701
changeset 8
97036ab72558
permissions
-rw-r--r--

Conditionally force memory storage according to privacy.thirdparty.isolate;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.

     1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     2 /* This Source Code Form is subject to the terms of the Mozilla Public
     3  * License, v. 2.0. If a copy of the MPL was not distributed with this
     4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     6 #include "gtest/gtest.h"
     7 #include "OpusTrackEncoder.h"
     9 using namespace mozilla;
    11 class TestOpusTrackEncoder : public OpusTrackEncoder
    12 {
    13 public:
    14   // Return true if it has successfully initialized the Opus encoder.
    15   bool TestOpusCreation(int aChannels, int aSamplingRate)
    16   {
    17     if (Init(aChannels, aSamplingRate) == NS_OK) {
    18       if (GetPacketDuration()) {
    19         return true;
    20       }
    21     }
    22     return false;
    23   }
    25   // Return the sample rate of data to be fed to the Opus encoder, could be
    26   // re-sampled if it was not one of the Opus supported sampling rates.
    27   // Init() is expected to be called first.
    28   int TestGetOutputSampleRate()
    29   {
    30     return mInitialized ? GetOutputSampleRate() : 0;
    31   }
    32 };
    34 static bool
    35 TestOpusInit(int aChannels, int aSamplingRate)
    36 {
    37   TestOpusTrackEncoder encoder;
    38   return encoder.TestOpusCreation(aChannels, aSamplingRate);
    39 }
    41 static int
    42 TestOpusResampler(int aChannels, int aSamplingRate)
    43 {
    44   TestOpusTrackEncoder encoder;
    45   EXPECT_TRUE(encoder.TestOpusCreation(aChannels, aSamplingRate));
    46   return encoder.TestGetOutputSampleRate();
    47 }
    49 TEST(Media, OpusEncoder_Init)
    50 {
    51   // Expect false with 0 or negative channels of input signal.
    52   EXPECT_FALSE(TestOpusInit(0, 16000));
    53   EXPECT_FALSE(TestOpusInit(-1, 16000));
    55   // The Opus format supports up to 8 channels, and supports multitrack audio up
    56   // to 255 channels, but the current implementation supports only mono and
    57   // stereo, and downmixes any more than that.
    58   // Expect false with channels of input signal exceed the max supported number.
    59   EXPECT_FALSE(TestOpusInit(8 + 1, 16000));
    61   // Should accept channels within valid range.
    62   for (int i = 1; i <= 8; i++) {
    63     EXPECT_TRUE(TestOpusInit(i, 16000));
    64   }
    66   // Expect false with 0 or negative sampling rate of input signal.
    67   EXPECT_FALSE(TestOpusInit(1, 0));
    68   EXPECT_FALSE(TestOpusInit(1, -1));
    69 }
    71 TEST(Media, OpusEncoder_Resample)
    72 {
    73   // Sampling rates of data to be fed to Opus encoder, should remain unchanged
    74   // if it is one of Opus supported rates (8000, 12000, 16000, 24000 and 48000
    75   // (kHz)) at initialization.
    76   EXPECT_TRUE(TestOpusResampler(1, 8000) == 8000);
    77   EXPECT_TRUE(TestOpusResampler(1, 12000) == 12000);
    78   EXPECT_TRUE(TestOpusResampler(1, 16000) == 16000);
    79   EXPECT_TRUE(TestOpusResampler(1, 24000) == 24000);
    80   EXPECT_TRUE(TestOpusResampler(1, 48000) == 48000);
    82   // Otherwise, it should be resampled to 48kHz by resampler.
    83   EXPECT_FALSE(TestOpusResampler(1, 9600) == 9600);
    84   EXPECT_FALSE(TestOpusResampler(1, 44100) == 44100);
    85 }

mercurial