Make sure the next frame to be decoded is cleaned up if it's empty.

BUG=
TEST=

Review URL: http://webrtc-codereview.appspot.com/332001

git-svn-id: http://webrtc.googlecode.com/svn/trunk@1261 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
stefan@webrtc.org
2011-12-21 09:13:14 +00:00
parent 6c9be123ef
commit 898f881e32
2 changed files with 4 additions and 6 deletions

View File

@@ -1752,15 +1752,15 @@ VCMJitterBuffer::RecycleFramesUntilKeyFrame()
// Must be called under the critical section _critSect. // Must be called under the critical section _critSect.
void VCMJitterBuffer::CleanUpOldFrames() { void VCMJitterBuffer::CleanUpOldFrames() {
if (_lastDecodedState.init())
return;
VCMFrameListItem* oldestFrameListItem = _frameBuffersTSOrder.First(); VCMFrameListItem* oldestFrameListItem = _frameBuffersTSOrder.First();
VCMFrameBuffer* oldestFrame = NULL; VCMFrameBuffer* oldestFrame = NULL;
while (oldestFrameListItem != NULL) { while (oldestFrameListItem != NULL) {
oldestFrame = oldestFrameListItem->GetItem(); oldestFrame = oldestFrameListItem->GetItem();
if (_lastDecodedState.IsOldFrame(oldestFrame)) { bool nextFrameEmpty = (_lastDecodedState.ContinuousFrame(oldestFrame) &&
oldestFrame->GetState() == kStateEmpty);
if (_lastDecodedState.IsOldFrame(oldestFrame) || (nextFrameEmpty &&
_frameBuffersTSOrder.Next(oldestFrameListItem) != NULL)) {
_frameBuffersTSOrder.Erase(oldestFrameListItem); _frameBuffersTSOrder.Erase(oldestFrameListItem);
ReleaseFrameInternal(oldestFrame); ReleaseFrameInternal(oldestFrame);
oldestFrameListItem = _frameBuffersTSOrder.First(); oldestFrameListItem = _frameBuffersTSOrder.First();

View File

@@ -1884,8 +1884,6 @@ int JitterBufferTest(CmdArgs& args)
// Insert the packet -> frame recycled // Insert the packet -> frame recycled
TEST(kSizeError == jb.InsertPacket(frameIn, packet)); TEST(kSizeError == jb.InsertPacket(frameIn, packet));
// should fail
TEST(-1 == jb.GetNextTimeStamp(10, incomingFrameType, renderTimeMs));
TEST(0 == jb.GetCompleteFrameForDecoding(10)); TEST(0 == jb.GetCompleteFrameForDecoding(10));
//printf("DONE fill frame - packets > max number of packets\n"); //printf("DONE fill frame - packets > max number of packets\n");