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

Side by Side Diff: talk/media/webrtc/webrtcvoiceengine.cc

Issue 1481963002: Add header extension filtering for WebRtcVoiceEngine/MediaChannel. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: two more test cases 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
« no previous file with comments | « talk/media/webrtc/webrtcvideoengine2.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * libjingle 2 * libjingle
3 * Copyright 2004 Google Inc. 3 * Copyright 2004 Google Inc.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met: 6 * modification, are permitted provided that the following conditions are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright notice, 8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer. 9 * this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright notice, 10 * 2. Redistributions in binary form must reproduce the above copyright notice,
(...skipping 24 matching lines...) Expand all
35 35
36 #include <algorithm> 36 #include <algorithm>
37 #include <cstdio> 37 #include <cstdio>
38 #include <string> 38 #include <string>
39 #include <vector> 39 #include <vector>
40 40
41 #include "talk/media/base/audioframe.h" 41 #include "talk/media/base/audioframe.h"
42 #include "talk/media/base/audiorenderer.h" 42 #include "talk/media/base/audiorenderer.h"
43 #include "talk/media/base/constants.h" 43 #include "talk/media/base/constants.h"
44 #include "talk/media/base/streamparams.h" 44 #include "talk/media/base/streamparams.h"
45 #include "talk/media/webrtc/webrtcmediaengine.h"
45 #include "talk/media/webrtc/webrtcvoe.h" 46 #include "talk/media/webrtc/webrtcvoe.h"
46 #include "webrtc/base/arraysize.h" 47 #include "webrtc/base/arraysize.h"
47 #include "webrtc/base/base64.h" 48 #include "webrtc/base/base64.h"
48 #include "webrtc/base/byteorder.h" 49 #include "webrtc/base/byteorder.h"
49 #include "webrtc/base/common.h" 50 #include "webrtc/base/common.h"
50 #include "webrtc/base/helpers.h" 51 #include "webrtc/base/helpers.h"
51 #include "webrtc/base/logging.h" 52 #include "webrtc/base/logging.h"
52 #include "webrtc/base/stringencode.h" 53 #include "webrtc/base/stringencode.h"
53 #include "webrtc/base/stringutils.h" 54 #include "webrtc/base/stringutils.h"
54 #include "webrtc/call/rtc_event_log.h" 55 #include "webrtc/call/rtc_event_log.h"
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 options.aec_dump = rtc::Optional<bool>(false); 290 options.aec_dump = rtc::Optional<bool>(false);
290 return options; 291 return options;
291 } 292 }
292 293
293 webrtc::AudioState::Config MakeAudioStateConfig(VoEWrapper* voe_wrapper) { 294 webrtc::AudioState::Config MakeAudioStateConfig(VoEWrapper* voe_wrapper) {
294 webrtc::AudioState::Config config; 295 webrtc::AudioState::Config config;
295 config.voice_engine = voe_wrapper->engine(); 296 config.voice_engine = voe_wrapper->engine();
296 return config; 297 return config;
297 } 298 }
298 299
299 std::vector<webrtc::RtpExtension> FindAudioRtpHeaderExtensions(
300 const std::vector<RtpHeaderExtension>& extensions) {
301 std::vector<webrtc::RtpExtension> result;
302 for (const auto& extension : extensions) {
303 if (extension.uri == kRtpAbsoluteSenderTimeHeaderExtension ||
304 extension.uri == kRtpAudioLevelHeaderExtension) {
305 result.push_back({extension.uri, extension.id});
306 } else {
307 LOG(LS_WARNING) << "Unsupported RTP extension: " << extension.ToString();
308 }
309 }
310 return result;
311 }
312
313 class WebRtcVoiceCodecs final { 300 class WebRtcVoiceCodecs final {
314 public: 301 public:
315 // TODO(solenberg): Do this filtering once off-line, add a simple AudioCodec 302 // TODO(solenberg): Do this filtering once off-line, add a simple AudioCodec
316 // list and add a test which verifies VoE supports the listed codecs. 303 // list and add a test which verifies VoE supports the listed codecs.
317 static std::vector<AudioCodec> SupportedCodecs() { 304 static std::vector<AudioCodec> SupportedCodecs() {
318 LOG(LS_INFO) << "WebRtc VoiceEngine codecs:"; 305 LOG(LS_INFO) << "WebRtc VoiceEngine codecs:";
319 std::vector<AudioCodec> result; 306 std::vector<AudioCodec> result;
320 for (webrtc::CodecInst voe_codec : webrtc::acm2::RentACodec::Database()) { 307 for (webrtc::CodecInst voe_codec : webrtc::acm2::RentACodec::Database()) {
321 // Change the sample rate of G722 to 8000 to match SDP. 308 // Change the sample rate of G722 to 8000 to match SDP.
322 MaybeFixupG722(&voe_codec, 8000); 309 MaybeFixupG722(&voe_codec, 8000);
(...skipping 1120 matching lines...) Expand 10 before | Expand all | Expand 10 after
1443 } 1430 }
1444 while (!recv_streams_.empty()) { 1431 while (!recv_streams_.empty()) {
1445 RemoveRecvStream(recv_streams_.begin()->first); 1432 RemoveRecvStream(recv_streams_.begin()->first);
1446 } 1433 }
1447 engine()->UnregisterChannel(this); 1434 engine()->UnregisterChannel(this);
1448 } 1435 }
1449 1436
1450 bool WebRtcVoiceMediaChannel::SetSendParameters( 1437 bool WebRtcVoiceMediaChannel::SetSendParameters(
1451 const AudioSendParameters& params) { 1438 const AudioSendParameters& params) {
1452 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); 1439 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
1440 LOG(LS_INFO) << "WebRtcVoiceMediaChannel::SetSendParameters: "
1441 << params.ToString();
1453 // TODO(pthatcher): Refactor this to be more clean now that we have 1442 // TODO(pthatcher): Refactor this to be more clean now that we have
1454 // all the information at once. 1443 // all the information at once.
1455 1444
1456 if (!SetSendCodecs(params.codecs)) { 1445 if (!SetSendCodecs(params.codecs)) {
1457 return false; 1446 return false;
1458 } 1447 }
1459 1448
1460 std::vector<webrtc::RtpExtension> send_rtp_extensions = 1449 if (!ValidateRtpExtensions(params.extensions)) {
1461 FindAudioRtpHeaderExtensions(params.extensions); 1450 return false;
1462 if (send_rtp_extensions_ != send_rtp_extensions) { 1451 }
1463 send_rtp_extensions_.swap(send_rtp_extensions); 1452 std::vector<webrtc::RtpExtension> filtered_extensions =
1453 FilterRtpExtensions(params.extensions,
1454 webrtc::RtpExtension::IsSupportedForAudio, true);
1455 if (send_rtp_extensions_ != filtered_extensions) {
1456 send_rtp_extensions_.swap(filtered_extensions);
1464 for (auto& it : send_streams_) { 1457 for (auto& it : send_streams_) {
1465 it.second->RecreateAudioSendStream(send_rtp_extensions_); 1458 it.second->RecreateAudioSendStream(send_rtp_extensions_);
1466 } 1459 }
1467 } 1460 }
1468 1461
1469 if (!SetMaxSendBandwidth(params.max_bandwidth_bps)) { 1462 if (!SetMaxSendBandwidth(params.max_bandwidth_bps)) {
1470 return false; 1463 return false;
1471 } 1464 }
1472 return SetOptions(params.options); 1465 return SetOptions(params.options);
1473 } 1466 }
1474 1467
1475 bool WebRtcVoiceMediaChannel::SetRecvParameters( 1468 bool WebRtcVoiceMediaChannel::SetRecvParameters(
1476 const AudioRecvParameters& params) { 1469 const AudioRecvParameters& params) {
1477 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); 1470 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
1471 LOG(LS_INFO) << "WebRtcVoiceMediaChannel::SetRecvParameters: "
1472 << params.ToString();
1478 // TODO(pthatcher): Refactor this to be more clean now that we have 1473 // TODO(pthatcher): Refactor this to be more clean now that we have
1479 // all the information at once. 1474 // all the information at once.
1480 1475
1481 if (!SetRecvCodecs(params.codecs)) { 1476 if (!SetRecvCodecs(params.codecs)) {
1482 return false; 1477 return false;
1483 } 1478 }
1484 1479
1485 std::vector<webrtc::RtpExtension> recv_rtp_extensions = 1480 if (!ValidateRtpExtensions(params.extensions)) {
1486 FindAudioRtpHeaderExtensions(params.extensions); 1481 return false;
1487 if (recv_rtp_extensions_ != recv_rtp_extensions) { 1482 }
1488 recv_rtp_extensions_.swap(recv_rtp_extensions); 1483 std::vector<webrtc::RtpExtension> filtered_extensions =
1484 FilterRtpExtensions(params.extensions,
1485 webrtc::RtpExtension::IsSupportedForAudio, false);
1486 if (recv_rtp_extensions_ != filtered_extensions) {
1487 recv_rtp_extensions_.swap(filtered_extensions);
1489 for (auto& it : recv_streams_) { 1488 for (auto& it : recv_streams_) {
1490 it.second->RecreateAudioReceiveStream(recv_rtp_extensions_); 1489 it.second->RecreateAudioReceiveStream(recv_rtp_extensions_);
1491 } 1490 }
1492 } 1491 }
1493 1492
1494 return true; 1493 return true;
1495 } 1494 }
1496 1495
1497 bool WebRtcVoiceMediaChannel::SetOptions(const AudioOptions& options) { 1496 bool WebRtcVoiceMediaChannel::SetOptions(const AudioOptions& options) {
1498 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); 1497 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
(...skipping 1153 matching lines...) Expand 10 before | Expand all | Expand 10 after
2652 } 2651 }
2653 } else { 2652 } else {
2654 LOG(LS_INFO) << "Stopping playout for channel #" << channel; 2653 LOG(LS_INFO) << "Stopping playout for channel #" << channel;
2655 engine()->voe()->base()->StopPlayout(channel); 2654 engine()->voe()->base()->StopPlayout(channel);
2656 } 2655 }
2657 return true; 2656 return true;
2658 } 2657 }
2659 } // namespace cricket 2658 } // namespace cricket
2660 2659
2661 #endif // HAVE_WEBRTC_VOICE 2660 #endif // HAVE_WEBRTC_VOICE
OLDNEW
« no previous file with comments | « talk/media/webrtc/webrtcvideoengine2.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698