| Index: media/cast/framer/frame_buffer.cc
|
| diff --git a/media/cast/framer/frame_buffer.cc b/media/cast/framer/frame_buffer.cc
|
| index 2bfdeb5166907de08f323be1ee345dad937efcee..0b6fa8332cdc5f6ab9707d1af79bcbada1620b4c 100644
|
| --- a/media/cast/framer/frame_buffer.cc
|
| +++ b/media/cast/framer/frame_buffer.cc
|
| @@ -28,6 +28,8 @@ 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 (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;
|
| }
|
| @@ -57,44 +59,27 @@ bool FrameBuffer::Complete() const {
|
| return num_packets_received_ - 1 == max_packet_id_;
|
| }
|
|
|
| -bool FrameBuffer::GetEncodedAudioFrame(
|
| - transport::EncodedAudioFrame* audio_frame) const {
|
| +bool FrameBuffer::AssembleEncodedFrame(transport::EncodedFrame* frame) const {
|
| if (!Complete())
|
| return false;
|
|
|
| // Frame is complete -> construct.
|
| - audio_frame->frame_id = frame_id_;
|
| - audio_frame->rtp_timestamp = rtp_timestamp_;
|
| + 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.
|
| - audio_frame->data.clear();
|
| - audio_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) {
|
| - audio_frame->data.insert(
|
| - audio_frame->data.end(), it->second.begin(), it->second.end());
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -bool FrameBuffer::GetEncodedVideoFrame(
|
| - transport::EncodedVideoFrame* video_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_;
|
| - video_frame->rtp_timestamp = rtp_timestamp_;
|
| -
|
| - // Build the data vector.
|
| - video_frame->data.clear();
|
| - video_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;
|
| }
|
|
|
|
|