Index: media/cast/framer/framer.cc |
diff --git a/media/cast/framer/framer.cc b/media/cast/framer/framer.cc |
index d510d8b7ba90c7c83730ad92dd12bb93af667a21..5caee70567ab94dca1c1fd21fc84784e42354bed 100644 |
--- a/media/cast/framer/framer.cc |
+++ b/media/cast/framer/framer.cc |
@@ -58,14 +58,7 @@ bool Framer::InsertPacket(const uint8* payload_data, |
it->second->InsertPacket(payload_data, payload_size, rtp_header); |
} |
- bool complete = (packet_type == kNewPacketCompletingFrame); |
- if (complete) { |
- // ACK as soon as possible. |
- VLOG(2) << "Complete frame " << static_cast<int>(rtp_header.frame_id); |
- cast_msg_builder_->CompleteFrameReceived(rtp_header.frame_id, |
- rtp_header.is_key_frame); |
- } |
- return complete; |
+ return packet_type == kNewPacketCompletingFrame; |
} |
// This does not release the frame. |
@@ -83,6 +76,11 @@ bool Framer::GetEncodedAudioFrame(transport::EncodedAudioFrame* audio_frame, |
*next_frame = false; |
} |
+ if (*next_frame) { |
+ VLOG(2) << "ACK frame " << frame_id; |
+ cast_msg_builder_->CompleteFrameReceived(frame_id); |
+ } |
+ |
ConstFrameIterator it = frames_.find(frame_id); |
DCHECK(it != frames_.end()); |
if (it == frames_.end()) |
@@ -93,7 +91,10 @@ bool Framer::GetEncodedAudioFrame(transport::EncodedAudioFrame* audio_frame, |
// This does not release the frame. |
bool Framer::GetEncodedVideoFrame(transport::EncodedVideoFrame* video_frame, |
- bool* next_frame) { |
+ bool* next_frame, |
+ bool* have_multiple_decodable_frames) { |
+ *have_multiple_decodable_frames = frame_id_map_.HaveMultipleDecodableFrames(); |
+ |
uint32 frame_id; |
// Find frame id. |
if (frame_id_map_.NextContinuousFrame(&frame_id)) { |
@@ -110,6 +111,11 @@ bool Framer::GetEncodedVideoFrame(transport::EncodedVideoFrame* video_frame, |
*next_frame = false; |
} |
+ if (*next_frame) { |
+ VLOG(2) << "ACK frame " << frame_id; |
+ cast_msg_builder_->CompleteFrameReceived(frame_id); |
+ } |
+ |
ConstFrameIterator it = frames_.find(frame_id); |
DCHECK(it != frames_.end()); |
if (it == frames_.end()) |