Implement rebuffering mode for packet-buffer media node.

git-svn-id: svn://10.0.0.236/branches/ZAP_20050610_BRANCH@177937 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
alex%croczilla.com
2005-08-17 09:21:50 +00:00
parent 01ab4d8e62
commit 9b8689ee18
3 changed files with 14 additions and 2 deletions

View File

@@ -70,6 +70,8 @@ Sinks: 1
Node parameters:
- int "max_size" : maximum number of packets to buffer (10)
- int "prefill_size" : no of packets to prebuffer at start of stream (0)
- boolean "rebuffer" : refill buffer to prefill_size whenever the number
of packets in the buffer drops to 0 (true)
Input stream:
any

View File

@@ -105,6 +105,7 @@ zapPacketBuffer::AddedToGraph(zapIMediaGraph *graph,
// node parameter defaults:
mPrefillSize = 0;
mMaxSize = 10;
mRebuffer = PR_TRUE;
// unpack node parameters:
if (node_pars) {
node_pars->GetPropertyAsUint32(NS_LITERAL_STRING("prefill_size"), &mPrefillSize);
@@ -114,6 +115,8 @@ zapPacketBuffer::AddedToGraph(zapIMediaGraph *graph,
NS_WARNING("adjusted maximum buffer size");
mMaxSize = mPrefillSize;
}
node_pars->GetPropertyAsBool(NS_LITERAL_STRING("rebuffer"), &mRebuffer);
}
return NS_OK;
@@ -724,7 +727,13 @@ zapPacketBufferSink_IDLE::RequestFrame(zapPacketBuffer* pb)
}
else {
// nothing in buffer
ChangeState(pb, zapPacketBufferSink_WAITING::Instance());
#ifdef DEBUG
printf("E");
#endif
if (pb->mRebuffer)
ChangeState(pb, zapPacketBufferSink_WAITING_PREFILLING::Instance());
else
ChangeState(pb, zapPacketBufferSink_WAITING::Instance());
}
return NS_OK;
}

View File

@@ -93,7 +93,8 @@ private:
// node parameters (set in zapIMediaGraph::AddNode()):
PRUint32 mPrefillSize; // number of packets to prefill the buffer with
PRUint32 mMaxSize; // maximum number of packets buffered
PRBool mRebuffer; // rebuffer to prefill_size whenever the number of packets
// in the buffer drops to 0
nsDeque mBuffer; // the actual buffer