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

Side by Side Diff: webrtc/modules/audio_coding/neteq/tools/neteq_rtpplay.cc

Issue 2337473002: Multi frequency DTMF support - receiver side (Closed)
Patch Set: rebase Created 4 years, 1 month 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
1 /* 1 /*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 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 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 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 google::RegisterFlagValidator(&FLAGS_pcm16b_wb, &ValidatePayloadType); 109 google::RegisterFlagValidator(&FLAGS_pcm16b_wb, &ValidatePayloadType);
110 DEFINE_int32(pcm16b_swb32, 95, "RTP payload type for PCM16b-swb32 (32 kHz)"); 110 DEFINE_int32(pcm16b_swb32, 95, "RTP payload type for PCM16b-swb32 (32 kHz)");
111 const bool pcm16b_swb32_dummy = 111 const bool pcm16b_swb32_dummy =
112 google::RegisterFlagValidator(&FLAGS_pcm16b_swb32, &ValidatePayloadType); 112 google::RegisterFlagValidator(&FLAGS_pcm16b_swb32, &ValidatePayloadType);
113 DEFINE_int32(pcm16b_swb48, 96, "RTP payload type for PCM16b-swb48 (48 kHz)"); 113 DEFINE_int32(pcm16b_swb48, 96, "RTP payload type for PCM16b-swb48 (48 kHz)");
114 const bool pcm16b_swb48_dummy = 114 const bool pcm16b_swb48_dummy =
115 google::RegisterFlagValidator(&FLAGS_pcm16b_swb48, &ValidatePayloadType); 115 google::RegisterFlagValidator(&FLAGS_pcm16b_swb48, &ValidatePayloadType);
116 DEFINE_int32(g722, 9, "RTP payload type for G.722"); 116 DEFINE_int32(g722, 9, "RTP payload type for G.722");
117 const bool g722_dummy = 117 const bool g722_dummy =
118 google::RegisterFlagValidator(&FLAGS_g722, &ValidatePayloadType); 118 google::RegisterFlagValidator(&FLAGS_g722, &ValidatePayloadType);
119 DEFINE_int32(avt, 106, "RTP payload type for AVT/DTMF"); 119 DEFINE_int32(avt, 106, "RTP payload type for AVT/DTMF (8 kHz)");
120 const bool avt_dummy = 120 const bool avt_dummy =
121 google::RegisterFlagValidator(&FLAGS_avt, &ValidatePayloadType); 121 google::RegisterFlagValidator(&FLAGS_avt, &ValidatePayloadType);
122 DEFINE_int32(avt_16, 114, "RTP payload type for AVT/DTMF (16 kHz)");
123 const bool avt_16_dummy =
124 google::RegisterFlagValidator(&FLAGS_avt_16, &ValidatePayloadType);
125 DEFINE_int32(avt_32, 115, "RTP payload type for AVT/DTMF (32 kHz)");
126 const bool avt_32_dummy =
127 google::RegisterFlagValidator(&FLAGS_avt_32, &ValidatePayloadType);
128 DEFINE_int32(avt_48, 116, "RTP payload type for AVT/DTMF (48 kHz)");
129 const bool avt_48_dummy =
130 google::RegisterFlagValidator(&FLAGS_avt_48, &ValidatePayloadType);
122 DEFINE_int32(red, 117, "RTP payload type for redundant audio (RED)"); 131 DEFINE_int32(red, 117, "RTP payload type for redundant audio (RED)");
123 const bool red_dummy = 132 const bool red_dummy =
124 google::RegisterFlagValidator(&FLAGS_red, &ValidatePayloadType); 133 google::RegisterFlagValidator(&FLAGS_red, &ValidatePayloadType);
125 DEFINE_int32(cn_nb, 13, "RTP payload type for comfort noise (8 kHz)"); 134 DEFINE_int32(cn_nb, 13, "RTP payload type for comfort noise (8 kHz)");
126 const bool cn_nb_dummy = 135 const bool cn_nb_dummy =
127 google::RegisterFlagValidator(&FLAGS_cn_nb, &ValidatePayloadType); 136 google::RegisterFlagValidator(&FLAGS_cn_nb, &ValidatePayloadType);
128 DEFINE_int32(cn_wb, 98, "RTP payload type for comfort noise (16 kHz)"); 137 DEFINE_int32(cn_wb, 98, "RTP payload type for comfort noise (16 kHz)");
129 const bool cn_wb_dummy = 138 const bool cn_wb_dummy =
130 google::RegisterFlagValidator(&FLAGS_cn_wb, &ValidatePayloadType); 139 google::RegisterFlagValidator(&FLAGS_cn_wb, &ValidatePayloadType);
131 DEFINE_int32(cn_swb32, 99, "RTP payload type for comfort noise (32 kHz)"); 140 DEFINE_int32(cn_swb32, 99, "RTP payload type for comfort noise (32 kHz)");
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 return "PCM16b-wb (16 kHz)"; 181 return "PCM16b-wb (16 kHz)";
173 case NetEqDecoder::kDecoderPCM16Bswb32kHz: 182 case NetEqDecoder::kDecoderPCM16Bswb32kHz:
174 return "PCM16b-swb32 (32 kHz)"; 183 return "PCM16b-swb32 (32 kHz)";
175 case NetEqDecoder::kDecoderPCM16Bswb48kHz: 184 case NetEqDecoder::kDecoderPCM16Bswb48kHz:
176 return "PCM16b-swb48 (48 kHz)"; 185 return "PCM16b-swb48 (48 kHz)";
177 case NetEqDecoder::kDecoderG722: 186 case NetEqDecoder::kDecoderG722:
178 return "G.722"; 187 return "G.722";
179 case NetEqDecoder::kDecoderRED: 188 case NetEqDecoder::kDecoderRED:
180 return "redundant audio (RED)"; 189 return "redundant audio (RED)";
181 case NetEqDecoder::kDecoderAVT: 190 case NetEqDecoder::kDecoderAVT:
182 return "AVT/DTMF"; 191 return "AVT/DTMF (8 kHz)";
192 case NetEqDecoder::kDecoderAVT16kHz:
193 return "AVT/DTMF (16 kHz)";
194 case NetEqDecoder::kDecoderAVT32kHz:
195 return "AVT/DTMF (32 kHz)";
196 case NetEqDecoder::kDecoderAVT48kHz:
197 return "AVT/DTMF (48 kHz)";
183 case NetEqDecoder::kDecoderCNGnb: 198 case NetEqDecoder::kDecoderCNGnb:
184 return "comfort noise (8 kHz)"; 199 return "comfort noise (8 kHz)";
185 case NetEqDecoder::kDecoderCNGwb: 200 case NetEqDecoder::kDecoderCNGwb:
186 return "comfort noise (16 kHz)"; 201 return "comfort noise (16 kHz)";
187 case NetEqDecoder::kDecoderCNGswb32kHz: 202 case NetEqDecoder::kDecoderCNGswb32kHz:
188 return "comfort noise (32 kHz)"; 203 return "comfort noise (32 kHz)";
189 case NetEqDecoder::kDecoderCNGswb48kHz: 204 case NetEqDecoder::kDecoderCNGswb48kHz:
190 return "comfort noise (48 kHz)"; 205 return "comfort noise (48 kHz)";
191 default: 206 default:
192 FATAL(); 207 FATAL();
(...skipping 13 matching lines...) Expand all
206 PrintCodecMappingEntry(NetEqDecoder::kDecoderISACswb, FLAGS_isac_swb); 221 PrintCodecMappingEntry(NetEqDecoder::kDecoderISACswb, FLAGS_isac_swb);
207 PrintCodecMappingEntry(NetEqDecoder::kDecoderOpus, FLAGS_opus); 222 PrintCodecMappingEntry(NetEqDecoder::kDecoderOpus, FLAGS_opus);
208 PrintCodecMappingEntry(NetEqDecoder::kDecoderPCM16B, FLAGS_pcm16b); 223 PrintCodecMappingEntry(NetEqDecoder::kDecoderPCM16B, FLAGS_pcm16b);
209 PrintCodecMappingEntry(NetEqDecoder::kDecoderPCM16Bwb, FLAGS_pcm16b_wb); 224 PrintCodecMappingEntry(NetEqDecoder::kDecoderPCM16Bwb, FLAGS_pcm16b_wb);
210 PrintCodecMappingEntry(NetEqDecoder::kDecoderPCM16Bswb32kHz, 225 PrintCodecMappingEntry(NetEqDecoder::kDecoderPCM16Bswb32kHz,
211 FLAGS_pcm16b_swb32); 226 FLAGS_pcm16b_swb32);
212 PrintCodecMappingEntry(NetEqDecoder::kDecoderPCM16Bswb48kHz, 227 PrintCodecMappingEntry(NetEqDecoder::kDecoderPCM16Bswb48kHz,
213 FLAGS_pcm16b_swb48); 228 FLAGS_pcm16b_swb48);
214 PrintCodecMappingEntry(NetEqDecoder::kDecoderG722, FLAGS_g722); 229 PrintCodecMappingEntry(NetEqDecoder::kDecoderG722, FLAGS_g722);
215 PrintCodecMappingEntry(NetEqDecoder::kDecoderAVT, FLAGS_avt); 230 PrintCodecMappingEntry(NetEqDecoder::kDecoderAVT, FLAGS_avt);
231 PrintCodecMappingEntry(NetEqDecoder::kDecoderAVT16kHz, FLAGS_avt_16);
232 PrintCodecMappingEntry(NetEqDecoder::kDecoderAVT32kHz, FLAGS_avt_32);
233 PrintCodecMappingEntry(NetEqDecoder::kDecoderAVT48kHz, FLAGS_avt_48);
216 PrintCodecMappingEntry(NetEqDecoder::kDecoderRED, FLAGS_red); 234 PrintCodecMappingEntry(NetEqDecoder::kDecoderRED, FLAGS_red);
217 PrintCodecMappingEntry(NetEqDecoder::kDecoderCNGnb, FLAGS_cn_nb); 235 PrintCodecMappingEntry(NetEqDecoder::kDecoderCNGnb, FLAGS_cn_nb);
218 PrintCodecMappingEntry(NetEqDecoder::kDecoderCNGwb, FLAGS_cn_wb); 236 PrintCodecMappingEntry(NetEqDecoder::kDecoderCNGwb, FLAGS_cn_wb);
219 PrintCodecMappingEntry(NetEqDecoder::kDecoderCNGswb32kHz, FLAGS_cn_swb32); 237 PrintCodecMappingEntry(NetEqDecoder::kDecoderCNGswb32kHz, FLAGS_cn_swb32);
220 PrintCodecMappingEntry(NetEqDecoder::kDecoderCNGswb48kHz, FLAGS_cn_swb48); 238 PrintCodecMappingEntry(NetEqDecoder::kDecoderCNGswb48kHz, FLAGS_cn_swb48);
221 } 239 }
222 240
223 int CodecSampleRate(uint8_t payload_type) { 241 int CodecSampleRate(uint8_t payload_type) {
224 if (payload_type == FLAGS_pcmu || payload_type == FLAGS_pcma || 242 if (payload_type == FLAGS_pcmu || payload_type == FLAGS_pcma ||
225 payload_type == FLAGS_ilbc || payload_type == FLAGS_pcm16b || 243 payload_type == FLAGS_ilbc || payload_type == FLAGS_pcm16b ||
226 payload_type == FLAGS_cn_nb) 244 payload_type == FLAGS_cn_nb || payload_type == FLAGS_avt)
227 return 8000; 245 return 8000;
228 if (payload_type == FLAGS_isac || payload_type == FLAGS_pcm16b_wb || 246 if (payload_type == FLAGS_isac || payload_type == FLAGS_pcm16b_wb ||
229 payload_type == FLAGS_g722 || payload_type == FLAGS_cn_wb) 247 payload_type == FLAGS_g722 || payload_type == FLAGS_cn_wb ||
248 payload_type == FLAGS_avt_16)
230 return 16000; 249 return 16000;
231 if (payload_type == FLAGS_isac_swb || payload_type == FLAGS_pcm16b_swb32 || 250 if (payload_type == FLAGS_isac_swb || payload_type == FLAGS_pcm16b_swb32 ||
232 payload_type == FLAGS_cn_swb32) 251 payload_type == FLAGS_cn_swb32 || payload_type == FLAGS_avt_32)
233 return 32000; 252 return 32000;
234 if (payload_type == FLAGS_opus || payload_type == FLAGS_pcm16b_swb48 || 253 if (payload_type == FLAGS_opus || payload_type == FLAGS_pcm16b_swb48 ||
235 payload_type == FLAGS_cn_swb48) 254 payload_type == FLAGS_cn_swb48 || payload_type == FLAGS_avt_48)
236 return 48000; 255 return 48000;
237 if (payload_type == FLAGS_avt || payload_type == FLAGS_red) 256 if (payload_type == FLAGS_red)
238 return 0; 257 return 0;
239 return -1; 258 return -1;
240 } 259 }
241 260
242 // Class to let through only the packets with a given SSRC. Should be used as an 261 // Class to let through only the packets with a given SSRC. Should be used as an
243 // outer layer on another NetEqInput object. 262 // outer layer on another NetEqInput object.
244 class FilterSsrcInput : public NetEqInput { 263 class FilterSsrcInput : public NetEqInput {
245 public: 264 public:
246 FilterSsrcInput(std::unique_ptr<NetEqInput> source, uint32_t ssrc) 265 FilterSsrcInput(std::unique_ptr<NetEqInput> source, uint32_t ssrc)
247 : source_(std::move(source)), ssrc_(ssrc) { 266 : source_(std::move(source)), ssrc_(ssrc) {
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
369 {FLAGS_opus, std::make_pair(NetEqDecoder::kDecoderOpus, "opus")}, 388 {FLAGS_opus, std::make_pair(NetEqDecoder::kDecoderOpus, "opus")},
370 {FLAGS_pcm16b, std::make_pair(NetEqDecoder::kDecoderPCM16B, "pcm16-nb")}, 389 {FLAGS_pcm16b, std::make_pair(NetEqDecoder::kDecoderPCM16B, "pcm16-nb")},
371 {FLAGS_pcm16b_wb, 390 {FLAGS_pcm16b_wb,
372 std::make_pair(NetEqDecoder::kDecoderPCM16Bwb, "pcm16-wb")}, 391 std::make_pair(NetEqDecoder::kDecoderPCM16Bwb, "pcm16-wb")},
373 {FLAGS_pcm16b_swb32, 392 {FLAGS_pcm16b_swb32,
374 std::make_pair(NetEqDecoder::kDecoderPCM16Bswb32kHz, "pcm16-swb32")}, 393 std::make_pair(NetEqDecoder::kDecoderPCM16Bswb32kHz, "pcm16-swb32")},
375 {FLAGS_pcm16b_swb48, 394 {FLAGS_pcm16b_swb48,
376 std::make_pair(NetEqDecoder::kDecoderPCM16Bswb48kHz, "pcm16-swb48")}, 395 std::make_pair(NetEqDecoder::kDecoderPCM16Bswb48kHz, "pcm16-swb48")},
377 {FLAGS_g722, std::make_pair(NetEqDecoder::kDecoderG722, "g722")}, 396 {FLAGS_g722, std::make_pair(NetEqDecoder::kDecoderG722, "g722")},
378 {FLAGS_avt, std::make_pair(NetEqDecoder::kDecoderAVT, "avt")}, 397 {FLAGS_avt, std::make_pair(NetEqDecoder::kDecoderAVT, "avt")},
398 {FLAGS_avt_16, std::make_pair(NetEqDecoder::kDecoderAVT16kHz, "avt-16")},
399 {FLAGS_avt_32,
400 std::make_pair(NetEqDecoder::kDecoderAVT32kHz, "avt-32")},
401 {FLAGS_avt_48,
402 std::make_pair(NetEqDecoder::kDecoderAVT48kHz, "avt-48")},
379 {FLAGS_red, std::make_pair(NetEqDecoder::kDecoderRED, "red")}, 403 {FLAGS_red, std::make_pair(NetEqDecoder::kDecoderRED, "red")},
380 {FLAGS_cn_nb, std::make_pair(NetEqDecoder::kDecoderCNGnb, "cng-nb")}, 404 {FLAGS_cn_nb, std::make_pair(NetEqDecoder::kDecoderCNGnb, "cng-nb")},
381 {FLAGS_cn_wb, std::make_pair(NetEqDecoder::kDecoderCNGwb, "cng-wb")}, 405 {FLAGS_cn_wb, std::make_pair(NetEqDecoder::kDecoderCNGwb, "cng-wb")},
382 {FLAGS_cn_swb32, 406 {FLAGS_cn_swb32,
383 std::make_pair(NetEqDecoder::kDecoderCNGswb32kHz, "cng-swb32")}, 407 std::make_pair(NetEqDecoder::kDecoderCNGswb32kHz, "cng-swb32")},
384 {FLAGS_cn_swb48, 408 {FLAGS_cn_swb48,
385 std::make_pair(NetEqDecoder::kDecoderCNGswb48kHz, "cng-swb48")}}; 409 std::make_pair(NetEqDecoder::kDecoderCNGswb48kHz, "cng-swb48")}};
386 410
387 // Check if a replacement audio file was provided. 411 // Check if a replacement audio file was provided.
388 std::unique_ptr<AudioDecoder> replacement_decoder; 412 std::unique_ptr<AudioDecoder> replacement_decoder;
(...skipping 11 matching lines...) Expand all
400 std::set<uint8_t> b; 424 std::set<uint8_t> b;
401 for (auto& x : a) { 425 for (auto& x : a) {
402 b.insert(static_cast<uint8_t>(x)); 426 b.insert(static_cast<uint8_t>(x));
403 } 427 }
404 return b; 428 return b;
405 }; 429 };
406 430
407 std::set<uint8_t> cn_types = std_set_int32_to_uint8( 431 std::set<uint8_t> cn_types = std_set_int32_to_uint8(
408 {FLAGS_cn_nb, FLAGS_cn_wb, FLAGS_cn_swb32, FLAGS_cn_swb48}); 432 {FLAGS_cn_nb, FLAGS_cn_wb, FLAGS_cn_swb32, FLAGS_cn_swb48});
409 std::set<uint8_t> forbidden_types = 433 std::set<uint8_t> forbidden_types =
410 std_set_int32_to_uint8({FLAGS_g722, FLAGS_red, FLAGS_avt}); 434 std_set_int32_to_uint8({FLAGS_g722, FLAGS_red, FLAGS_avt,
435 FLAGS_avt_16, FLAGS_avt_32, FLAGS_avt_48});
411 input.reset(new NetEqReplacementInput(std::move(input), replacement_pt, 436 input.reset(new NetEqReplacementInput(std::move(input), replacement_pt,
412 cn_types, forbidden_types)); 437 cn_types, forbidden_types));
413 438
414 replacement_decoder.reset(new FakeDecodeFromFile( 439 replacement_decoder.reset(new FakeDecodeFromFile(
415 std::unique_ptr<InputAudioFile>( 440 std::unique_ptr<InputAudioFile>(
416 new InputAudioFile(FLAGS_replacement_audio_file)), 441 new InputAudioFile(FLAGS_replacement_audio_file)),
417 48000, false)); 442 48000, false));
418 NetEqTest::ExternalDecoderInfo ext_dec_info = { 443 NetEqTest::ExternalDecoderInfo ext_dec_info = {
419 replacement_decoder.get(), NetEqDecoder::kDecoderArbitrary, 444 replacement_decoder.get(), NetEqDecoder::kDecoderArbitrary,
420 "replacement codec"}; 445 "replacement codec"};
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
452 return 0; 477 return 0;
453 } 478 }
454 479
455 } // namespace 480 } // namespace
456 } // namespace test 481 } // namespace test
457 } // namespace webrtc 482 } // namespace webrtc
458 483
459 int main(int argc, char* argv[]) { 484 int main(int argc, char* argv[]) {
460 webrtc::test::RunTest(argc, argv); 485 webrtc::test::RunTest(argc, argv);
461 } 486 }
OLDNEW
« no previous file with comments | « webrtc/modules/audio_coding/neteq/neteq_impl_unittest.cc ('k') | webrtc/test/fuzzers/neteq_rtp_fuzzer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698