blob: 31795648c640549f4db82f3258b27192a0f8cf40 [file] [log] [blame]
// Copyright 2013 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.
#ifndef MEDIA_CAST_RTCP_RTCP_DEFINES_H_
#define MEDIA_CAST_RTCP_RTCP_DEFINES_H_
#include <map>
#include <set>
#include "media/cast/cast_config.h"
#include "media/cast/cast_defines.h"
#include "media/cast/logging/logging_defines.h"
#include "media/cast/transport/cast_transport_defines.h"
namespace media {
namespace cast {
static const size_t kRtcpCastLogHeaderSize = 12;
static const size_t kRtcpReceiverFrameLogSize = 8;
static const size_t kRtcpReceiverEventLogSize = 4;
// Handle the per frame ACK and NACK messages.
class RtcpCastMessage {
public:
explicit RtcpCastMessage(uint32 media_ssrc);
~RtcpCastMessage();
void Copy(const RtcpCastMessage& cast_message);
uint32 media_ssrc_;
uint32 ack_frame_id_;
uint16 target_delay_ms_;
MissingFramesAndPacketsMap missing_frames_and_packets_;
DISALLOW_COPY_AND_ASSIGN(RtcpCastMessage);
};
// Log messages from receiver to sender.
struct RtcpReceiverEventLogMessage {
RtcpReceiverEventLogMessage();
~RtcpReceiverEventLogMessage();
CastLoggingEvent type;
base::TimeTicks event_timestamp;
base::TimeDelta delay_delta;
uint16 packet_id;
};
typedef std::list<RtcpReceiverEventLogMessage> RtcpReceiverEventLogMessages;
struct RtcpReceiverFrameLogMessage {
explicit RtcpReceiverFrameLogMessage(uint32 rtp_timestamp);
~RtcpReceiverFrameLogMessage();
uint32 rtp_timestamp_;
RtcpReceiverEventLogMessages event_log_messages_;
// TODO(mikhal): Investigate what's the best way to allow adding
// DISALLOW_COPY_AND_ASSIGN, as currently it contradicts the implementation
// and possible changes have a big impact on design.
};
typedef std::list<RtcpReceiverFrameLogMessage> RtcpReceiverLogMessage;
struct RtcpRpsiMessage {
RtcpRpsiMessage();
~RtcpRpsiMessage();
uint32 remote_ssrc;
uint8 payload_type;
uint64 picture_id;
};
struct RtcpNackMessage {
RtcpNackMessage();
~RtcpNackMessage();
uint32 remote_ssrc;
std::list<uint16> nack_list;
DISALLOW_COPY_AND_ASSIGN(RtcpNackMessage);
};
struct RtcpRembMessage {
RtcpRembMessage();
~RtcpRembMessage();
uint32 remb_bitrate;
std::list<uint32> remb_ssrcs;
DISALLOW_COPY_AND_ASSIGN(RtcpRembMessage);
};
struct RtcpReceiverReferenceTimeReport {
RtcpReceiverReferenceTimeReport();
~RtcpReceiverReferenceTimeReport();
uint32 remote_ssrc;
uint32 ntp_seconds;
uint32 ntp_fraction;
};
inline bool operator==(RtcpReceiverReferenceTimeReport lhs,
RtcpReceiverReferenceTimeReport rhs) {
return lhs.remote_ssrc == rhs.remote_ssrc &&
lhs.ntp_seconds == rhs.ntp_seconds &&
lhs.ntp_fraction == rhs.ntp_fraction;
}
// Struct used by raw event subscribers as an intermediate format before
// sending off to the other side via RTCP.
// (i.e., {Sender,Receiver}RtcpEventSubscriber)
struct RtcpEvent {
RtcpEvent();
~RtcpEvent();
CastLoggingEvent type;
// Time of event logged.
base::TimeTicks timestamp;
// Render/playout delay. Only set for FRAME_PLAYOUT events.
base::TimeDelta delay_delta;
// Only set for packet events.
uint16 packet_id;
};
} // namespace cast
} // namespace media
#endif // MEDIA_CAST_RTCP_RTCP_DEFINES_H_