Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(844)

Side by Side Diff: webrtc/modules/audio_coding/main/test/SpatialAudio.cc

Issue 1481493004: audio_coding: remove "main" directory (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebased Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 #include <stdio.h>
12 #include <string.h>
13
14 #include <math.h>
15
16 #include "webrtc/common_types.h"
17 #include "webrtc/modules/audio_coding/main/test/SpatialAudio.h"
18 #include "webrtc/system_wrappers/include/trace.h"
19 #include "webrtc/system_wrappers/include/trace.h"
20 #include "webrtc/test/testsupport/fileutils.h"
21
22 namespace webrtc {
23
24 #define NUM_PANN_COEFFS 10
25
26 SpatialAudio::SpatialAudio(int testMode)
27 : _acmLeft(AudioCodingModule::Create(1)),
28 _acmRight(AudioCodingModule::Create(2)),
29 _acmReceiver(AudioCodingModule::Create(3)),
30 _testMode(testMode) {
31 }
32
33 SpatialAudio::~SpatialAudio() {
34 delete _channel;
35 _inFile.Close();
36 _outFile.Close();
37 }
38
39 int16_t SpatialAudio::Setup() {
40 _channel = new Channel;
41
42 // Register callback for the sender side.
43 CHECK_ERROR(_acmLeft->RegisterTransportCallback(_channel));
44 CHECK_ERROR(_acmRight->RegisterTransportCallback(_channel));
45 // Register the receiver ACM in channel
46 _channel->RegisterReceiverACM(_acmReceiver.get());
47
48 uint16_t sampFreqHz = 32000;
49
50 const std::string file_name = webrtc::test::ResourcePath(
51 "audio_coding/testfile32kHz", "pcm");
52 _inFile.Open(file_name, sampFreqHz, "rb", false);
53
54 std::string output_file = webrtc::test::OutputPath()
55 + "out_spatial_autotest.pcm";
56 if (_testMode == 1) {
57 output_file = webrtc::test::OutputPath() + "testspatial_out.pcm";
58 printf("\n");
59 printf("Enter the output file [%s]: ", output_file.c_str());
60 PCMFile::ChooseFile(&output_file, MAX_FILE_NAME_LENGTH_BYTE, &sampFreqHz);
61 } else {
62 output_file = webrtc::test::OutputPath() + "testspatial_out.pcm";
63 }
64 _outFile.Open(output_file, sampFreqHz, "wb", false);
65 _outFile.SaveStereo(true);
66
67 // Register all available codes as receiving codecs.
68 CodecInst codecInst;
69 int status;
70 uint8_t num_encoders = _acmReceiver->NumberOfCodecs();
71 // Register all available codes as receiving codecs once more.
72 for (uint8_t n = 0; n < num_encoders; n++) {
73 status = _acmReceiver->Codec(n, &codecInst);
74 if (status < 0) {
75 printf("Error in Codec(), no matching codec found");
76 }
77 status = _acmReceiver->RegisterReceiveCodec(codecInst);
78 if (status < 0) {
79 printf("Error in RegisterReceiveCodec() for payload type %d",
80 codecInst.pltype);
81 }
82 }
83
84 return 0;
85 }
86
87 void SpatialAudio::Perform() {
88 if (_testMode == 0) {
89 printf("Running SpatialAudio Test");
90 WEBRTC_TRACE(webrtc::kTraceStateInfo, webrtc::kTraceAudioCoding, -1,
91 "---------- SpatialAudio ----------");
92 }
93
94 Setup();
95
96 CodecInst codecInst;
97 _acmLeft->Codec((uint8_t) 1, &codecInst);
98 CHECK_ERROR(_acmLeft->RegisterSendCodec(codecInst));
99 EncodeDecode();
100
101 int16_t pannCntr = 0;
102
103 double leftPanning[NUM_PANN_COEFFS] = { 1.00, 0.95, 0.90, 0.85, 0.80, 0.75,
104 0.70, 0.60, 0.55, 0.50 };
105 double rightPanning[NUM_PANN_COEFFS] = { 0.50, 0.55, 0.60, 0.70, 0.75, 0.80,
106 0.85, 0.90, 0.95, 1.00 };
107
108 while ((pannCntr + 1) < NUM_PANN_COEFFS) {
109 _acmLeft->Codec((uint8_t) 0, &codecInst);
110 codecInst.pacsize = 480;
111 CHECK_ERROR(_acmLeft->RegisterSendCodec(codecInst));
112 CHECK_ERROR(_acmRight->RegisterSendCodec(codecInst));
113
114 EncodeDecode(leftPanning[pannCntr], rightPanning[pannCntr]);
115 pannCntr++;
116
117 // Change codec
118 _acmLeft->Codec((uint8_t) 3, &codecInst);
119 codecInst.pacsize = 320;
120 CHECK_ERROR(_acmLeft->RegisterSendCodec(codecInst));
121 CHECK_ERROR(_acmRight->RegisterSendCodec(codecInst));
122
123 EncodeDecode(leftPanning[pannCntr], rightPanning[pannCntr]);
124 pannCntr++;
125 if (_testMode == 0) {
126 printf(".");
127 }
128 }
129
130 _acmLeft->Codec((uint8_t) 4, &codecInst);
131 CHECK_ERROR(_acmLeft->RegisterSendCodec(codecInst));
132 EncodeDecode();
133
134 _acmLeft->Codec((uint8_t) 0, &codecInst);
135 codecInst.pacsize = 480;
136 CHECK_ERROR(_acmLeft->RegisterSendCodec(codecInst));
137 CHECK_ERROR(_acmRight->RegisterSendCodec(codecInst));
138 pannCntr = NUM_PANN_COEFFS - 1;
139 while (pannCntr >= 0) {
140 EncodeDecode(leftPanning[pannCntr], rightPanning[pannCntr]);
141 pannCntr--;
142 if (_testMode == 0) {
143 printf(".");
144 }
145 }
146 if (_testMode == 0) {
147 printf("Done!\n");
148 }
149 }
150
151 void SpatialAudio::EncodeDecode(const double leftPanning,
152 const double rightPanning) {
153 AudioFrame audioFrame;
154 int32_t outFileSampFreq = _outFile.SamplingFrequency();
155
156 const double rightToLeftRatio = rightPanning / leftPanning;
157
158 _channel->SetIsStereo(true);
159
160 while (!_inFile.EndOfFile()) {
161 _inFile.Read10MsData(audioFrame);
162 for (size_t n = 0; n < audioFrame.samples_per_channel_; n++) {
163 audioFrame.data_[n] = (int16_t) floor(
164 audioFrame.data_[n] * leftPanning + 0.5);
165 }
166 CHECK_ERROR(_acmLeft->Add10MsData(audioFrame));
167
168 for (size_t n = 0; n < audioFrame.samples_per_channel_; n++) {
169 audioFrame.data_[n] = (int16_t) floor(
170 audioFrame.data_[n] * rightToLeftRatio + 0.5);
171 }
172 CHECK_ERROR(_acmRight->Add10MsData(audioFrame));
173
174 CHECK_ERROR(_acmReceiver->PlayoutData10Ms(outFileSampFreq, &audioFrame));
175 _outFile.Write10MsData(audioFrame);
176 }
177 _inFile.Rewind();
178 }
179
180 void SpatialAudio::EncodeDecode() {
181 AudioFrame audioFrame;
182 int32_t outFileSampFreq = _outFile.SamplingFrequency();
183
184 _channel->SetIsStereo(false);
185
186 while (!_inFile.EndOfFile()) {
187 _inFile.Read10MsData(audioFrame);
188 CHECK_ERROR(_acmLeft->Add10MsData(audioFrame));
189
190 CHECK_ERROR(_acmReceiver->PlayoutData10Ms(outFileSampFreq, &audioFrame));
191 _outFile.Write10MsData(audioFrame);
192 }
193 _inFile.Rewind();
194 }
195
196 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/audio_coding/main/test/SpatialAudio.h ('k') | webrtc/modules/audio_coding/main/test/TestAllCodecs.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698