@@ -810,11 +810,6 @@ STATUS putFrame(PKinesisVideoStream pKinesisVideoStream, PFrame pFrame)
810
810
pKinesisVideoClient -> base .lock );
811
811
clientLocked = TRUE;
812
812
813
- // Allocate storage for the frame
814
- if (!IS_VALID_ALLOCATION_HANDLE (allocHandle )) {
815
- CHK_STATUS (heapAlloc (pKinesisVideoClient -> pHeap , overallSize , & allocHandle ));
816
- }
817
-
818
813
// Ensure we have space and if not then bail
819
814
CHK (IS_VALID_ALLOCATION_HANDLE (allocHandle ), STATUS_STORE_OUT_OF_MEMORY );
820
815
@@ -1541,7 +1536,8 @@ STATUS getStreamMetrics(PKinesisVideoStream pKinesisVideoStream, PStreamMetrics
1541
1536
}
1542
1537
1543
1538
/**
1544
- * Await for the frame availability in OFFLINE mode.
1539
+ * Check if there is enough content store for the frame. If not, block waiting if in OFFLINE mode, otherwise return with
1540
+ * INVALID_ALLOCATION_HANDLE.
1545
1541
*
1546
1542
* IMPORTANT: The assumption is that both the stream IS locked but
1547
1543
* the client is NOT locked.
@@ -1561,8 +1557,7 @@ STATUS waitForAvailability(PKinesisVideoStream pKinesisVideoStream, UINT32 alloc
1561
1557
PKinesisVideoClient pKinesisVideoClient = pKinesisVideoStream -> pKinesisVideoClient ;
1562
1558
BOOL streamLocked = TRUE;
1563
1559
1564
- // Quick check if we need to do any awaiting
1565
- CHK (IS_OFFLINE_STREAMING_MODE (pKinesisVideoStream -> streamInfo .streamCaps .streamingType ), STATUS_SUCCESS );
1560
+
1566
1561
1567
1562
while (TRUE) {
1568
1563
// Check if we have enough space to proceed - the stream should be locked
@@ -1571,6 +1566,9 @@ STATUS waitForAvailability(PKinesisVideoStream pKinesisVideoStream, UINT32 alloc
1571
1566
// Early return if available
1572
1567
CHK (!IS_VALID_ALLOCATION_HANDLE (* pAllocationHandle ), STATUS_SUCCESS );
1573
1568
1569
+ // if no space available, wait only if in OFFLINE mode
1570
+ CHK (IS_OFFLINE_STREAMING_MODE (pKinesisVideoStream -> streamInfo .streamCaps .streamingType ), STATUS_SUCCESS );
1571
+
1574
1572
// Long path which will await for the availability notification or cancellation
1575
1573
CHK_STATUS (pKinesisVideoClient -> clientCallbacks .waitConditionVariableFn (pKinesisVideoClient -> clientCallbacks .customData ,
1576
1574
pKinesisVideoStream -> bufferAvailabilityCondition ,
@@ -1612,11 +1610,14 @@ STATUS checkForAvailability(PKinesisVideoStream pKinesisVideoStream, UINT32 allo
1612
1610
// Set to invalid whether we failed to allocate or we don't have content view availability
1613
1611
* pAllocationHandle = INVALID_ALLOCATION_HANDLE_VALUE ;
1614
1612
1615
- // Check to see if we have availability in the content view. This will set the availability
1616
- CHK_STATUS (contentViewCheckAvailability (pKinesisVideoStream -> pView , NULL , & availability ));
1613
+ // check view availability only if in offline mode
1614
+ if (IS_OFFLINE_STREAMING_MODE (pKinesisVideoStream -> streamInfo .streamCaps .streamingType )) {
1615
+ // Check to see if we have availability in the content view. This will set the availability
1616
+ CHK_STATUS (contentViewCheckAvailability (pKinesisVideoStream -> pView , NULL , & availability ));
1617
1617
1618
- // Early return if no view availability
1619
- CHK (availability , STATUS_SUCCESS );
1618
+ // Early return if no view availability
1619
+ CHK (availability , STATUS_SUCCESS );
1620
+ }
1620
1621
1621
1622
// Lock the client
1622
1623
pKinesisVideoClient -> clientCallbacks .lockMutexFn (pKinesisVideoClient -> clientCallbacks .customData , pKinesisVideoClient -> base .lock );
0 commit comments