15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef CHROME_RENDERER_MEDIA_CAST_TRANSPORT_SENDER_IPC_H_ 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define CHROME_RENDERER_MEDIA_CAST_TRANSPORT_SENDER_IPC_H_ 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/message_loop/message_loop_proxy.h" 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ipc/ipc_channel_proxy.h" 10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "media/cast/logging/logging_defines.h" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "media/cast/transport/cast_transport_sender.h" 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// This implementation of the CastTransportSender interface 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// communicates with the browser process over IPC and relays 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// all calls to/from the transport sender to the browser process. 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// The primary reason for this arrangement is to give the 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// renderer less direct control over the UDP sockets. 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class CastTransportSenderIPC 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : public media::cast::transport::CastTransportSender { 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CastTransportSenderIPC( 22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const net::IPEndPoint& remote_end_point, 23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const media::cast::transport::CastTransportStatusCallback& status_cb, 24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const media::cast::transport::BulkRawEventsCallback& raw_events_cb); 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~CastTransportSenderIPC(); 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // media::cast::transport::CastTransportSender implementation. 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void SetPacketReceiver( 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const media::cast::transport::PacketReceiverCallback& packet_callback) 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OVERRIDE; 32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void InitializeAudio( 33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const media::cast::transport::CastTransportAudioConfig& config) OVERRIDE; 34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void InitializeVideo( 35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const media::cast::transport::CastTransportVideoConfig& config) OVERRIDE; 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void InsertCodedAudioFrame( 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const media::cast::transport::EncodedFrame& audio_frame) OVERRIDE; 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void InsertCodedVideoFrame( 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const media::cast::transport::EncodedFrame& video_frame) OVERRIDE; 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void SendRtcpFromRtpSender( 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) uint32 packet_type_flags, 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) uint32 ntp_seconds, 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) uint32 ntp_fraction, 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) uint32 rtp_timestamp, 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const media::cast::transport::RtcpDlrrReportBlock& dlrr, 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) uint32 sending_ssrc, 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& c_name) OVERRIDE; 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void ResendPackets( 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool is_audio, 50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const media::cast::transport::MissingFramesAndPacketsMap& missing_packets, 516d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) bool cancel_rtx_if_not_in_list, 526d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) base::TimeDelta dedupe_window) 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OVERRIDE; 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnReceivedPacket(const media::cast::transport::Packet& packet); 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnNotifyStatusChange( 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) media::cast::transport::CastTransportStatus status); 58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void OnRawEvents(const std::vector<media::cast::PacketEvent>& packet_events); 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private: 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void Send(IPC::Message* message); 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int32 channel_id_; 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) media::cast::transport::PacketReceiverCallback packet_callback_; 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) media::cast::transport::CastTransportStatusCallback status_callback_; 66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) media::cast::transport::BulkRawEventsCallback raw_events_callback_; 67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(CastTransportSenderIPC); 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // CHROME_RENDERER_MEDIA_CAST_TRANSPORT_SENDER_IPC_H_ 72