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

Side by Side Diff: talk/session/media/channel.h

Issue 1327933002: Full impl of NnChannel::SetSendParameters and NnChannel::SetRecvParameters (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Got rid of SetChannelOptions Created 5 years, 3 months 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 * 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 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 // This function returns true if we are using SRTP. 98 // This function returns true if we are using SRTP.
99 bool secure() const { return srtp_filter_.IsActive(); } 99 bool secure() const { return srtp_filter_.IsActive(); }
100 // The following function returns true if we are using 100 // The following function returns true if we are using
101 // DTLS-based keying. If you turned off SRTP later, however 101 // DTLS-based keying. If you turned off SRTP later, however
102 // you could have secure() == false and dtls_secure() == true. 102 // you could have secure() == false and dtls_secure() == true.
103 bool secure_dtls() const { return dtls_keyed_; } 103 bool secure_dtls() const { return dtls_keyed_; }
104 // This function returns true if we require secure channel for call setup. 104 // This function returns true if we require secure channel for call setup.
105 bool secure_required() const { return secure_required_; } 105 bool secure_required() const { return secure_required_; }
106 106
107 bool writable() const { return writable_; } 107 bool writable() const { return writable_; }
108 bool IsStreamMuted(uint32 ssrc);
109 108
110 // Activate RTCP mux, regardless of the state so far. Once 109 // Activate RTCP mux, regardless of the state so far. Once
111 // activated, it can not be deactivated, and if the remote 110 // activated, it can not be deactivated, and if the remote
112 // description doesn't support RTCP mux, setting the remote 111 // description doesn't support RTCP mux, setting the remote
113 // description will fail. 112 // description will fail.
114 void ActivateRtcpMux(); 113 void ActivateRtcpMux();
115 bool PushdownLocalDescription(const SessionDescription* local_desc, 114 bool PushdownLocalDescription(const SessionDescription* local_desc,
116 ContentAction action, 115 ContentAction action,
117 std::string* error_desc); 116 std::string* error_desc);
118 bool PushdownRemoteDescription(const SessionDescription* remote_desc, 117 bool PushdownRemoteDescription(const SessionDescription* remote_desc,
119 ContentAction action, 118 ContentAction action,
120 std::string* error_desc); 119 std::string* error_desc);
121 // Channel control 120 // Channel control
122 bool SetLocalContent(const MediaContentDescription* content, 121 bool SetLocalContent(const MediaContentDescription* content,
123 ContentAction action, 122 ContentAction action,
124 std::string* error_desc); 123 std::string* error_desc);
125 bool SetRemoteContent(const MediaContentDescription* content, 124 bool SetRemoteContent(const MediaContentDescription* content,
126 ContentAction action, 125 ContentAction action,
127 std::string* error_desc); 126 std::string* error_desc);
128 127
129 bool Enable(bool enable); 128 bool Enable(bool enable);
130 // Mute sending media on the stream with SSRC |ssrc|
131 // If there is only one sending stream SSRC 0 can be used.
132 bool MuteStream(uint32 ssrc, bool mute);
133 129
134 // Multiplexing 130 // Multiplexing
135 bool AddRecvStream(const StreamParams& sp); 131 bool AddRecvStream(const StreamParams& sp);
136 bool RemoveRecvStream(uint32 ssrc); 132 bool RemoveRecvStream(uint32 ssrc);
137 bool AddSendStream(const StreamParams& sp); 133 bool AddSendStream(const StreamParams& sp);
138 bool RemoveSendStream(uint32 ssrc); 134 bool RemoveSendStream(uint32 ssrc);
139 135
140 // Monitoring 136 // Monitoring
141 void StartConnectionMonitor(int cms); 137 void StartConnectionMonitor(int cms);
142 void StopConnectionMonitor(); 138 void StopConnectionMonitor();
(...skipping 13 matching lines...) Expand all
156 return remote_streams_; 152 return remote_streams_;
157 } 153 }
158 154
159 sigslot::signal2<BaseChannel*, bool> SignalDtlsSetupFailure; 155 sigslot::signal2<BaseChannel*, bool> SignalDtlsSetupFailure;
160 void SignalDtlsSetupFailure_w(bool rtcp); 156 void SignalDtlsSetupFailure_w(bool rtcp);
161 void SignalDtlsSetupFailure_s(bool rtcp); 157 void SignalDtlsSetupFailure_s(bool rtcp);
162 158
163 // Used for latency measurements. 159 // Used for latency measurements.
164 sigslot::signal1<BaseChannel*> SignalFirstPacketReceived; 160 sigslot::signal1<BaseChannel*> SignalFirstPacketReceived;
165 161
166 // Used to alert UI when the muted status changes, perhaps autonomously.
167 sigslot::repeater2<BaseChannel*, bool> SignalAutoMuted;
168
169 // Made public for easier testing. 162 // Made public for easier testing.
170 void SetReadyToSend(TransportChannel* channel, bool ready); 163 void SetReadyToSend(TransportChannel* channel, bool ready);
171 164
172 // Only public for unit tests. Otherwise, consider protected. 165 // Only public for unit tests. Otherwise, consider protected.
173 virtual int SetOption(SocketType type, rtc::Socket::Option o, int val); 166 virtual int SetOption(SocketType type, rtc::Socket::Option o, int val);
174 167
175 protected: 168 protected:
176 virtual MediaChannel* media_channel() const { return media_channel_; } 169 virtual MediaChannel* media_channel() const { return media_channel_; }
177 // Sets the transport_channel_ and rtcp_transport_channel_. If 170 // Sets the transport_channel_ and rtcp_transport_channel_. If
178 // |rtcp| is false, set rtcp_transport_channel_ is set to NULL. Get 171 // |rtcp| is false, set rtcp_transport_channel_ is set to NULL. Get
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 virtual bool WantsPacket(bool rtcp, rtc::Buffer* packet); 218 virtual bool WantsPacket(bool rtcp, rtc::Buffer* packet);
226 void HandlePacket(bool rtcp, rtc::Buffer* packet, 219 void HandlePacket(bool rtcp, rtc::Buffer* packet,
227 const rtc::PacketTime& packet_time); 220 const rtc::PacketTime& packet_time);
228 221
229 // Apply the new local/remote session description. 222 // Apply the new local/remote session description.
230 void OnNewLocalDescription(BaseSession* session, ContentAction action); 223 void OnNewLocalDescription(BaseSession* session, ContentAction action);
231 void OnNewRemoteDescription(BaseSession* session, ContentAction action); 224 void OnNewRemoteDescription(BaseSession* session, ContentAction action);
232 225
233 void EnableMedia_w(); 226 void EnableMedia_w();
234 void DisableMedia_w(); 227 void DisableMedia_w();
235 virtual bool MuteStream_w(uint32 ssrc, bool mute);
236 bool IsStreamMuted_w(uint32 ssrc);
237 void ChannelWritable_w(); 228 void ChannelWritable_w();
238 void ChannelNotWritable_w(); 229 void ChannelNotWritable_w();
239 bool AddRecvStream_w(const StreamParams& sp); 230 bool AddRecvStream_w(const StreamParams& sp);
240 bool RemoveRecvStream_w(uint32 ssrc); 231 bool RemoveRecvStream_w(uint32 ssrc);
241 bool AddSendStream_w(const StreamParams& sp); 232 bool AddSendStream_w(const StreamParams& sp);
242 bool RemoveSendStream_w(uint32 ssrc); 233 bool RemoveSendStream_w(uint32 ssrc);
243 virtual bool ShouldSetupDtlsSrtp() const; 234 virtual bool ShouldSetupDtlsSrtp() const;
244 // Do the DTLS key expansion and impose it on the SRTP/SRTCP filters. 235 // Do the DTLS key expansion and impose it on the SRTP/SRTCP filters.
245 // |rtcp_channel| indicates whether to set up the RTP or RTCP filter. 236 // |rtcp_channel| indicates whether to set up the RTP or RTCP filter.
246 bool SetupDtlsSrtp(bool rtcp_channel); 237 bool SetupDtlsSrtp(bool rtcp_channel);
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 RtcpMuxFilter rtcp_mux_filter_; 308 RtcpMuxFilter rtcp_mux_filter_;
318 BundleFilter bundle_filter_; 309 BundleFilter bundle_filter_;
319 rtc::scoped_ptr<ConnectionMonitor> connection_monitor_; 310 rtc::scoped_ptr<ConnectionMonitor> connection_monitor_;
320 bool enabled_; 311 bool enabled_;
321 bool writable_; 312 bool writable_;
322 bool rtp_ready_to_send_; 313 bool rtp_ready_to_send_;
323 bool rtcp_ready_to_send_; 314 bool rtcp_ready_to_send_;
324 bool was_ever_writable_; 315 bool was_ever_writable_;
325 MediaContentDirection local_content_direction_; 316 MediaContentDirection local_content_direction_;
326 MediaContentDirection remote_content_direction_; 317 MediaContentDirection remote_content_direction_;
327 std::set<uint32> muted_streams_;
328 bool has_received_packet_; 318 bool has_received_packet_;
329 bool dtls_keyed_; 319 bool dtls_keyed_;
330 bool secure_required_; 320 bool secure_required_;
331 int rtp_abs_sendtime_extn_id_; 321 int rtp_abs_sendtime_extn_id_;
332 }; 322 };
333 323
334 // VoiceChannel is a specialization that adds support for early media, DTMF, 324 // VoiceChannel is a specialization that adds support for early media, DTMF,
335 // and input/output level monitoring. 325 // and input/output level monitoring.
336 class VoiceChannel : public BaseChannel { 326 class VoiceChannel : public BaseChannel {
337 public: 327 public:
338 VoiceChannel(rtc::Thread* thread, MediaEngineInterface* media_engine, 328 VoiceChannel(rtc::Thread* thread, MediaEngineInterface* media_engine,
339 VoiceMediaChannel* channel, BaseSession* session, 329 VoiceMediaChannel* channel, BaseSession* session,
340 const std::string& content_name, bool rtcp); 330 const std::string& content_name, bool rtcp);
341 ~VoiceChannel(); 331 ~VoiceChannel();
342 bool Init(); 332 bool Init();
343 bool SetRemoteRenderer(uint32 ssrc, AudioRenderer* renderer); 333 bool SetRemoteRenderer(uint32 ssrc, AudioRenderer* renderer);
344 bool SetLocalRenderer(uint32 ssrc, AudioRenderer* renderer); 334 bool SetLocalRenderer(uint32 ssrc, AudioRenderer* renderer);
345 335
336 // Mute sending media on the stream with SSRC |ssrc|
337 // If there is only one sending stream SSRC 0 can be used.
338 bool MuteStream(uint32 ssrc, bool mute, const AudioOptions* options);
339 bool IsStreamMuted(uint32 ssrc);
340
346 // downcasts a MediaChannel 341 // downcasts a MediaChannel
347 virtual VoiceMediaChannel* media_channel() const { 342 virtual VoiceMediaChannel* media_channel() const {
348 return static_cast<VoiceMediaChannel*>(BaseChannel::media_channel()); 343 return static_cast<VoiceMediaChannel*>(BaseChannel::media_channel());
349 } 344 }
350 345
351 bool SetRingbackTone(const void* buf, int len); 346 bool SetRingbackTone(const void* buf, int len);
352 void SetEarlyMedia(bool enable); 347 void SetEarlyMedia(bool enable);
353 // This signal is emitted when we have gone a period of time without 348 // This signal is emitted when we have gone a period of time without
354 // receiving early media. When received, a UI should start playing its 349 // receiving early media. When received, a UI should start playing its
355 // own ringing sound 350 // own ringing sound
(...skipping 24 matching lines...) Expand all
380 375
381 void StartAudioMonitor(int cms); 376 void StartAudioMonitor(int cms);
382 void StopAudioMonitor(); 377 void StopAudioMonitor();
383 bool IsAudioMonitorRunning() const; 378 bool IsAudioMonitorRunning() const;
384 sigslot::signal2<VoiceChannel*, const AudioInfo&> SignalAudioMonitor; 379 sigslot::signal2<VoiceChannel*, const AudioInfo&> SignalAudioMonitor;
385 380
386 void StartTypingMonitor(const TypingMonitorOptions& settings); 381 void StartTypingMonitor(const TypingMonitorOptions& settings);
387 void StopTypingMonitor(); 382 void StopTypingMonitor();
388 bool IsTypingMonitorRunning() const; 383 bool IsTypingMonitorRunning() const;
389 384
390 // Overrides BaseChannel::MuteStream_w.
391 virtual bool MuteStream_w(uint32 ssrc, bool mute);
392
393 int GetInputLevel_w(); 385 int GetInputLevel_w();
394 int GetOutputLevel_w(); 386 int GetOutputLevel_w();
395 void GetActiveStreams_w(AudioInfo::StreamList* actives); 387 void GetActiveStreams_w(AudioInfo::StreamList* actives);
396 388
397 // Signal errors from VoiceMediaChannel. Arguments are: 389 // Signal errors from VoiceMediaChannel. Arguments are:
398 // ssrc(uint32), and error(VoiceMediaChannel::Error). 390 // ssrc(uint32), and error(VoiceMediaChannel::Error).
399 sigslot::signal3<VoiceChannel*, uint32, VoiceMediaChannel::Error> 391 sigslot::signal3<VoiceChannel*, uint32, VoiceMediaChannel::Error>
400 SignalMediaError; 392 SignalMediaError;
401 393
402 // Configuration and setting. 394 // Used to alert UI when the muted status changes, perhaps autonomously.
403 bool SetChannelOptions(const AudioOptions& options); 395 sigslot::repeater2<BaseChannel*, bool> SignalAutoMuted;
404 396
405 private: 397 private:
406 // overrides from BaseChannel 398 // overrides from BaseChannel
407 virtual void OnChannelRead(TransportChannel* channel, 399 virtual void OnChannelRead(TransportChannel* channel,
408 const char* data, size_t len, 400 const char* data, size_t len,
409 const rtc::PacketTime& packet_time, 401 const rtc::PacketTime& packet_time,
410 int flags); 402 int flags);
411 virtual void ChangeState(); 403 virtual void ChangeState();
412 virtual const ContentInfo* GetFirstContent(const SessionDescription* sdesc); 404 virtual const ContentInfo* GetFirstContent(const SessionDescription* sdesc);
413 virtual bool SetLocalContent_w(const MediaContentDescription* content, 405 virtual bool SetLocalContent_w(const MediaContentDescription* content,
414 ContentAction action, 406 ContentAction action,
415 std::string* error_desc); 407 std::string* error_desc);
416 virtual bool SetRemoteContent_w(const MediaContentDescription* content, 408 virtual bool SetRemoteContent_w(const MediaContentDescription* content,
417 ContentAction action, 409 ContentAction action,
418 std::string* error_desc); 410 std::string* error_desc);
411 bool MuteStream_w(uint32 ssrc, bool mute, const AudioOptions* options);
412 bool IsStreamMuted_w(uint32 ssrc);
419 bool SetRingbackTone_w(const void* buf, int len); 413 bool SetRingbackTone_w(const void* buf, int len);
420 bool PlayRingbackTone_w(uint32 ssrc, bool play, bool loop); 414 bool PlayRingbackTone_w(uint32 ssrc, bool play, bool loop);
421 void HandleEarlyMediaTimeout(); 415 void HandleEarlyMediaTimeout();
422 bool InsertDtmf_w(uint32 ssrc, int event, int duration, int flags); 416 bool InsertDtmf_w(uint32 ssrc, int event, int duration, int flags);
423 bool SetOutputScaling_w(uint32 ssrc, double left, double right); 417 bool SetOutputScaling_w(uint32 ssrc, double left, double right);
424 bool GetStats_w(VoiceMediaInfo* stats); 418 bool GetStats_w(VoiceMediaInfo* stats);
425 419
426 virtual void OnMessage(rtc::Message* pmsg); 420 virtual void OnMessage(rtc::Message* pmsg);
427 virtual void GetSrtpCiphers(std::vector<std::string>* ciphers) const; 421 virtual void GetSrtpCiphers(std::vector<std::string>* ciphers) const;
428 virtual void OnConnectionMonitorUpdate( 422 virtual void OnConnectionMonitorUpdate(
429 ConnectionMonitor* monitor, const std::vector<ConnectionInfo>& infos); 423 ConnectionMonitor* monitor, const std::vector<ConnectionInfo>& infos);
430 virtual void OnMediaMonitorUpdate( 424 virtual void OnMediaMonitorUpdate(
431 VoiceMediaChannel* media_channel, const VoiceMediaInfo& info); 425 VoiceMediaChannel* media_channel, const VoiceMediaInfo& info);
432 void OnAudioMonitorUpdate(AudioMonitor* monitor, const AudioInfo& info); 426 void OnAudioMonitorUpdate(AudioMonitor* monitor, const AudioInfo& info);
433 void OnVoiceChannelError(uint32 ssrc, VoiceMediaChannel::Error error); 427 void OnVoiceChannelError(uint32 ssrc, VoiceMediaChannel::Error error);
434 void SendLastMediaError(); 428 void SendLastMediaError();
435 void OnSrtpError(uint32 ssrc, SrtpFilter::Mode mode, SrtpFilter::Error error); 429 void OnSrtpError(uint32 ssrc, SrtpFilter::Mode mode, SrtpFilter::Error error);
436 430
437 static const int kEarlyMediaTimeout = 1000; 431 static const int kEarlyMediaTimeout = 1000;
438 MediaEngineInterface* media_engine_; 432 MediaEngineInterface* media_engine_;
439 bool received_media_; 433 bool received_media_;
440 rtc::scoped_ptr<VoiceMediaMonitor> media_monitor_; 434 rtc::scoped_ptr<VoiceMediaMonitor> media_monitor_;
441 rtc::scoped_ptr<AudioMonitor> audio_monitor_; 435 rtc::scoped_ptr<AudioMonitor> audio_monitor_;
442 rtc::scoped_ptr<TypingMonitor> typing_monitor_; 436 rtc::scoped_ptr<TypingMonitor> typing_monitor_;
437 std::set<uint32> muted_streams_;
443 438
444 // Last AudioSendParameters sent down to the media_channel() via 439 // Last AudioSendParameters sent down to the media_channel() via
445 // SetSendParameters. 440 // SetSendParameters.
446 AudioSendParameters last_send_params_; 441 AudioSendParameters last_send_params_;
447 // Last AudioRecvParameters sent down to the media_channel() via 442 // Last AudioRecvParameters sent down to the media_channel() via
448 // SetRecvParameters. 443 // SetRecvParameters.
449 AudioRecvParameters last_recv_params_; 444 AudioRecvParameters last_recv_params_;
450 }; 445 };
451 446
452 // VideoChannel is a specialization for video. 447 // VideoChannel is a specialization for video.
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
486 void StartMediaMonitor(int cms); 481 void StartMediaMonitor(int cms);
487 void StopMediaMonitor(); 482 void StopMediaMonitor();
488 sigslot::signal2<VideoChannel*, const VideoMediaInfo&> SignalMediaMonitor; 483 sigslot::signal2<VideoChannel*, const VideoMediaInfo&> SignalMediaMonitor;
489 sigslot::signal2<uint32, rtc::WindowEvent> SignalScreencastWindowEvent; 484 sigslot::signal2<uint32, rtc::WindowEvent> SignalScreencastWindowEvent;
490 485
491 bool SendIntraFrame(); 486 bool SendIntraFrame();
492 bool RequestIntraFrame(); 487 bool RequestIntraFrame();
493 sigslot::signal3<VideoChannel*, uint32, VideoMediaChannel::Error> 488 sigslot::signal3<VideoChannel*, uint32, VideoMediaChannel::Error>
494 SignalMediaError; 489 SignalMediaError;
495 490
496 // Configuration and setting. 491 // Mute sending media on the stream with SSRC |ssrc|
497 bool SetChannelOptions(const VideoOptions& options); 492 // If there is only one sending stream SSRC 0 can be used.
493 bool MuteStream(uint32 ssrc, bool mute, const VideoOptions* options);
498 494
499 private: 495 private:
500 typedef std::map<uint32, VideoCapturer*> ScreencastMap; 496 typedef std::map<uint32, VideoCapturer*> ScreencastMap;
501 struct ScreencastDetailsData; 497 struct ScreencastDetailsData;
502 498
503 // overrides from BaseChannel 499 // overrides from BaseChannel
504 virtual void ChangeState(); 500 virtual void ChangeState();
505 virtual const ContentInfo* GetFirstContent(const SessionDescription* sdesc); 501 virtual const ContentInfo* GetFirstContent(const SessionDescription* sdesc);
506 virtual bool SetLocalContent_w(const MediaContentDescription* content, 502 virtual bool SetLocalContent_w(const MediaContentDescription* content,
507 ContentAction action, 503 ContentAction action,
(...skipping 16 matching lines...) Expand all
524 ConnectionMonitor* monitor, const std::vector<ConnectionInfo>& infos); 520 ConnectionMonitor* monitor, const std::vector<ConnectionInfo>& infos);
525 virtual void OnMediaMonitorUpdate( 521 virtual void OnMediaMonitorUpdate(
526 VideoMediaChannel* media_channel, const VideoMediaInfo& info); 522 VideoMediaChannel* media_channel, const VideoMediaInfo& info);
527 virtual void OnScreencastWindowEvent(uint32 ssrc, 523 virtual void OnScreencastWindowEvent(uint32 ssrc,
528 rtc::WindowEvent event); 524 rtc::WindowEvent event);
529 virtual void OnStateChange(VideoCapturer* capturer, CaptureState ev); 525 virtual void OnStateChange(VideoCapturer* capturer, CaptureState ev);
530 bool GetLocalSsrc(const VideoCapturer* capturer, uint32* ssrc); 526 bool GetLocalSsrc(const VideoCapturer* capturer, uint32* ssrc);
531 527
532 void OnVideoChannelError(uint32 ssrc, VideoMediaChannel::Error error); 528 void OnVideoChannelError(uint32 ssrc, VideoMediaChannel::Error error);
533 void OnSrtpError(uint32 ssrc, SrtpFilter::Mode mode, SrtpFilter::Error error); 529 void OnSrtpError(uint32 ssrc, SrtpFilter::Mode mode, SrtpFilter::Error error);
530 bool MuteStream_w(uint32 ssrc, bool mute, const VideoOptions* options);
534 531
535 VideoRenderer* renderer_; 532 VideoRenderer* renderer_;
536 ScreencastMap screencast_capturers_; 533 ScreencastMap screencast_capturers_;
537 rtc::scoped_ptr<VideoMediaMonitor> media_monitor_; 534 rtc::scoped_ptr<VideoMediaMonitor> media_monitor_;
538 535
539 rtc::WindowEvent previous_we_; 536 rtc::WindowEvent previous_we_;
540 537
541 // Last VideoSendParameters sent down to the media_channel() via 538 // Last VideoSendParameters sent down to the media_channel() via
542 // SetSendParameters. 539 // SetSendParameters.
543 VideoSendParameters last_send_params_; 540 VideoSendParameters last_send_params_;
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
667 // SetSendParameters. 664 // SetSendParameters.
668 DataSendParameters last_send_params_; 665 DataSendParameters last_send_params_;
669 // Last DataRecvParameters sent down to the media_channel() via 666 // Last DataRecvParameters sent down to the media_channel() via
670 // SetRecvParameters. 667 // SetRecvParameters.
671 DataRecvParameters last_recv_params_; 668 DataRecvParameters last_recv_params_;
672 }; 669 };
673 670
674 } // namespace cricket 671 } // namespace cricket
675 672
676 #endif // TALK_SESSION_MEDIA_CHANNEL_H_ 673 #endif // TALK_SESSION_MEDIA_CHANNEL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698