Chromium Code Reviews| Index: media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer.cc |
| diff --git a/media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer.cc b/media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer.cc |
| index 3a72faf085aca9d11ce9274d60dea7395c7a14a9..fbb774f217d33daef74d647f23ed6c854fcaf37f 100644 |
| --- a/media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer.cc |
| +++ b/media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer.cc |
| @@ -45,36 +45,6 @@ RtpPacketizer::RtpPacketizer(PacedSender* const transport, |
| RtpPacketizer::~RtpPacketizer() {} |
| -void RtpPacketizer::IncomingEncodedVideoFrame( |
| - const EncodedVideoFrame* video_frame, |
| - const base::TimeTicks& capture_time) { |
| - DCHECK(!config_.audio) << "Invalid state"; |
| - if (config_.audio) |
| - return; |
| - |
| - Cast(video_frame->key_frame, |
| - video_frame->frame_id, |
| - video_frame->last_referenced_frame_id, |
| - video_frame->rtp_timestamp, |
| - video_frame->data, |
| - capture_time); |
| -} |
| - |
| -void RtpPacketizer::IncomingEncodedAudioFrame( |
| - const EncodedAudioFrame* audio_frame, |
| - const base::TimeTicks& recorded_time) { |
| - DCHECK(config_.audio) << "Invalid state"; |
| - if (!config_.audio) |
| - return; |
| - |
| - Cast(true, |
| - audio_frame->frame_id, |
| - 0, |
| - audio_frame->rtp_timestamp, |
| - audio_frame->data, |
| - recorded_time); |
| -} |
| - |
| uint16 RtpPacketizer::NextSequenceNumber() { |
| ++sequence_number_; |
| return sequence_number_ - 1; |
| @@ -90,27 +60,21 @@ bool RtpPacketizer::LastSentTimestamp(base::TimeTicks* time_sent, |
| return true; |
| } |
| -// TODO(mikhal): Switch to pass data with a const_ref. |
| -void RtpPacketizer::Cast(bool is_key, |
| - uint32 frame_id, |
| - uint32 reference_frame_id, |
| - uint32 timestamp, |
| - const std::string& data, |
| - const base::TimeTicks& capture_time) { |
| - time_last_sent_rtp_timestamp_ = capture_time; |
| +void RtpPacketizer::SendFrameAsPackets(const EncodedFrame& frame) { |
| + time_last_sent_rtp_timestamp_ = frame.reference_time; |
| uint16 rtp_header_length = kCommonRtpHeaderLength + kCastRtpHeaderLength; |
| uint16 max_length = config_.max_payload_length - rtp_header_length - 1; |
| - rtp_timestamp_ = timestamp; |
| + rtp_timestamp_ = frame.rtp_timestamp; |
| // Split the payload evenly (round number up). |
| - size_t num_packets = (data.size() + max_length) / max_length; |
| - size_t payload_length = (data.size() + num_packets) / num_packets; |
| + size_t num_packets = (frame.data.size() + max_length) / max_length; |
| + size_t payload_length = (frame.data.size() + num_packets) / num_packets; |
| DCHECK_LE(payload_length, max_length) << "Invalid argument"; |
| SendPacketVector packets; |
| - size_t remaining_size = data.size(); |
| - std::string::const_iterator data_iter = data.begin(); |
| + size_t remaining_size = frame.data.size(); |
| + std::string::const_iterator data_iter = frame.data.begin(); |
| while (remaining_size > 0) { |
| PacketRef packet(new base::RefCountedData<Packet>); |
| @@ -118,31 +82,34 @@ void RtpPacketizer::Cast(bool is_key, |
| payload_length = remaining_size; |
| } |
| remaining_size -= payload_length; |
| - BuildCommonRTPheader(&packet->data, remaining_size == 0, timestamp); |
| + BuildCommonRTPheader( |
| + &packet->data, remaining_size == 0, frame.rtp_timestamp); |
| // Build Cast header. |
| + const bool is_key = (frame.frame_id == frame.base_frame_id); |
|
Alpha Left Google
2014/05/15 22:11:23
As described before frame_id == base_frame_id does
miu
2014/05/16 04:27:25
Done.
|
| + // TODO(miu): Should we *really* always send the reference_frame_id? |
| packet->data.push_back((is_key ? kCastKeyFrameBitMask : 0) | |
| kCastReferenceFrameIdBitMask); |
| - packet->data.push_back(frame_id); |
| + packet->data.push_back(static_cast<uint8>(frame.frame_id)); |
| size_t start_size = packet->data.size(); |
| packet->data.resize(start_size + 4); |
| base::BigEndianWriter big_endian_writer( |
| reinterpret_cast<char*>(&(packet->data[start_size])), 4); |
| big_endian_writer.WriteU16(packet_id_); |
| big_endian_writer.WriteU16(static_cast<uint16>(num_packets - 1)); |
| - packet->data.push_back(static_cast<uint8>(reference_frame_id)); |
| + packet->data.push_back(static_cast<uint8>(frame.base_frame_id)); |
| // Copy payload data. |
| packet->data.insert(packet->data.end(), |
| data_iter, |
| data_iter + payload_length); |
| - PacketKey key = PacedPacketSender::MakePacketKey(capture_time, |
| + PacketKey key = PacedPacketSender::MakePacketKey(frame.reference_time, |
| config_.ssrc, |
| packet_id_); |
| // Store packet. |
| - packet_storage_->StorePacket(frame_id, packet_id_, key, packet); |
| + packet_storage_->StorePacket(frame.frame_id, packet_id_, key, packet); |
| ++packet_id_; |
| data_iter += payload_length; |