summaryrefslogtreecommitdiffstats
path: root/chromium/media/cast/framer/frame_buffer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/media/cast/framer/frame_buffer.cc')
-rw-r--r--chromium/media/cast/framer/frame_buffer.cc70
1 files changed, 24 insertions, 46 deletions
diff --git a/chromium/media/cast/framer/frame_buffer.cc b/chromium/media/cast/framer/frame_buffer.cc
index ca9f1dedd28..0b6fa8332cd 100644
--- a/chromium/media/cast/framer/frame_buffer.cc
+++ b/chromium/media/cast/framer/frame_buffer.cc
@@ -28,21 +28,17 @@ void FrameBuffer::InsertPacket(const uint8* payload_data,
frame_id_ = rtp_header.frame_id;
max_packet_id_ = rtp_header.max_packet_id;
is_key_frame_ = rtp_header.is_key_frame;
- if (rtp_header.is_reference) {
- last_referenced_frame_id_ = rtp_header.reference_frame_id;
- } else {
- last_referenced_frame_id_ = rtp_header.frame_id - 1;
- }
-
- rtp_timestamp_ = rtp_header.webrtc.header.timestamp;
+ if (is_key_frame_)
+ DCHECK_EQ(rtp_header.frame_id, rtp_header.reference_frame_id);
+ last_referenced_frame_id_ = rtp_header.reference_frame_id;
+ rtp_timestamp_ = rtp_header.rtp_timestamp;
}
// Is this the correct frame?
- if (rtp_header.frame_id != frame_id_) return;
+ if (rtp_header.frame_id != frame_id_)
+ return;
// Insert every packet only once.
if (packets_.find(rtp_header.packet_id) != packets_.end()) {
- VLOG(3) << "Packet already received, ignored: frame "
- << frame_id_ << ", packet " << rtp_header.packet_id;
return;
}
@@ -52,8 +48,8 @@ void FrameBuffer::InsertPacket(const uint8* payload_data,
// Insert the packet.
retval.first->second.resize(payload_size);
- std::copy(payload_data, payload_data + payload_size,
- retval.first->second.begin());
+ std::copy(
+ payload_data, payload_data + payload_size, retval.first->second.begin());
++num_packets_received_;
total_data_size_ += payload_size;
@@ -63,45 +59,27 @@ bool FrameBuffer::Complete() const {
return num_packets_received_ - 1 == max_packet_id_;
}
-bool FrameBuffer::GetEncodedAudioFrame(EncodedAudioFrame* audio_frame,
- uint32* rtp_timestamp) const {
- if (!Complete()) return false;
-
- *rtp_timestamp = rtp_timestamp_;
-
- // Frame is complete -> construct.
- audio_frame->frame_id = frame_id_;
-
- // Build the data vector.
- audio_frame->data.clear();
- audio_frame->data.reserve(total_data_size_);
- PacketMap::const_iterator it;
- for (it = packets_.begin(); it != packets_.end(); ++it) {
- audio_frame->data.insert(audio_frame->data.end(),
- it->second.begin(), it->second.end());
- }
- return true;
-}
-
-bool FrameBuffer::GetEncodedVideoFrame(EncodedVideoFrame* video_frame,
- uint32* rtp_timestamp) const {
- if (!Complete()) return false;
-
- *rtp_timestamp = rtp_timestamp_;
+bool FrameBuffer::AssembleEncodedFrame(transport::EncodedFrame* frame) const {
+ if (!Complete())
+ return false;
// Frame is complete -> construct.
- video_frame->key_frame = is_key_frame_;
- video_frame->frame_id = frame_id_;
- video_frame->last_referenced_frame_id = last_referenced_frame_id_;
+ if (is_key_frame_)
+ frame->dependency = transport::EncodedFrame::KEY;
+ else if (frame_id_ == last_referenced_frame_id_)
+ frame->dependency = transport::EncodedFrame::INDEPENDENT;
+ else
+ frame->dependency = transport::EncodedFrame::DEPENDENT;
+ frame->frame_id = frame_id_;
+ frame->referenced_frame_id = last_referenced_frame_id_;
+ frame->rtp_timestamp = rtp_timestamp_;
// Build the data vector.
- video_frame->data.clear();
- video_frame->data.reserve(total_data_size_);
+ frame->data.clear();
+ frame->data.reserve(total_data_size_);
PacketMap::const_iterator it;
- for (it = packets_.begin(); it != packets_.end(); ++it) {
- video_frame->data.insert(video_frame->data.end(),
- it->second.begin(), it->second.end());
- }
+ for (it = packets_.begin(); it != packets_.end(); ++it)
+ frame->data.insert(frame->data.end(), it->second.begin(), it->second.end());
return true;
}