Refactor reference frame invalidation checks into one function

This commit is contained in:
Cameron Gutman 2017-11-30 23:14:11 -08:00
parent 26fe1cb22c
commit 069f1475b6
4 changed files with 10 additions and 9 deletions

View File

@ -207,8 +207,7 @@ int getNextFrameInvalidationTuple(PQUEUED_FRAME_INVALIDATION_TUPLE* qfit) {
void queueFrameInvalidationTuple(int startFrame, int endFrame) { void queueFrameInvalidationTuple(int startFrame, int endFrame) {
LC_ASSERT(startFrame <= endFrame); LC_ASSERT(startFrame <= endFrame);
if (((NegotiatedVideoFormat & VIDEO_FORMAT_MASK_H264) && (VideoCallbacks.capabilities & CAPABILITY_REFERENCE_FRAME_INVALIDATION_AVC)) || if (isReferenceFrameInvalidationEnabled()) {
(((NegotiatedVideoFormat & VIDEO_FORMAT_MASK_H265) && (VideoCallbacks.capabilities & CAPABILITY_REFERENCE_FRAME_INVALIDATION_HEVC)))) {
PQUEUED_FRAME_INVALIDATION_TUPLE qfit; PQUEUED_FRAME_INVALIDATION_TUPLE qfit;
qfit = malloc(sizeof(*qfit)); qfit = malloc(sizeof(*qfit));
if (qfit != NULL) { if (qfit != NULL) {
@ -500,8 +499,7 @@ static void requestInvalidateReferenceFrames(void) {
long long payload[3]; long long payload[3];
PQUEUED_FRAME_INVALIDATION_TUPLE qfit; PQUEUED_FRAME_INVALIDATION_TUPLE qfit;
LC_ASSERT(((NegotiatedVideoFormat & VIDEO_FORMAT_MASK_H264) && (VideoCallbacks.capabilities & CAPABILITY_REFERENCE_FRAME_INVALIDATION_AVC)) || LC_ASSERT(isReferenceFrameInvalidationEnabled());
((NegotiatedVideoFormat & VIDEO_FORMAT_MASK_H265) && (VideoCallbacks.capabilities & CAPABILITY_REFERENCE_FRAME_INVALIDATION_HEVC)));
if (!getNextFrameInvalidationTuple(&qfit)) { if (!getNextFrameInvalidationTuple(&qfit)) {
return; return;

View File

@ -24,6 +24,7 @@ extern volatile int ConnectionInterrupted;
int isBeforeSignedInt(int numA, int numB, int ambiguousCase); int isBeforeSignedInt(int numA, int numB, int ambiguousCase);
int serviceEnetHost(ENetHost* client, ENetEvent* event, enet_uint32 timeoutMs); int serviceEnetHost(ENetHost* client, ENetEvent* event, enet_uint32 timeoutMs);
int extractVersionQuadFromString(const char* string, int* quad); int extractVersionQuadFromString(const char* string, int* quad);
int isReferenceFrameInvalidationEnabled(void);
void fixupMissingCallbacks(PDECODER_RENDERER_CALLBACKS* drCallbacks, PAUDIO_RENDERER_CALLBACKS* arCallbacks, void fixupMissingCallbacks(PDECODER_RENDERER_CALLBACKS* drCallbacks, PAUDIO_RENDERER_CALLBACKS* arCallbacks,
PCONNECTION_LISTENER_CALLBACKS* clCallbacks); PCONNECTION_LISTENER_CALLBACKS* clCallbacks);

View File

@ -80,6 +80,12 @@ int extractVersionQuadFromString(const char* string, int* quad) {
return 0; 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) { void LiInitializeStreamConfiguration(PSTREAM_CONFIGURATION streamConfig) {
memset(streamConfig, 0, sizeof(*streamConfig)); memset(streamConfig, 0, sizeof(*streamConfig));
} }

View File

@ -41,11 +41,7 @@ void initializeVideoDepacketizer(int pktSize) {
lastPacketInStream = -1; lastPacketInStream = -1;
decodingFrame = 0; decodingFrame = 0;
firstPacketReceiveTime = 0; firstPacketReceiveTime = 0;
strictIdrFrameWait = !isReferenceFrameInvalidationEnabled();
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))));
} }
// Free the NAL chain // Free the NAL chain