Ensure RFI is not used when an IDR frame is needed
This commit is contained in:
parent
50c0a51b10
commit
56d6b7ff5a
1 changed files with 7 additions and 8 deletions
|
|
@ -896,14 +896,16 @@ static void processRtpPayload(PNV_VIDEO_PACKET videoPacket, int length,
|
||||||
// avoid having to wait until the next received frame to determine
|
// avoid having to wait until the next received frame to determine
|
||||||
// that we lost a frame and submit an RFI request.
|
// that we lost a frame and submit an RFI request.
|
||||||
void notifyFrameLost(unsigned int frameNumber, bool speculative) {
|
void notifyFrameLost(unsigned int frameNumber, bool speculative) {
|
||||||
// This may only be called at frame boundaries
|
|
||||||
LC_ASSERT(!decodingFrame);
|
|
||||||
|
|
||||||
// We may not invalidate frames that we've already received
|
// We may not invalidate frames that we've already received
|
||||||
LC_ASSERT(frameNumber >= startFrameNumber);
|
LC_ASSERT(frameNumber >= startFrameNumber);
|
||||||
|
|
||||||
// If RFI is enabled, we will notify the host PC now
|
// Drop state and determine if we need an IDR frame or if RFI is okay
|
||||||
if (isReferenceFrameInvalidationEnabled()) {
|
dropFrameState();
|
||||||
|
|
||||||
|
// If dropFrameState() determined that RFI was usable, issue it now
|
||||||
|
if (!waitingForIdrFrame) {
|
||||||
|
LC_ASSERT(waitingForRefInvalFrame);
|
||||||
|
|
||||||
if (speculative) {
|
if (speculative) {
|
||||||
Limelog("Sending speculative RFI request for predicted loss of frame %d\n", frameNumber);
|
Limelog("Sending speculative RFI request for predicted loss of frame %d\n", frameNumber);
|
||||||
}
|
}
|
||||||
|
|
@ -914,9 +916,6 @@ void notifyFrameLost(unsigned int frameNumber, bool speculative) {
|
||||||
// Advance the frame number since we won't be expecting this one anymore
|
// Advance the frame number since we won't be expecting this one anymore
|
||||||
nextFrameNumber = frameNumber + 1;
|
nextFrameNumber = frameNumber + 1;
|
||||||
|
|
||||||
// Drop any existing frame state (shouldn't have any) and set the RFI wait flag
|
|
||||||
dropFrameState();
|
|
||||||
|
|
||||||
// Notify the host that we lost this one
|
// Notify the host that we lost this one
|
||||||
connectionDetectedFrameLoss(startFrameNumber, frameNumber);
|
connectionDetectedFrameLoss(startFrameNumber, frameNumber);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue