Home | History | Annotate | Download | only in media
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_RENDERER_MEDIA_CAST_TRANSPORT_SENDER_IPC_H_
      6 #define CHROME_RENDERER_MEDIA_CAST_TRANSPORT_SENDER_IPC_H_
      7 
      8 #include "base/message_loop/message_loop_proxy.h"
      9 #include "ipc/ipc_channel_proxy.h"
     10 #include "media/cast/logging/logging_defines.h"
     11 #include "media/cast/transport/cast_transport_sender.h"
     12 
     13 // This implementation of the CastTransportSender interface
     14 // communicates with the browser process over IPC and relays
     15 // all calls to/from the transport sender to the browser process.
     16 // The primary reason for this arrangement is to give the
     17 // renderer less direct control over the UDP sockets.
     18 class CastTransportSenderIPC
     19     : public media::cast::transport::CastTransportSender {
     20  public:
     21   CastTransportSenderIPC(
     22       const net::IPEndPoint& remote_end_point,
     23       const media::cast::transport::CastTransportStatusCallback& status_cb,
     24       const media::cast::transport::BulkRawEventsCallback& raw_events_cb);
     25 
     26   virtual ~CastTransportSenderIPC();
     27 
     28   // media::cast::transport::CastTransportSender implementation.
     29   virtual void SetPacketReceiver(
     30       const media::cast::transport::PacketReceiverCallback& packet_callback)
     31       OVERRIDE;
     32   virtual void InitializeAudio(
     33       const media::cast::transport::CastTransportAudioConfig& config) OVERRIDE;
     34   virtual void InitializeVideo(
     35       const media::cast::transport::CastTransportVideoConfig& config) OVERRIDE;
     36   virtual void InsertCodedAudioFrame(
     37       const media::cast::transport::EncodedFrame& audio_frame) OVERRIDE;
     38   virtual void InsertCodedVideoFrame(
     39       const media::cast::transport::EncodedFrame& video_frame) OVERRIDE;
     40   virtual void SendRtcpFromRtpSender(
     41       uint32 packet_type_flags,
     42       uint32 ntp_seconds,
     43       uint32 ntp_fraction,
     44       uint32 rtp_timestamp,
     45       const media::cast::transport::RtcpDlrrReportBlock& dlrr,
     46       uint32 sending_ssrc,
     47       const std::string& c_name) OVERRIDE;
     48   virtual void ResendPackets(
     49       bool is_audio,
     50       const media::cast::transport::MissingFramesAndPacketsMap& missing_packets,
     51       bool cancel_rtx_if_not_in_list,
     52       base::TimeDelta dedupe_window)
     53       OVERRIDE;
     54 
     55   void OnReceivedPacket(const media::cast::transport::Packet& packet);
     56   void OnNotifyStatusChange(
     57       media::cast::transport::CastTransportStatus status);
     58   void OnRawEvents(const std::vector<media::cast::PacketEvent>& packet_events);
     59 
     60  private:
     61   void Send(IPC::Message* message);
     62 
     63   int32 channel_id_;
     64   media::cast::transport::PacketReceiverCallback packet_callback_;
     65   media::cast::transport::CastTransportStatusCallback status_callback_;
     66   media::cast::transport::BulkRawEventsCallback raw_events_callback_;
     67 
     68   DISALLOW_COPY_AND_ASSIGN(CastTransportSenderIPC);
     69 };
     70 
     71 #endif  // CHROME_RENDERER_MEDIA_CAST_TRANSPORT_SENDER_IPC_H_
     72