128fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org/* 228fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 328fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org * 428fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org * Use of this source code is governed by a BSD-style license 528fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org * that can be found in the LICENSE file in the root of the source 628fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org * tree. An additional intellectual property rights grant can be found 728fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org * in the file PATENTS. All contributing project authors may 828fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org * be found in the AUTHORS file in the root of the source tree. 928fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org */ 1028fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org#include <string> 1128fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 1228fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org#include "testing/gtest/include/gtest/gtest.h" 1328fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org#include "webrtc/modules/audio_coding/codecs/opus/interface/opus_interface.h" 1496c18e050e926d0654f1b9d6756177009ef1790dminyue@webrtc.org#include "webrtc/modules/audio_coding/codecs/opus/opus_inst.h" 1528fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org#include "webrtc/test/testsupport/fileutils.h" 1628fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 1728fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.orgnamespace webrtc { 1828fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 1928fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org// Number of samples in a 60 ms stereo frame, sampled at 48 kHz. 20254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.orgconst int kOpusMaxFrameSamples = 48 * 60 * 2; 2128fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org// Maximum number of bytes in output bitstream. 2298b201189e601aa1863085e0016e868d2db416b1pbos@webrtc.orgconst size_t kMaxBytes = 1000; 23254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org// Number of samples-per-channel in a 20 ms frame, sampled at 48 kHz. 24254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.orgconst int kOpus20msFrameSamples = 48 * 20; 25254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org// Number of samples-per-channel in a 10 ms frame, sampled at 48 kHz. 26254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.orgconst int kOpus10msFrameSamples = 48 * 10; 2728fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 2828fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.orgclass OpusTest : public ::testing::Test { 2928fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org protected: 3028fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org OpusTest(); 3128fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org virtual void SetUp(); 3228fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 33b0aac71bfeb5b06083a9664434d936e091f54d91minyue@webrtc.org void TestSetMaxPlaybackRate(opus_int32 expect, int32_t set); 3496c18e050e926d0654f1b9d6756177009ef1790dminyue@webrtc.org 3528fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org WebRtcOpusEncInst* opus_mono_encoder_; 3628fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org WebRtcOpusEncInst* opus_stereo_encoder_; 3728fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org WebRtcOpusDecInst* opus_mono_decoder_; 3828fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org WebRtcOpusDecInst* opus_mono_decoder_new_; 3928fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org WebRtcOpusDecInst* opus_stereo_decoder_; 4028fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org WebRtcOpusDecInst* opus_stereo_decoder_new_; 4128fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 42254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org int16_t speech_data_[kOpusMaxFrameSamples]; 43254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org int16_t output_data_[kOpusMaxFrameSamples]; 4428fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org uint8_t bitstream_[kMaxBytes]; 4528fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org}; 4628fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 4728fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.orgOpusTest::OpusTest() 4828fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org : opus_mono_encoder_(NULL), 4928fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org opus_stereo_encoder_(NULL), 5028fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org opus_mono_decoder_(NULL), 5128fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org opus_mono_decoder_new_(NULL), 5228fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org opus_stereo_decoder_(NULL), 5328fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org opus_stereo_decoder_new_(NULL) { 5428fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org} 5528fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 5628fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.orgvoid OpusTest::SetUp() { 5728fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org FILE* input_file; 5828fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org const std::string file_name = 59254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org webrtc::test::ResourcePath("audio_coding/speech_mono_32_48kHz", "pcm"); 6028fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org input_file = fopen(file_name.c_str(), "rb"); 6128fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org ASSERT_TRUE(input_file != NULL); 62254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org ASSERT_EQ(kOpusMaxFrameSamples, 6328fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org static_cast<int32_t>(fread(speech_data_, sizeof(int16_t), 64254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org kOpusMaxFrameSamples, input_file))); 6528fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org fclose(input_file); 6628fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org input_file = NULL; 6728fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org} 6828fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 69b0aac71bfeb5b06083a9664434d936e091f54d91minyue@webrtc.orgvoid OpusTest::TestSetMaxPlaybackRate(opus_int32 expect, int32_t set) { 7096c18e050e926d0654f1b9d6756177009ef1790dminyue@webrtc.org opus_int32 bandwidth; 7196c18e050e926d0654f1b9d6756177009ef1790dminyue@webrtc.org // Test mono encoder. 72b0aac71bfeb5b06083a9664434d936e091f54d91minyue@webrtc.org EXPECT_EQ(0, WebRtcOpus_SetMaxPlaybackRate(opus_mono_encoder_, set)); 7396c18e050e926d0654f1b9d6756177009ef1790dminyue@webrtc.org opus_encoder_ctl(opus_mono_encoder_->encoder, 7496c18e050e926d0654f1b9d6756177009ef1790dminyue@webrtc.org OPUS_GET_MAX_BANDWIDTH(&bandwidth)); 7596c18e050e926d0654f1b9d6756177009ef1790dminyue@webrtc.org EXPECT_EQ(expect, bandwidth); 7696c18e050e926d0654f1b9d6756177009ef1790dminyue@webrtc.org // Test stereo encoder. 77b0aac71bfeb5b06083a9664434d936e091f54d91minyue@webrtc.org EXPECT_EQ(0, WebRtcOpus_SetMaxPlaybackRate(opus_stereo_encoder_, set)); 7896c18e050e926d0654f1b9d6756177009ef1790dminyue@webrtc.org opus_encoder_ctl(opus_stereo_encoder_->encoder, 7996c18e050e926d0654f1b9d6756177009ef1790dminyue@webrtc.org OPUS_GET_MAX_BANDWIDTH(&bandwidth)); 8096c18e050e926d0654f1b9d6756177009ef1790dminyue@webrtc.org EXPECT_EQ(expect, bandwidth); 8196c18e050e926d0654f1b9d6756177009ef1790dminyue@webrtc.org} 8296c18e050e926d0654f1b9d6756177009ef1790dminyue@webrtc.org 8328fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org// Test failing Create. 8428fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.orgTEST_F(OpusTest, OpusCreateFail) { 8528fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // Test to see that an invalid pointer is caught. 8628fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(-1, WebRtcOpus_EncoderCreate(NULL, 1)); 8728fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(-1, WebRtcOpus_EncoderCreate(&opus_mono_encoder_, 3)); 8828fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(-1, WebRtcOpus_DecoderCreate(NULL, 1)); 8928fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(-1, WebRtcOpus_DecoderCreate(&opus_mono_decoder_, 3)); 9028fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org} 9128fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 9228fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org// Test failing Free. 9328fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.orgTEST_F(OpusTest, OpusFreeFail) { 9428fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // Test to see that an invalid pointer is caught. 9528fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(-1, WebRtcOpus_EncoderFree(NULL)); 9628fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(-1, WebRtcOpus_DecoderFree(NULL)); 9728fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org} 9828fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 9928fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org// Test normal Create and Free. 10028fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.orgTEST_F(OpusTest, OpusCreateFree) { 10128fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderCreate(&opus_mono_encoder_, 1)); 10228fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_DecoderCreate(&opus_mono_decoder_, 1)); 10328fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderCreate(&opus_stereo_encoder_, 2)); 10428fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_DecoderCreate(&opus_stereo_decoder_, 2)); 10528fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_TRUE(opus_mono_encoder_ != NULL); 10628fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_TRUE(opus_mono_decoder_ != NULL); 10728fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_TRUE(opus_stereo_encoder_ != NULL); 10828fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_TRUE(opus_stereo_decoder_ != NULL); 10928fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // Free encoder and decoder memory. 11028fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderFree(opus_mono_encoder_)); 11128fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_DecoderFree(opus_mono_decoder_)); 11228fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderFree(opus_stereo_encoder_)); 11328fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_DecoderFree(opus_stereo_decoder_)); 11428fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org} 11528fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 11628fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.orgTEST_F(OpusTest, OpusEncodeDecodeMono) { 11728fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // Create encoder memory. 11828fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderCreate(&opus_mono_encoder_, 1)); 11928fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_DecoderCreate(&opus_mono_decoder_, 1)); 12028fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_DecoderCreate(&opus_mono_decoder_new_, 1)); 12128fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 12228fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // Set bitrate. 12328fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_SetBitRate(opus_mono_encoder_, 32000)); 12428fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 12528fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // Check number of channels for decoder. 12628fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(1, WebRtcOpus_DecoderChannels(opus_mono_decoder_)); 12728fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(1, WebRtcOpus_DecoderChannels(opus_mono_decoder_new_)); 12828fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 12928fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // Encode & decode. 13028fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org int16_t encoded_bytes; 13128fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org int16_t audio_type; 132254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org int16_t output_data_decode_new[kOpusMaxFrameSamples]; 133254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org int16_t output_data_decode[kOpusMaxFrameSamples]; 13428fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org int16_t* coded = reinterpret_cast<int16_t*>(bitstream_); 135254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org encoded_bytes = WebRtcOpus_Encode(opus_mono_encoder_, speech_data_, 136254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org kOpus20msFrameSamples, kMaxBytes, 137254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org bitstream_); 138254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org EXPECT_EQ(kOpus20msFrameSamples, 139254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org WebRtcOpus_DecodeNew(opus_mono_decoder_new_, bitstream_, 140254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org encoded_bytes, output_data_decode_new, 141254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org &audio_type)); 142254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org EXPECT_EQ(kOpus20msFrameSamples, 143254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org WebRtcOpus_Decode(opus_mono_decoder_, coded, 144254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org encoded_bytes, output_data_decode, 145254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org &audio_type)); 14628fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 14728fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // Data in |output_data_decode_new| should be the same as in 14828fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // |output_data_decode|. 149254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org for (int i = 0; i < kOpus20msFrameSamples; i++) { 15028fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(output_data_decode_new[i], output_data_decode[i]); 15128fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org } 15228fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 15328fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // Free memory. 15428fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderFree(opus_mono_encoder_)); 15528fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_DecoderFree(opus_mono_decoder_)); 15628fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_DecoderFree(opus_mono_decoder_new_)); 15728fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org} 15828fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 15928fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.orgTEST_F(OpusTest, OpusEncodeDecodeStereo) { 16028fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // Create encoder memory. 16128fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderCreate(&opus_stereo_encoder_, 2)); 16228fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_DecoderCreate(&opus_stereo_decoder_, 2)); 16328fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_DecoderCreate(&opus_stereo_decoder_new_, 2)); 16428fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 16528fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // Set bitrate. 16628fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_SetBitRate(opus_stereo_encoder_, 64000)); 16728fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 16828fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // Check number of channels for decoder. 16928fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(2, WebRtcOpus_DecoderChannels(opus_stereo_decoder_)); 17028fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(2, WebRtcOpus_DecoderChannels(opus_stereo_decoder_new_)); 17128fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 17228fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // Encode & decode. 17328fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org int16_t encoded_bytes; 17428fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org int16_t audio_type; 175254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org int16_t output_data_decode_new[kOpusMaxFrameSamples]; 176254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org int16_t output_data_decode[kOpusMaxFrameSamples]; 177254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org int16_t output_data_decode_slave[kOpusMaxFrameSamples]; 17828fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org int16_t* coded = reinterpret_cast<int16_t*>(bitstream_); 179254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org encoded_bytes = WebRtcOpus_Encode(opus_stereo_encoder_, speech_data_, 180254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org kOpus20msFrameSamples, kMaxBytes, 181254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org bitstream_); 182254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org EXPECT_EQ(kOpus20msFrameSamples, 183254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org WebRtcOpus_DecodeNew(opus_stereo_decoder_new_, bitstream_, 184254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org encoded_bytes, output_data_decode_new, 185254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org &audio_type)); 186254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org EXPECT_EQ(kOpus20msFrameSamples, 187254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org WebRtcOpus_Decode(opus_stereo_decoder_, coded, 188254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org encoded_bytes, output_data_decode, 189254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org &audio_type)); 190254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org EXPECT_EQ(kOpus20msFrameSamples, 191254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org WebRtcOpus_DecodeSlave(opus_stereo_decoder_, coded, 192254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org encoded_bytes, output_data_decode_slave, 19328fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org &audio_type)); 19428fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 19528fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // Data in |output_data_decode_new| should be the same as in 19628fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // |output_data_decode| and |output_data_decode_slave| interleaved to a 19728fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // stereo signal. 198254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org for (int i = 0; i < kOpus20msFrameSamples; i++) { 19928fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(output_data_decode_new[i * 2], output_data_decode[i]); 20028fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(output_data_decode_new[i * 2 + 1], output_data_decode_slave[i]); 20128fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org } 20228fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 20328fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // Free memory. 20428fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderFree(opus_stereo_encoder_)); 20528fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_DecoderFree(opus_stereo_decoder_)); 20628fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_DecoderFree(opus_stereo_decoder_new_)); 20728fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org} 20828fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 20928fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.orgTEST_F(OpusTest, OpusSetBitRate) { 21028fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // Test without creating encoder memory. 21128fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(-1, WebRtcOpus_SetBitRate(opus_mono_encoder_, 60000)); 21228fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(-1, WebRtcOpus_SetBitRate(opus_stereo_encoder_, 60000)); 21328fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 21428fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // Create encoder memory, try with different bitrates. 21528fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderCreate(&opus_mono_encoder_, 1)); 21628fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderCreate(&opus_stereo_encoder_, 2)); 21728fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_SetBitRate(opus_mono_encoder_, 30000)); 21828fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_SetBitRate(opus_stereo_encoder_, 60000)); 21928fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_SetBitRate(opus_mono_encoder_, 300000)); 22028fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_SetBitRate(opus_stereo_encoder_, 600000)); 22128fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 22228fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // Free memory. 22328fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderFree(opus_mono_encoder_)); 22428fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderFree(opus_stereo_encoder_)); 22528fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org} 22628fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 2271f2820b28dfbbe8917eafee618579608bea200baminyue@webrtc.orgTEST_F(OpusTest, OpusSetComplexity) { 2281f2820b28dfbbe8917eafee618579608bea200baminyue@webrtc.org // Test without creating encoder memory. 2291f2820b28dfbbe8917eafee618579608bea200baminyue@webrtc.org EXPECT_EQ(-1, WebRtcOpus_SetComplexity(opus_mono_encoder_, 9)); 2301f2820b28dfbbe8917eafee618579608bea200baminyue@webrtc.org EXPECT_EQ(-1, WebRtcOpus_SetComplexity(opus_stereo_encoder_, 9)); 2311f2820b28dfbbe8917eafee618579608bea200baminyue@webrtc.org 2321f2820b28dfbbe8917eafee618579608bea200baminyue@webrtc.org // Create encoder memory, try with different complexities. 2331f2820b28dfbbe8917eafee618579608bea200baminyue@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderCreate(&opus_mono_encoder_, 1)); 2341f2820b28dfbbe8917eafee618579608bea200baminyue@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderCreate(&opus_stereo_encoder_, 2)); 2351f2820b28dfbbe8917eafee618579608bea200baminyue@webrtc.org 2361f2820b28dfbbe8917eafee618579608bea200baminyue@webrtc.org EXPECT_EQ(0, WebRtcOpus_SetComplexity(opus_mono_encoder_, 0)); 2371f2820b28dfbbe8917eafee618579608bea200baminyue@webrtc.org EXPECT_EQ(0, WebRtcOpus_SetComplexity(opus_stereo_encoder_, 0)); 2381f2820b28dfbbe8917eafee618579608bea200baminyue@webrtc.org EXPECT_EQ(0, WebRtcOpus_SetComplexity(opus_mono_encoder_, 10)); 2391f2820b28dfbbe8917eafee618579608bea200baminyue@webrtc.org EXPECT_EQ(0, WebRtcOpus_SetComplexity(opus_stereo_encoder_, 10)); 2401f2820b28dfbbe8917eafee618579608bea200baminyue@webrtc.org EXPECT_EQ(-1, WebRtcOpus_SetComplexity(opus_mono_encoder_, 11)); 2411f2820b28dfbbe8917eafee618579608bea200baminyue@webrtc.org EXPECT_EQ(-1, WebRtcOpus_SetComplexity(opus_stereo_encoder_, 11)); 2421f2820b28dfbbe8917eafee618579608bea200baminyue@webrtc.org 2431f2820b28dfbbe8917eafee618579608bea200baminyue@webrtc.org // Free memory. 2441f2820b28dfbbe8917eafee618579608bea200baminyue@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderFree(opus_mono_encoder_)); 2451f2820b28dfbbe8917eafee618579608bea200baminyue@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderFree(opus_stereo_encoder_)); 2461f2820b28dfbbe8917eafee618579608bea200baminyue@webrtc.org} 2471f2820b28dfbbe8917eafee618579608bea200baminyue@webrtc.org 24828fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org// Encode and decode one frame (stereo), initialize the decoder and 24928fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org// decode once more. 25028fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.orgTEST_F(OpusTest, OpusDecodeInit) { 25128fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // Create encoder memory. 25228fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderCreate(&opus_stereo_encoder_, 2)); 25328fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_DecoderCreate(&opus_stereo_decoder_, 2)); 25428fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_DecoderCreate(&opus_stereo_decoder_new_, 2)); 25528fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 25628fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // Encode & decode. 25728fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org int16_t encoded_bytes; 25828fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org int16_t audio_type; 259254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org int16_t output_data_decode_new[kOpusMaxFrameSamples]; 260254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org int16_t output_data_decode[kOpusMaxFrameSamples]; 261254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org int16_t output_data_decode_slave[kOpusMaxFrameSamples]; 26228fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org int16_t* coded = reinterpret_cast<int16_t*>(bitstream_); 263254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org encoded_bytes = WebRtcOpus_Encode(opus_stereo_encoder_, speech_data_, 264254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org kOpus20msFrameSamples, kMaxBytes, 265254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org bitstream_); 266254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org EXPECT_EQ(kOpus20msFrameSamples, 267254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org WebRtcOpus_DecodeNew(opus_stereo_decoder_new_, bitstream_, 268254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org encoded_bytes, output_data_decode_new, 269254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org &audio_type)); 270254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org EXPECT_EQ(kOpus20msFrameSamples, 271254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org WebRtcOpus_Decode(opus_stereo_decoder_, coded, 272254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org encoded_bytes, output_data_decode, 273254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org &audio_type)); 274254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org EXPECT_EQ(kOpus20msFrameSamples, 275254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org WebRtcOpus_DecodeSlave(opus_stereo_decoder_, coded, 276254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org encoded_bytes, output_data_decode_slave, 27728fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org &audio_type)); 27828fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 27928fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // Data in |output_data_decode_new| should be the same as in 28028fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // |output_data_decode| and |output_data_decode_slave| interleaved to a 28128fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // stereo signal. 282254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org for (int i = 0; i < kOpus20msFrameSamples; i++) { 28328fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(output_data_decode_new[i * 2], output_data_decode[i]); 28428fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(output_data_decode_new[i * 2 + 1], output_data_decode_slave[i]); 28528fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org } 28628fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 28728fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_DecoderInitNew(opus_stereo_decoder_new_)); 28828fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_DecoderInit(opus_stereo_decoder_)); 28928fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_DecoderInitSlave(opus_stereo_decoder_)); 29028fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 291254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org EXPECT_EQ(kOpus20msFrameSamples, 292254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org WebRtcOpus_DecodeNew(opus_stereo_decoder_new_, bitstream_, 293254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org encoded_bytes, output_data_decode_new, 294254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org &audio_type)); 295254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org EXPECT_EQ(kOpus20msFrameSamples, 296254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org WebRtcOpus_Decode(opus_stereo_decoder_, coded, 297254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org encoded_bytes, output_data_decode, 298254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org &audio_type)); 299254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org EXPECT_EQ(kOpus20msFrameSamples, 300254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org WebRtcOpus_DecodeSlave(opus_stereo_decoder_, coded, 301254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org encoded_bytes, output_data_decode_slave, 30228fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org &audio_type)); 30328fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 30428fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // Data in |output_data_decode_new| should be the same as in 30528fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // |output_data_decode| and |output_data_decode_slave| interleaved to a 30628fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // stereo signal. 307254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org for (int i = 0; i < kOpus20msFrameSamples; i++) { 30828fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(output_data_decode_new[i * 2], output_data_decode[i]); 30928fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(output_data_decode_new[i * 2 + 1], output_data_decode_slave[i]); 31028fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org } 31128fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 31228fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // Free memory. 31328fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderFree(opus_stereo_encoder_)); 31428fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_DecoderFree(opus_stereo_decoder_)); 31528fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_DecoderFree(opus_stereo_decoder_new_)); 31628fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org} 31728fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 31852db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.orgTEST_F(OpusTest, OpusEnableDisableFec) { 31952db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org // Test without creating encoder memory. 32052db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org EXPECT_EQ(-1, WebRtcOpus_EnableFec(opus_mono_encoder_)); 32152db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org EXPECT_EQ(-1, WebRtcOpus_DisableFec(opus_stereo_encoder_)); 32252db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org 32352db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org // Create encoder memory, try with different bitrates. 32452db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderCreate(&opus_mono_encoder_, 1)); 32552db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderCreate(&opus_stereo_encoder_, 2)); 32652db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org 32752db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org EXPECT_EQ(0, WebRtcOpus_EnableFec(opus_mono_encoder_)); 32852db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org EXPECT_EQ(0, WebRtcOpus_EnableFec(opus_stereo_encoder_)); 32952db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org EXPECT_EQ(0, WebRtcOpus_DisableFec(opus_mono_encoder_)); 33052db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org EXPECT_EQ(0, WebRtcOpus_DisableFec(opus_stereo_encoder_)); 33152db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org 33252db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org // Free memory. 33352db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderFree(opus_mono_encoder_)); 33452db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderFree(opus_stereo_encoder_)); 33552db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org} 33652db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org 33752db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.orgTEST_F(OpusTest, OpusSetPacketLossRate) { 33852db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org // Test without creating encoder memory. 33952db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org EXPECT_EQ(-1, WebRtcOpus_SetPacketLossRate(opus_mono_encoder_, 50)); 34052db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org EXPECT_EQ(-1, WebRtcOpus_SetPacketLossRate(opus_stereo_encoder_, 50)); 34152db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org 34252db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org // Create encoder memory, try with different bitrates. 34352db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderCreate(&opus_mono_encoder_, 1)); 34452db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderCreate(&opus_stereo_encoder_, 2)); 34552db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org 34652db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org EXPECT_EQ(0, WebRtcOpus_SetPacketLossRate(opus_mono_encoder_, 50)); 34752db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org EXPECT_EQ(0, WebRtcOpus_SetPacketLossRate(opus_stereo_encoder_, 50)); 34852db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org EXPECT_EQ(-1, WebRtcOpus_SetPacketLossRate(opus_mono_encoder_, -1)); 34952db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org EXPECT_EQ(-1, WebRtcOpus_SetPacketLossRate(opus_stereo_encoder_, -1)); 35052db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org EXPECT_EQ(-1, WebRtcOpus_SetPacketLossRate(opus_mono_encoder_, 101)); 35152db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org EXPECT_EQ(-1, WebRtcOpus_SetPacketLossRate(opus_stereo_encoder_, 101)); 35252db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org 35352db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org // Free memory. 35452db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderFree(opus_mono_encoder_)); 35552db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderFree(opus_stereo_encoder_)); 35652db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org} 35752db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org 358b0aac71bfeb5b06083a9664434d936e091f54d91minyue@webrtc.orgTEST_F(OpusTest, OpusSetMaxPlaybackRate) { 35996c18e050e926d0654f1b9d6756177009ef1790dminyue@webrtc.org // Test without creating encoder memory. 360b0aac71bfeb5b06083a9664434d936e091f54d91minyue@webrtc.org EXPECT_EQ(-1, WebRtcOpus_SetMaxPlaybackRate(opus_mono_encoder_, 20000)); 361b0aac71bfeb5b06083a9664434d936e091f54d91minyue@webrtc.org EXPECT_EQ(-1, WebRtcOpus_SetMaxPlaybackRate(opus_stereo_encoder_, 20000)); 36296c18e050e926d0654f1b9d6756177009ef1790dminyue@webrtc.org 36396c18e050e926d0654f1b9d6756177009ef1790dminyue@webrtc.org // Create encoder memory, try with different bitrates. 36496c18e050e926d0654f1b9d6756177009ef1790dminyue@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderCreate(&opus_mono_encoder_, 1)); 36596c18e050e926d0654f1b9d6756177009ef1790dminyue@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderCreate(&opus_stereo_encoder_, 2)); 36696c18e050e926d0654f1b9d6756177009ef1790dminyue@webrtc.org 367b0aac71bfeb5b06083a9664434d936e091f54d91minyue@webrtc.org TestSetMaxPlaybackRate(OPUS_BANDWIDTH_FULLBAND, 48000); 368b0aac71bfeb5b06083a9664434d936e091f54d91minyue@webrtc.org TestSetMaxPlaybackRate(OPUS_BANDWIDTH_FULLBAND, 24001); 369b0aac71bfeb5b06083a9664434d936e091f54d91minyue@webrtc.org TestSetMaxPlaybackRate(OPUS_BANDWIDTH_SUPERWIDEBAND, 24000); 370b0aac71bfeb5b06083a9664434d936e091f54d91minyue@webrtc.org TestSetMaxPlaybackRate(OPUS_BANDWIDTH_SUPERWIDEBAND, 16001); 371b0aac71bfeb5b06083a9664434d936e091f54d91minyue@webrtc.org TestSetMaxPlaybackRate(OPUS_BANDWIDTH_WIDEBAND, 16000); 372b0aac71bfeb5b06083a9664434d936e091f54d91minyue@webrtc.org TestSetMaxPlaybackRate(OPUS_BANDWIDTH_WIDEBAND, 12001); 373b0aac71bfeb5b06083a9664434d936e091f54d91minyue@webrtc.org TestSetMaxPlaybackRate(OPUS_BANDWIDTH_MEDIUMBAND, 12000); 374b0aac71bfeb5b06083a9664434d936e091f54d91minyue@webrtc.org TestSetMaxPlaybackRate(OPUS_BANDWIDTH_MEDIUMBAND, 8001); 375b0aac71bfeb5b06083a9664434d936e091f54d91minyue@webrtc.org TestSetMaxPlaybackRate(OPUS_BANDWIDTH_NARROWBAND, 8000); 376b0aac71bfeb5b06083a9664434d936e091f54d91minyue@webrtc.org TestSetMaxPlaybackRate(OPUS_BANDWIDTH_NARROWBAND, 4000); 37796c18e050e926d0654f1b9d6756177009ef1790dminyue@webrtc.org 37896c18e050e926d0654f1b9d6756177009ef1790dminyue@webrtc.org // Free memory. 37996c18e050e926d0654f1b9d6756177009ef1790dminyue@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderFree(opus_mono_encoder_)); 38096c18e050e926d0654f1b9d6756177009ef1790dminyue@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderFree(opus_stereo_encoder_)); 38196c18e050e926d0654f1b9d6756177009ef1790dminyue@webrtc.org} 38252db76a4671d26cdef4bb8a8ddf09f1899a46c29minyue@webrtc.org 383ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org// PLC in mono mode. 384ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.orgTEST_F(OpusTest, OpusDecodePlcMono) { 385ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org // Create encoder memory. 386ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderCreate(&opus_mono_encoder_, 1)); 387ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_DecoderCreate(&opus_mono_decoder_, 1)); 388ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_DecoderCreate(&opus_mono_decoder_new_, 1)); 389ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org 390ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org // Set bitrate. 391ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_SetBitRate(opus_mono_encoder_, 32000)); 392ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org 393ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org // Check number of channels for decoder. 394ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org EXPECT_EQ(1, WebRtcOpus_DecoderChannels(opus_mono_decoder_)); 395ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org EXPECT_EQ(1, WebRtcOpus_DecoderChannels(opus_mono_decoder_new_)); 396ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org 397ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org // Encode & decode. 398ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org int16_t encoded_bytes; 399ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org int16_t audio_type; 400254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org int16_t output_data_decode_new[kOpusMaxFrameSamples]; 401254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org int16_t output_data_decode[kOpusMaxFrameSamples]; 402ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org int16_t* coded = reinterpret_cast<int16_t*>(bitstream_); 403254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org encoded_bytes = WebRtcOpus_Encode(opus_mono_encoder_, speech_data_, 404254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org kOpus20msFrameSamples, kMaxBytes, 405254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org bitstream_); 406254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org EXPECT_EQ(kOpus20msFrameSamples, 407254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org WebRtcOpus_DecodeNew(opus_mono_decoder_new_, bitstream_, 408254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org encoded_bytes, output_data_decode_new, 409254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org &audio_type)); 410254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org EXPECT_EQ(kOpus20msFrameSamples, 411254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org WebRtcOpus_Decode(opus_mono_decoder_, coded, 412254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org encoded_bytes, output_data_decode, 413254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org &audio_type)); 414ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org 415ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org // Call decoder PLC for both versions of the decoder. 416254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org int16_t plc_buffer[kOpusMaxFrameSamples]; 417254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org int16_t plc_buffer_new[kOpusMaxFrameSamples]; 418254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org EXPECT_EQ(kOpus20msFrameSamples, 419254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org WebRtcOpus_DecodePlcMaster(opus_mono_decoder_, plc_buffer, 1)); 420254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org EXPECT_EQ(kOpus20msFrameSamples, 421254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org WebRtcOpus_DecodePlc(opus_mono_decoder_new_, plc_buffer_new, 1)); 422ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org 423ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org // Data in |plc_buffer| should be the same as in |plc_buffer_new|. 424254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org for (int i = 0; i < kOpus20msFrameSamples; i++) { 425ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org EXPECT_EQ(plc_buffer[i], plc_buffer_new[i]); 426ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org } 427ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org 428ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org // Free memory. 429ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderFree(opus_mono_encoder_)); 430ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_DecoderFree(opus_mono_decoder_)); 431ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_DecoderFree(opus_mono_decoder_new_)); 432ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org} 433ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org 434ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org// PLC in stereo mode. 435ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.orgTEST_F(OpusTest, OpusDecodePlcStereo) { 436ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org // Create encoder memory. 437ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderCreate(&opus_stereo_encoder_, 2)); 438ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_DecoderCreate(&opus_stereo_decoder_, 2)); 439ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_DecoderCreate(&opus_stereo_decoder_new_, 2)); 440ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org 441ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org // Set bitrate. 442ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_SetBitRate(opus_stereo_encoder_, 64000)); 443ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org 444ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org // Check number of channels for decoder. 445ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org EXPECT_EQ(2, WebRtcOpus_DecoderChannels(opus_stereo_decoder_)); 446ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org EXPECT_EQ(2, WebRtcOpus_DecoderChannels(opus_stereo_decoder_new_)); 447ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org 448ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org // Encode & decode. 449ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org int16_t encoded_bytes; 450ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org int16_t audio_type; 451254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org int16_t output_data_decode_new[kOpusMaxFrameSamples]; 452254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org int16_t output_data_decode[kOpusMaxFrameSamples]; 453254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org int16_t output_data_decode_slave[kOpusMaxFrameSamples]; 454ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org int16_t* coded = reinterpret_cast<int16_t*>(bitstream_); 455254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org encoded_bytes = WebRtcOpus_Encode(opus_stereo_encoder_, speech_data_, 456254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org kOpus20msFrameSamples, kMaxBytes, 457254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org bitstream_); 458254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org EXPECT_EQ(kOpus20msFrameSamples, 459254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org WebRtcOpus_DecodeNew(opus_stereo_decoder_new_, bitstream_, 460254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org encoded_bytes, output_data_decode_new, 461254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org &audio_type)); 462254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org EXPECT_EQ(kOpus20msFrameSamples, 463254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org WebRtcOpus_Decode(opus_stereo_decoder_, coded, 464254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org encoded_bytes, output_data_decode, 465254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org &audio_type)); 466254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org EXPECT_EQ(kOpus20msFrameSamples, 467254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org WebRtcOpus_DecodeSlave(opus_stereo_decoder_, coded, 468254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org encoded_bytes, 469254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org output_data_decode_slave, 470ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org &audio_type)); 471ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org 472ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org // Call decoder PLC for both versions of the decoder. 473254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org int16_t plc_buffer_left[kOpusMaxFrameSamples]; 474254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org int16_t plc_buffer_right[kOpusMaxFrameSamples]; 475254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org int16_t plc_buffer_new[kOpusMaxFrameSamples]; 476254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org EXPECT_EQ(kOpus20msFrameSamples, 477254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org WebRtcOpus_DecodePlcMaster(opus_stereo_decoder_, 478254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org plc_buffer_left, 1)); 479254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org EXPECT_EQ(kOpus20msFrameSamples, 480254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org WebRtcOpus_DecodePlcSlave(opus_stereo_decoder_, 481254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org plc_buffer_right, 1)); 482254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org EXPECT_EQ(kOpus20msFrameSamples, 483254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org WebRtcOpus_DecodePlc(opus_stereo_decoder_new_, plc_buffer_new, 1)); 484ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org // Data in |plc_buffer_left| and |plc_buffer_right|should be the same as the 485ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org // interleaved samples in |plc_buffer_new|. 486254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org for (int i = 0, j = 0; i < kOpus20msFrameSamples; i++) { 487ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org EXPECT_EQ(plc_buffer_left[i], plc_buffer_new[j++]); 488ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org EXPECT_EQ(plc_buffer_right[i], plc_buffer_new[j++]); 489ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org } 490ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org 491ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org // Free memory. 492ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderFree(opus_stereo_encoder_)); 493ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_DecoderFree(opus_stereo_decoder_)); 494ea5f28b558ca3893ddcbbb3dad03b2eaf2790660tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_DecoderFree(opus_stereo_decoder_new_)); 49528fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org} 49628fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 49728fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org// Duration estimation. 49828fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.orgTEST_F(OpusTest, OpusDurationEstimation) { 49928fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // Create. 50028fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderCreate(&opus_stereo_encoder_, 2)); 50128fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_DecoderCreate(&opus_stereo_decoder_, 2)); 50228fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 50328fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org int16_t encoded_bytes; 50428fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 50528fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // 10 ms. 506254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org encoded_bytes = WebRtcOpus_Encode(opus_stereo_encoder_, speech_data_, 507254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org kOpus10msFrameSamples, kMaxBytes, 508254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org bitstream_); 509254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org EXPECT_EQ(kOpus10msFrameSamples, 510254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org WebRtcOpus_DurationEst(opus_stereo_decoder_, bitstream_, 511254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org encoded_bytes)); 51228fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 51328fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // 20 ms 514254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org encoded_bytes = WebRtcOpus_Encode(opus_stereo_encoder_, speech_data_, 515254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org kOpus20msFrameSamples, kMaxBytes, 516254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org bitstream_); 517254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org EXPECT_EQ(kOpus20msFrameSamples, 518254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org WebRtcOpus_DurationEst(opus_stereo_decoder_, bitstream_, 519254879d7e969771c28d0882582e02b1a0b0eeb14minyue@webrtc.org encoded_bytes)); 52028fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 52128fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org // Free memory. 52228fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_EncoderFree(opus_stereo_encoder_)); 52328fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org EXPECT_EQ(0, WebRtcOpus_DecoderFree(opus_stereo_decoder_)); 52428fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org} 52528fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org 52628fb40d05ae8540f76cea3f33eaf68eff5df6370tina.legrand@webrtc.org} // namespace webrtc 527