1 // Copyright 2013 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.
5 #ifndef MEDIA_CAST_RTCP_RTCP_DEFINES_H_
6 #define MEDIA_CAST_RTCP_RTCP_DEFINES_H_
11 #include "media/cast/cast_config.h"
12 #include "media/cast/cast_defines.h"
13 #include "media/cast/logging/logging_defines.h"
14 #include "media/cast/transport/cast_transport_defines.h"
19 static const size_t kRtcpCastLogHeaderSize = 12;
20 static const size_t kRtcpSenderFrameLogSize = 4;
21 static const size_t kRtcpReceiverFrameLogSize = 8;
22 static const size_t kRtcpReceiverEventLogSize = 4;
24 // Handle the per frame ACK and NACK messages.
25 class RtcpCastMessage {
27 explicit RtcpCastMessage(uint32 media_ssrc);
30 void Copy(const RtcpCastMessage& cast_message);
34 MissingFramesAndPacketsMap missing_frames_and_packets_;
36 DISALLOW_COPY_AND_ASSIGN(RtcpCastMessage);
39 // Log messages from receiver to sender.
40 struct RtcpReceiverEventLogMessage {
41 RtcpReceiverEventLogMessage();
42 ~RtcpReceiverEventLogMessage();
44 CastLoggingEvent type;
45 base::TimeTicks event_timestamp;
46 base::TimeDelta delay_delta;
50 typedef std::list<RtcpReceiverEventLogMessage> RtcpReceiverEventLogMessages;
52 struct RtcpReceiverFrameLogMessage {
53 explicit RtcpReceiverFrameLogMessage(uint32 rtp_timestamp);
54 ~RtcpReceiverFrameLogMessage();
56 uint32 rtp_timestamp_;
57 RtcpReceiverEventLogMessages event_log_messages_;
59 // TODO(mikhal): Investigate what's the best way to allow adding
60 // DISALLOW_COPY_AND_ASSIGN, as currently it contradicts the implementation
61 // and possible changes have a big impact on design.
64 typedef std::list<RtcpReceiverFrameLogMessage> RtcpReceiverLogMessage;
66 struct RtcpRpsiMessage {
75 struct RtcpNackMessage {
80 std::list<uint16> nack_list;
82 DISALLOW_COPY_AND_ASSIGN(RtcpNackMessage);
85 struct RtcpRembMessage {
90 std::list<uint32> remb_ssrcs;
92 DISALLOW_COPY_AND_ASSIGN(RtcpRembMessage);
95 struct RtcpReceiverReferenceTimeReport {
96 RtcpReceiverReferenceTimeReport();
97 ~RtcpReceiverReferenceTimeReport();
104 inline bool operator==(RtcpReceiverReferenceTimeReport lhs,
105 RtcpReceiverReferenceTimeReport rhs) {
106 return lhs.remote_ssrc == rhs.remote_ssrc &&
107 lhs.ntp_seconds == rhs.ntp_seconds &&
108 lhs.ntp_fraction == rhs.ntp_fraction;
111 // Struct used by raw event subscribers as an intermediate format before
112 // sending off to the other side via RTCP.
113 // (i.e., WindowedRtcpEventRtp{Sender,Receiver}Subscriber)
118 CastLoggingEvent type;
120 // Time of event logged.
121 base::TimeTicks timestamp;
123 // Render/playout delay. Only set for kAudioPlayoutDelay and
124 // kVideoRenderDelay events.
125 base::TimeDelta delay_delta;
127 // Only set for packet events. (kAudioPacketReceived, kVideoPacketReceived)
134 #endif // MEDIA_CAST_RTCP_RTCP_DEFINES_H_