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// IPC messages for the Cast transport API.
6// Multiply-included message file, hence no include guard.
7
8#include "ipc/ipc_message_macros.h"
9#include "media/cast/cast_sender.h"
10#include "media/cast/logging/logging_defines.h"
11#include "media/cast/net/cast_transport_sender.h"
12#include "media/cast/net/rtcp/rtcp_defines.h"
13#include "net/base/ip_endpoint.h"
14
15#undef IPC_MESSAGE_EXPORT
16#define IPC_MESSAGE_EXPORT
17#define IPC_MESSAGE_START CastMsgStart
18
19IPC_ENUM_TRAITS_MAX_VALUE(
20    media::cast::EncodedFrame::Dependency,
21    media::cast::EncodedFrame::DEPENDENCY_LAST)
22IPC_ENUM_TRAITS_MAX_VALUE(media::cast::Codec,
23                          media::cast::CODEC_LAST)
24IPC_ENUM_TRAITS_MAX_VALUE(media::cast::CastTransportStatus,
25                          media::cast::CAST_TRANSPORT_STATUS_LAST)
26IPC_ENUM_TRAITS_MAX_VALUE(media::cast::CastLoggingEvent,
27                          media::cast::kNumOfLoggingEvents)
28IPC_ENUM_TRAITS_MAX_VALUE(media::cast::EventMediaType,
29                          media::cast::EVENT_MEDIA_TYPE_LAST)
30
31IPC_STRUCT_TRAITS_BEGIN(media::cast::EncodedFrame)
32  IPC_STRUCT_TRAITS_MEMBER(dependency)
33  IPC_STRUCT_TRAITS_MEMBER(frame_id)
34  IPC_STRUCT_TRAITS_MEMBER(referenced_frame_id)
35  IPC_STRUCT_TRAITS_MEMBER(rtp_timestamp)
36  IPC_STRUCT_TRAITS_MEMBER(reference_time)
37  IPC_STRUCT_TRAITS_MEMBER(new_playout_delay_ms)
38  IPC_STRUCT_TRAITS_MEMBER(data)
39IPC_STRUCT_TRAITS_END()
40
41IPC_STRUCT_TRAITS_BEGIN(media::cast::RtcpDlrrReportBlock)
42  IPC_STRUCT_TRAITS_MEMBER(last_rr)
43  IPC_STRUCT_TRAITS_MEMBER(delay_since_last_rr)
44IPC_STRUCT_TRAITS_END()
45
46IPC_STRUCT_TRAITS_BEGIN(media::cast::CastTransportRtpConfig)
47  IPC_STRUCT_TRAITS_MEMBER(ssrc)
48  IPC_STRUCT_TRAITS_MEMBER(feedback_ssrc)
49  IPC_STRUCT_TRAITS_MEMBER(rtp_payload_type)
50  IPC_STRUCT_TRAITS_MEMBER(aes_key)
51  IPC_STRUCT_TRAITS_MEMBER(aes_iv_mask)
52IPC_STRUCT_TRAITS_END()
53
54IPC_STRUCT_TRAITS_BEGIN(media::cast::PacketEvent)
55  IPC_STRUCT_TRAITS_MEMBER(rtp_timestamp)
56  IPC_STRUCT_TRAITS_MEMBER(frame_id)
57  IPC_STRUCT_TRAITS_MEMBER(max_packet_id)
58  IPC_STRUCT_TRAITS_MEMBER(packet_id)
59  IPC_STRUCT_TRAITS_MEMBER(size)
60  IPC_STRUCT_TRAITS_MEMBER(timestamp)
61  IPC_STRUCT_TRAITS_MEMBER(type)
62  IPC_STRUCT_TRAITS_MEMBER(media_type)
63IPC_STRUCT_TRAITS_END()
64
65IPC_STRUCT_TRAITS_BEGIN(media::cast::FrameEvent)
66  IPC_STRUCT_TRAITS_MEMBER(rtp_timestamp)
67  IPC_STRUCT_TRAITS_MEMBER(frame_id)
68  IPC_STRUCT_TRAITS_MEMBER(size)
69  IPC_STRUCT_TRAITS_MEMBER(timestamp)
70  IPC_STRUCT_TRAITS_MEMBER(type)
71  IPC_STRUCT_TRAITS_MEMBER(media_type)
72  IPC_STRUCT_TRAITS_MEMBER(delay_delta)
73  IPC_STRUCT_TRAITS_MEMBER(key_frame)
74  IPC_STRUCT_TRAITS_MEMBER(target_bitrate)
75IPC_STRUCT_TRAITS_END()
76
77IPC_STRUCT_TRAITS_BEGIN(media::cast::RtcpCastMessage)
78  IPC_STRUCT_TRAITS_MEMBER(media_ssrc)
79  IPC_STRUCT_TRAITS_MEMBER(ack_frame_id)
80  IPC_STRUCT_TRAITS_MEMBER(target_delay_ms)
81  IPC_STRUCT_TRAITS_MEMBER(missing_frames_and_packets)
82IPC_STRUCT_TRAITS_END()
83
84// Cast messages sent from the browser to the renderer.
85
86IPC_MESSAGE_CONTROL3(CastMsg_Rtt,
87                     int32 /* channel_id */,
88                     uint32 /* ssrc */,
89                     base::TimeDelta /* rtt */)
90
91IPC_MESSAGE_CONTROL3(CastMsg_RtcpCastMessage,
92                     int32 /* channel_id */,
93                     uint32 /* ssrc */,
94                     media::cast::RtcpCastMessage /* cast_message */)
95
96IPC_MESSAGE_CONTROL2(
97    CastMsg_NotifyStatusChange,
98    int32 /* channel_id */,
99    media::cast::CastTransportStatus /* status */)
100
101IPC_MESSAGE_CONTROL3(CastMsg_RawEvents,
102                     int32 /* channel_id */,
103                     std::vector<media::cast::PacketEvent> /* packet_events */,
104                     std::vector<media::cast::FrameEvent> /* frame_events */)
105
106// Cast messages sent from the renderer to the browser.
107
108IPC_MESSAGE_CONTROL2(
109  CastHostMsg_InitializeAudio,
110  int32 /*channel_id*/,
111  media::cast::CastTransportRtpConfig /*config*/)
112
113IPC_MESSAGE_CONTROL2(
114  CastHostMsg_InitializeVideo,
115  int32 /*channel_id*/,
116  media::cast::CastTransportRtpConfig /*config*/)
117
118IPC_MESSAGE_CONTROL3(
119    CastHostMsg_InsertFrame,
120    int32 /* channel_id */,
121    uint32 /* ssrc */,
122    media::cast::EncodedFrame /* audio/video frame */)
123
124IPC_MESSAGE_CONTROL4(
125    CastHostMsg_SendSenderReport,
126    int32 /* channel_id */,
127    uint32 /* ssrc */,
128    base::TimeTicks /* current_time */,
129    uint32 /* current_time_as_rtp_timestamp */)
130
131IPC_MESSAGE_CONTROL3(
132    CastHostMsg_CancelSendingFrames,
133    int32 /* channel_id */,
134    uint32 /* ssrc */,
135    std::vector<uint32> /* frame_ids */)
136
137IPC_MESSAGE_CONTROL3(
138    CastHostMsg_ResendFrameForKickstart,
139    int32 /* channel_id */,
140    uint32 /* ssrc */,
141    uint32 /* frame_id */)
142
143IPC_MESSAGE_CONTROL3(
144    CastHostMsg_New,
145    int32 /* channel_id */,
146    net::IPEndPoint /* remote_end_point */,
147    base::DictionaryValue /* options */)
148
149IPC_MESSAGE_CONTROL1(
150    CastHostMsg_Delete,
151    int32 /* channel_id */)
152