diff options
Diffstat (limited to 'chromium/media/cast/rtp_sender/rtp_packetizer/rtp_packetizer.h')
-rw-r--r-- | chromium/media/cast/rtp_sender/rtp_packetizer/rtp_packetizer.h | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/chromium/media/cast/rtp_sender/rtp_packetizer/rtp_packetizer.h b/chromium/media/cast/rtp_sender/rtp_packetizer/rtp_packetizer.h new file mode 100644 index 00000000000..63035d098db --- /dev/null +++ b/chromium/media/cast/rtp_sender/rtp_packetizer/rtp_packetizer.h @@ -0,0 +1,73 @@ +// 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_RTP_SENDER_RTP_PACKETIZER_RTP_PACKETIZER_H_ +#define MEDIA_CAST_RTP_SENDER_RTP_PACKETIZER_RTP_PACKETIZER_H_ + +#include <cmath> +#include <list> +#include <map> + +#include "base/time/time.h" +#include "media/cast/rtp_common/rtp_defines.h" +#include "media/cast/rtp_sender/packet_storage/packet_storage.h" +#include "media/cast/rtp_sender/rtp_packetizer/rtp_packetizer_config.h" + +namespace media { +namespace cast { + +class PacedPacketSender; + +// 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(PacedPacketSender* transport, + PacketStorage* packet_storage, + RtpPacketizerConfig rtp_packetizer_config); + ~RtpPacketizer(); + + // The video_frame objects ownership is handled by the main cast thread. + void IncomingEncodedVideoFrame(const EncodedVideoFrame* video_frame, + const base::TimeTicks& capture_time); + + // The audio_frame objects ownership is handled by the main cast thread. + void IncomingEncodedAudioFrame(const EncodedAudioFrame* audio_frame, + const base::TimeTicks& recorded_time); + + bool LastSentTimestamp(base::TimeTicks* time_sent, + uint32* rtp_timestamp) const; + + // Return the next sequence number, and increment by one. Enables unique + // incremental sequence numbers for every packet (including retransmissions). + uint16 NextSequenceNumber(); + + int send_packets_count() { return send_packets_count_; } + int send_octet_count() { return send_octet_count_; } + + private: + void Cast(bool is_key, uint8 reference_frame_id, + uint32 timestamp, std::vector<uint8> data); + void BuildCommonRTPheader(std::vector<uint8>* packet, bool marker_bit, + uint32 time_stamp); + + RtpPacketizerConfig config_; + PacedPacketSender* transport_; + PacketStorage* packet_storage_; + + base::TimeTicks time_last_sent_rtp_timestamp_; + uint16 sequence_number_; + uint32 rtp_timestamp_; + uint8 frame_id_; + uint16 packet_id_; + + int send_packets_count_; + int send_octet_count_; +}; + +} // namespace cast +} // namespace media + +#endif // MEDIA_CAST_RTP_SENDER_RTP_PACKETIZER_RTP_PACKETIZER_H_ |