summaryrefslogtreecommitdiffstats
path: root/chromium/media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer.h')
-rw-r--r--chromium/media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer.h86
1 files changed, 86 insertions, 0 deletions
diff --git a/chromium/media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer.h b/chromium/media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer.h
new file mode 100644
index 00000000000..ebdbf010183
--- /dev/null
+++ b/chromium/media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer.h
@@ -0,0 +1,86 @@
+// 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_TRANSPORT_RTP_SENDER_RTP_PACKETIZER_RTP_PACKETIZER_H_
+#define MEDIA_CAST_TRANSPORT_RTP_SENDER_RTP_PACKETIZER_RTP_PACKETIZER_H_
+
+#include <cmath>
+#include <list>
+#include <map>
+
+#include "base/time/time.h"
+#include "media/cast/transport/rtp_sender/packet_storage/packet_storage.h"
+
+namespace base {
+class TickClock;
+}
+
+namespace media {
+namespace cast {
+
+namespace transport {
+
+class PacedSender;
+
+struct RtpPacketizerConfig {
+ RtpPacketizerConfig();
+ ~RtpPacketizerConfig();
+
+ // General.
+ bool audio;
+ int payload_type;
+ uint16 max_payload_length;
+ uint16 sequence_number;
+ int frequency;
+
+ // SSRC.
+ unsigned int ssrc;
+
+ // Video.
+ VideoCodec video_codec;
+
+ // Audio.
+ uint8 channels;
+ AudioCodec audio_codec;
+};
+
+// This object is only called from the main cast thread.
+// This class break encoded audio and video frames into packets and add an RTP
+// header to each packet.
+class RtpPacketizer {
+ public:
+ RtpPacketizer(PacedSender* const transport,
+ PacketStorage* packet_storage,
+ RtpPacketizerConfig rtp_packetizer_config);
+ ~RtpPacketizer();
+
+ void SendFrameAsPackets(const EncodedFrame& frame);
+
+ // Return the next sequence number, and increment by one. Enables unique
+ // incremental sequence numbers for every packet (including retransmissions).
+ uint16 NextSequenceNumber();
+
+ size_t send_packet_count() const { return send_packet_count_; }
+ size_t send_octet_count() const { return send_octet_count_; }
+
+ private:
+ void BuildCommonRTPheader(Packet* packet, bool marker_bit, uint32 time_stamp);
+
+ RtpPacketizerConfig config_;
+ PacedSender* const transport_; // Not owned by this class.
+ PacketStorage* packet_storage_;
+
+ uint16 sequence_number_;
+ uint32 rtp_timestamp_;
+ uint16 packet_id_;
+
+ size_t send_packet_count_;
+ size_t send_octet_count_;
+};
+
+} // namespace transport
+} // namespace cast
+} // namespace media
+
+#endif // MEDIA_CAST_TRANSPORT_RTP_SENDER_RTP_PACKETIZER_RTP_PACKETIZER_H_