| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // IPC messages for the Cast transport API. |
| |
| #include <stdint.h> |
| |
| #include "ipc/ipc_message_macros.h" |
| #include "media/cast/common/rtp_time.h" |
| #include "media/cast/logging/logging_defines.h" |
| #include "media/cast/net/cast_transport.h" |
| #include "media/cast/net/rtcp/rtcp_defines.h" |
| #include "net/base/ip_endpoint.h" |
| |
| #ifndef CHROME_COMMON_CAST_MESSAGES_H_ |
| #define CHROME_COMMON_CAST_MESSAGES_H_ |
| |
| namespace IPC { |
| |
| template<> |
| struct ParamTraits<media::cast::RtpTimeTicks> { |
| using param_type = media::cast::RtpTimeTicks; |
| static void GetSize(base::PickleSizer* s, const param_type& p); |
| static void Write(base::Pickle* m, const param_type& p); |
| static bool Read(const base::Pickle* m, |
| base::PickleIterator* iter, |
| param_type* r); |
| static void Log(const param_type& p, std::string* l); |
| }; |
| |
| template<> |
| struct ParamTraits<media::cast::FrameId> { |
| using param_type = media::cast::FrameId; |
| static void GetSize(base::PickleSizer* s, const param_type& p); |
| static void Write(base::Pickle* m, const param_type& p); |
| static bool Read(const base::Pickle* m, |
| base::PickleIterator* iter, |
| param_type* r); |
| static void Log(const param_type& p, std::string* l); |
| }; |
| |
| } // namespace IPC |
| |
| #endif // CHROME_COMMON_CAST_MESSAGES_H_ |
| |
| // Multiply-included message file, hence no include guard from here. |
| |
| #undef IPC_MESSAGE_EXPORT |
| #define IPC_MESSAGE_EXPORT |
| #define IPC_MESSAGE_START CastMsgStart |
| |
| IPC_ENUM_TRAITS_MAX_VALUE( |
| media::cast::EncodedFrame::Dependency, |
| media::cast::EncodedFrame::DEPENDENCY_LAST) |
| IPC_ENUM_TRAITS_MAX_VALUE(media::cast::Codec, |
| media::cast::CODEC_LAST) |
| IPC_ENUM_TRAITS_MAX_VALUE(media::cast::CastTransportStatus, |
| media::cast::CAST_TRANSPORT_STATUS_LAST) |
| IPC_ENUM_TRAITS_MAX_VALUE(media::cast::CastLoggingEvent, |
| media::cast::kNumOfLoggingEvents) |
| IPC_ENUM_TRAITS_MAX_VALUE(media::cast::EventMediaType, |
| media::cast::EVENT_MEDIA_TYPE_LAST) |
| IPC_ENUM_TRAITS_MIN_MAX_VALUE(media::cast::RtpPayloadType, |
| media::cast::RtpPayloadType::FIRST, |
| media::cast::RtpPayloadType::LAST) |
| |
| IPC_STRUCT_TRAITS_BEGIN(media::cast::EncodedFrame) |
| IPC_STRUCT_TRAITS_MEMBER(dependency) |
| IPC_STRUCT_TRAITS_MEMBER(frame_id) |
| IPC_STRUCT_TRAITS_MEMBER(referenced_frame_id) |
| IPC_STRUCT_TRAITS_MEMBER(rtp_timestamp) |
| IPC_STRUCT_TRAITS_MEMBER(reference_time) |
| IPC_STRUCT_TRAITS_MEMBER(new_playout_delay_ms) |
| IPC_STRUCT_TRAITS_MEMBER(data) |
| IPC_STRUCT_TRAITS_END() |
| |
| IPC_STRUCT_TRAITS_BEGIN(media::cast::RtcpDlrrReportBlock) |
| IPC_STRUCT_TRAITS_MEMBER(last_rr) |
| IPC_STRUCT_TRAITS_MEMBER(delay_since_last_rr) |
| IPC_STRUCT_TRAITS_END() |
| |
| IPC_STRUCT_TRAITS_BEGIN(media::cast::CastTransportRtpConfig) |
| IPC_STRUCT_TRAITS_MEMBER(ssrc) |
| IPC_STRUCT_TRAITS_MEMBER(rtp_stream_id) |
| IPC_STRUCT_TRAITS_MEMBER(feedback_ssrc) |
| IPC_STRUCT_TRAITS_MEMBER(rtp_payload_type) |
| IPC_STRUCT_TRAITS_MEMBER(aes_key) |
| IPC_STRUCT_TRAITS_MEMBER(aes_iv_mask) |
| IPC_STRUCT_TRAITS_END() |
| |
| IPC_STRUCT_TRAITS_BEGIN(media::cast::PacketEvent) |
| IPC_STRUCT_TRAITS_MEMBER(rtp_timestamp) |
| IPC_STRUCT_TRAITS_MEMBER(frame_id) |
| IPC_STRUCT_TRAITS_MEMBER(max_packet_id) |
| IPC_STRUCT_TRAITS_MEMBER(packet_id) |
| IPC_STRUCT_TRAITS_MEMBER(size) |
| IPC_STRUCT_TRAITS_MEMBER(timestamp) |
| IPC_STRUCT_TRAITS_MEMBER(type) |
| IPC_STRUCT_TRAITS_MEMBER(media_type) |
| IPC_STRUCT_TRAITS_END() |
| |
| IPC_STRUCT_TRAITS_BEGIN(media::cast::FrameEvent) |
| IPC_STRUCT_TRAITS_MEMBER(rtp_timestamp) |
| IPC_STRUCT_TRAITS_MEMBER(frame_id) |
| IPC_STRUCT_TRAITS_MEMBER(size) |
| IPC_STRUCT_TRAITS_MEMBER(timestamp) |
| IPC_STRUCT_TRAITS_MEMBER(type) |
| IPC_STRUCT_TRAITS_MEMBER(media_type) |
| IPC_STRUCT_TRAITS_MEMBER(delay_delta) |
| IPC_STRUCT_TRAITS_MEMBER(key_frame) |
| IPC_STRUCT_TRAITS_MEMBER(target_bitrate) |
| IPC_STRUCT_TRAITS_END() |
| |
| IPC_STRUCT_TRAITS_BEGIN(media::cast::RtcpCastMessage) |
| IPC_STRUCT_TRAITS_MEMBER(remote_ssrc) |
| IPC_STRUCT_TRAITS_MEMBER(ack_frame_id) |
| IPC_STRUCT_TRAITS_MEMBER(target_delay_ms) |
| IPC_STRUCT_TRAITS_MEMBER(missing_frames_and_packets) |
| IPC_STRUCT_TRAITS_END() |
| |
| IPC_STRUCT_TRAITS_BEGIN(media::cast::RtcpPliMessage) |
| IPC_STRUCT_TRAITS_MEMBER(remote_ssrc) |
| IPC_STRUCT_TRAITS_END() |
| |
| IPC_STRUCT_TRAITS_BEGIN(media::cast::RtcpEvent) |
| IPC_STRUCT_TRAITS_MEMBER(type) |
| IPC_STRUCT_TRAITS_MEMBER(timestamp) |
| IPC_STRUCT_TRAITS_MEMBER(delay_delta) |
| IPC_STRUCT_TRAITS_MEMBER(packet_id) |
| IPC_STRUCT_TRAITS_END() |
| |
| IPC_STRUCT_TRAITS_BEGIN(media::cast::RtcpReportBlock) |
| IPC_STRUCT_TRAITS_MEMBER(remote_ssrc) |
| IPC_STRUCT_TRAITS_MEMBER(media_ssrc) |
| IPC_STRUCT_TRAITS_MEMBER(fraction_lost) |
| IPC_STRUCT_TRAITS_MEMBER(cumulative_lost) |
| IPC_STRUCT_TRAITS_MEMBER(extended_high_sequence_number) |
| IPC_STRUCT_TRAITS_MEMBER(jitter) |
| IPC_STRUCT_TRAITS_MEMBER(last_sr) |
| IPC_STRUCT_TRAITS_MEMBER(delay_since_last_sr) |
| IPC_STRUCT_TRAITS_END() |
| |
| IPC_STRUCT_TRAITS_BEGIN(media::cast::RtcpTimeData) |
| IPC_STRUCT_TRAITS_MEMBER(ntp_seconds) |
| IPC_STRUCT_TRAITS_MEMBER(ntp_fraction) |
| IPC_STRUCT_TRAITS_MEMBER(timestamp) |
| IPC_STRUCT_TRAITS_END() |
| |
| // Cast messages sent from the browser to the renderer. |
| |
| IPC_MESSAGE_CONTROL2(CastMsg_ReceivedPacket, |
| int32_t /* channel_id */, |
| media::cast::Packet /* packet */) |
| |
| IPC_MESSAGE_CONTROL3(CastMsg_Rtt, |
| int32_t /* channel_id */, |
| uint32_t /* rtp sender ssrc */, |
| base::TimeDelta /* rtt */) |
| |
| IPC_MESSAGE_CONTROL3(CastMsg_RtcpCastMessage, |
| int32_t /* channel_id */, |
| uint32_t /* rtp sender ssrc */, |
| media::cast::RtcpCastMessage /* cast_message */) |
| |
| // This message indicates receiving picture loss indicator from rtp receiver. |
| IPC_MESSAGE_CONTROL2(CastMsg_Pli, |
| int32_t /* channel_id */, |
| uint32_t /* rtp sender ssrc */) |
| |
| IPC_MESSAGE_CONTROL2(CastMsg_NotifyStatusChange, |
| int32_t /* channel_id */, |
| media::cast::CastTransportStatus /* status */) |
| |
| IPC_MESSAGE_CONTROL3(CastMsg_RawEvents, |
| int32_t /* channel_id */, |
| std::vector<media::cast::PacketEvent> /* packet_events */, |
| std::vector<media::cast::FrameEvent> /* frame_events */) |
| |
| // Cast messages sent from the renderer to the browser. |
| |
| IPC_MESSAGE_CONTROL2(CastHostMsg_InitializeStream, |
| int32_t /*channel_id*/, |
| media::cast::CastTransportRtpConfig /*config*/) |
| |
| IPC_MESSAGE_CONTROL3(CastHostMsg_InsertFrame, |
| int32_t /* channel_id */, |
| uint32_t /* ssrc */, |
| media::cast::EncodedFrame /* audio/video frame */) |
| |
| IPC_MESSAGE_CONTROL4(CastHostMsg_SendSenderReport, |
| int32_t /* channel_id */, |
| uint32_t /* ssrc */, |
| base::TimeTicks /* current_time */, |
| media::cast::RtpTimeTicks /* cur_time_as_rtp_timestamp */) |
| |
| IPC_MESSAGE_CONTROL3(CastHostMsg_CancelSendingFrames, |
| int32_t /* channel_id */, |
| uint32_t /* ssrc */, |
| std::vector<media::cast::FrameId> /* frame_ids */) |
| |
| IPC_MESSAGE_CONTROL3(CastHostMsg_ResendFrameForKickstart, |
| int32_t /* channel_id */, |
| uint32_t /* ssrc */, |
| media::cast::FrameId /* frame_id */) |
| |
| IPC_MESSAGE_CONTROL3(CastHostMsg_AddValidRtpReceiver, |
| int32_t /* channel id */, |
| uint32_t /* rtp sender ssrc */, |
| uint32_t /* rtp receiver ssrc */) |
| |
| IPC_MESSAGE_CONTROL4(CastHostMsg_New, |
| int32_t /* channel_id */, |
| net::IPEndPoint /* local_end_point */, |
| net::IPEndPoint /* remote_end_point */, |
| base::DictionaryValue /* options */) |
| |
| IPC_MESSAGE_CONTROL1(CastHostMsg_Delete, int32_t /* channel_id */) |
| |
| // The following messages are used to build and send the RTCP packet from the |
| // RTP receiver. |CastHostMsg_InitializeRtpReceiverRtcpBuilder| needs to be sent |
| // before sending other optional RTCP messages. |
| // |CastHostMsg_SendRtcpFromRtpReceiver| has to be sent in the end to finish |
| // building the packet. The built packet will then be sent out. |
| |
| IPC_MESSAGE_CONTROL3(CastHostMsg_InitializeRtpReceiverRtcpBuilder, |
| int32_t /* channel id */, |
| uint32_t /* rtp_receiver_ssrc */, |
| media::cast::RtcpTimeData /* time_data */) |
| |
| IPC_MESSAGE_CONTROL3(CastHostMsg_AddCastFeedback, |
| int32_t /* channel id */, |
| media::cast::RtcpCastMessage /* cast message */, |
| base::TimeDelta /* target delay */) |
| |
| IPC_MESSAGE_CONTROL2(CastHostMsg_AddPli, |
| int32_t /* channel id */, |
| media::cast::RtcpPliMessage /* pli message */) |
| |
| IPC_MESSAGE_CONTROL2( |
| CastHostMsg_AddRtcpEvents, |
| int32_t /* channel id */, |
| media::cast::ReceiverRtcpEventSubscriber::RtcpEvents /* rtcp_events */) |
| |
| IPC_MESSAGE_CONTROL2( |
| CastHostMsg_AddRtpReceiverReport, |
| int32_t /* channel id */, |
| media::cast::RtcpReportBlock /* rtp_receiver_report_block */) |
| |
| IPC_MESSAGE_CONTROL1(CastHostMsg_SendRtcpFromRtpReceiver, |
| int32_t /* channel id */) |