diff --git a/src/ControlStream.c b/src/ControlStream.c index c0b70d5..a2fdf4f 100644 --- a/src/ControlStream.c +++ b/src/ControlStream.c @@ -207,8 +207,7 @@ int getNextFrameInvalidationTuple(PQUEUED_FRAME_INVALIDATION_TUPLE* qfit) { void queueFrameInvalidationTuple(int startFrame, int endFrame) { LC_ASSERT(startFrame <= endFrame); - if (((NegotiatedVideoFormat & VIDEO_FORMAT_MASK_H264) && (VideoCallbacks.capabilities & CAPABILITY_REFERENCE_FRAME_INVALIDATION_AVC)) || - (((NegotiatedVideoFormat & VIDEO_FORMAT_MASK_H265) && (VideoCallbacks.capabilities & CAPABILITY_REFERENCE_FRAME_INVALIDATION_HEVC)))) { + if (isReferenceFrameInvalidationEnabled()) { PQUEUED_FRAME_INVALIDATION_TUPLE qfit; qfit = malloc(sizeof(*qfit)); if (qfit != NULL) { @@ -500,8 +499,7 @@ static void requestInvalidateReferenceFrames(void) { long long payload[3]; PQUEUED_FRAME_INVALIDATION_TUPLE qfit; - LC_ASSERT(((NegotiatedVideoFormat & VIDEO_FORMAT_MASK_H264) && (VideoCallbacks.capabilities & CAPABILITY_REFERENCE_FRAME_INVALIDATION_AVC)) || - ((NegotiatedVideoFormat & VIDEO_FORMAT_MASK_H265) && (VideoCallbacks.capabilities & CAPABILITY_REFERENCE_FRAME_INVALIDATION_HEVC))); + LC_ASSERT(isReferenceFrameInvalidationEnabled()); if (!getNextFrameInvalidationTuple(&qfit)) { return; diff --git a/src/Limelight-internal.h b/src/Limelight-internal.h index 367e020..3e5e6de 100644 --- a/src/Limelight-internal.h +++ b/src/Limelight-internal.h @@ -24,6 +24,7 @@ extern volatile int ConnectionInterrupted; int isBeforeSignedInt(int numA, int numB, int ambiguousCase); int serviceEnetHost(ENetHost* client, ENetEvent* event, enet_uint32 timeoutMs); int extractVersionQuadFromString(const char* string, int* quad); +int isReferenceFrameInvalidationEnabled(void); void fixupMissingCallbacks(PDECODER_RENDERER_CALLBACKS* drCallbacks, PAUDIO_RENDERER_CALLBACKS* arCallbacks, PCONNECTION_LISTENER_CALLBACKS* clCallbacks); diff --git a/src/Misc.c b/src/Misc.c index 168c86e..f9b7652 100644 --- a/src/Misc.c +++ b/src/Misc.c @@ -80,6 +80,12 @@ int extractVersionQuadFromString(const char* string, int* quad) { return 0; } +int isReferenceFrameInvalidationEnabled(void) { + LC_ASSERT(NegotiatedVideoFormat != 0); + return ((NegotiatedVideoFormat & VIDEO_FORMAT_MASK_H264) && (VideoCallbacks.capabilities & CAPABILITY_REFERENCE_FRAME_INVALIDATION_AVC)) || + ((NegotiatedVideoFormat & VIDEO_FORMAT_MASK_H265) && (VideoCallbacks.capabilities & CAPABILITY_REFERENCE_FRAME_INVALIDATION_HEVC)); +} + void LiInitializeStreamConfiguration(PSTREAM_CONFIGURATION streamConfig) { memset(streamConfig, 0, sizeof(*streamConfig)); } diff --git a/src/VideoDepacketizer.c b/src/VideoDepacketizer.c index 601b335..9ba3ffa 100644 --- a/src/VideoDepacketizer.c +++ b/src/VideoDepacketizer.c @@ -41,11 +41,7 @@ void initializeVideoDepacketizer(int pktSize) { lastPacketInStream = -1; decodingFrame = 0; firstPacketReceiveTime = 0; - - LC_ASSERT(NegotiatedVideoFormat != 0); - strictIdrFrameWait = - !(((NegotiatedVideoFormat & VIDEO_FORMAT_MASK_H264) && (VideoCallbacks.capabilities & CAPABILITY_REFERENCE_FRAME_INVALIDATION_AVC)) || - (((NegotiatedVideoFormat & VIDEO_FORMAT_MASK_H265) && (VideoCallbacks.capabilities & CAPABILITY_REFERENCE_FRAME_INVALIDATION_HEVC)))); + strictIdrFrameWait = !isReferenceFrameInvalidationEnabled(); } // Free the NAL chain