diff options
Diffstat (limited to 'lib/avtp_pipeline/mediaq/openavb_mediaq.c')
-rw-r--r-- | lib/avtp_pipeline/mediaq/openavb_mediaq.c | 79 |
1 files changed, 9 insertions, 70 deletions
diff --git a/lib/avtp_pipeline/mediaq/openavb_mediaq.c b/lib/avtp_pipeline/mediaq/openavb_mediaq.c index 463b15c2..eda2c68d 100644 --- a/lib/avtp_pipeline/mediaq/openavb_mediaq.c +++ b/lib/avtp_pipeline/mediaq/openavb_mediaq.c @@ -1,5 +1,6 @@ /************************************************************************************************************* Copyright (c) 2012-2015, Symphony Teleca Corporation, a Harman International Industries, Incorporated company +Copyright (c) 2016-2017, Harman International Industries, Incorporated All rights reserved. Redistribution and use in source and binary forms, with or without @@ -40,8 +41,6 @@ https://github.com/benhoyt/inih/commit/74d2ca064fb293bc60a77b0bd068075b293cf175. #include "openavb_mediaq.h" #include "openavb_avtp_time_pub.h" -#include "openavb_printbuf.h" - #define AVB_LOG_COMPONENT "Media Queue" #include "openavb_log.h" @@ -49,10 +48,6 @@ static MUTEX_HANDLE(gMediaQMutex); #define MEDIAQ_LOCK() { MUTEX_CREATE_ERR(); MUTEX_LOCK(gMediaQMutex); MUTEX_LOG_ERR("Mutex Lock failure"); } #define MEDIAQ_UNLOCK() { MUTEX_CREATE_ERR(); MUTEX_UNLOCK(gMediaQMutex); MUTEX_LOG_ERR("Mutex Unlock failure"); } -// CORE_TODO : Currently this first future logic for purge the media queue and incoming items -// may be too aggressive and can result in never catching up. Therefore it is disabled for now -//#define ENABLE_FIRST_FUTURE 1 - //#define DUMP_HEAD_PUSH 1 //#define DUMP_TAIL_PULL 1 @@ -85,9 +80,6 @@ typedef struct { // True is next item to be pulled is locked bool tailLocked; - // set if timestamp is ever in the future - bool firstFuture; - // Maximum latency U32 maxLatencyUsec; @@ -167,18 +159,6 @@ void x_openavbMediaQPurgeStaleTail(media_q_t *pMediaQ) { AVB_TRACE_ENTRY(AVB_TRACE_MEDIAQ_DETAIL); -#if 0 // debug - // Debug code to report delta from TS - static bool init = TRUE; - static U32 cnt = 0; - static openavb_printbuf_t printBuf; - if (init) { - printBuf = openavbPrintbufNew(2000, 20); - init = FALSE; - } -#endif - - if (pMediaQ) { if (pMediaQ->pPvtMediaQInfo) { media_q_info_t *pMediaQInfo = (media_q_info_t *)(pMediaQ->pPvtMediaQInfo); @@ -196,14 +176,12 @@ void x_openavbMediaQPurgeStaleTail(media_q_t *pMediaQ) pMediaQInfo->tailLocked = TRUE; bool bPurge = FALSE; -#ifdef ENABLE_FIRST_FUTURE if (bFirst) { S32 delta = openavbAvtpTimeUsecDelta(pTail->pAvtpTime); S32 maxStale = (S32)(0 - pMediaQInfo->maxStaleTailUsec); if (delta < maxStale) { - IF_LOG_INTERVAL(100) AVB_LOGF_INFO("Purging stale MediaQ items: delta:%dus maxStale%dus", delta, maxStale); - + AVB_LOGF_DEBUG("Purging stale MediaQ items: delta %d us, maxStale %d us", delta, maxStale); bPurge = TRUE; } bFirst = FALSE; @@ -211,6 +189,7 @@ void x_openavbMediaQPurgeStaleTail(media_q_t *pMediaQ) else { // Once we have triggered a stale tail purge everything past presentation time. if (openavbAvtpTimeIsPast(pTail->pAvtpTime)) { + AVB_LOG_DEBUG("Purging stale MediaQ items"); bPurge = TRUE; } } @@ -224,46 +203,6 @@ void x_openavbMediaQPurgeStaleTail(media_q_t *pMediaQ) pMediaQInfo->tailLocked = FALSE; pTail = NULL; } -#else // ENABLE_FIRST_FUTURE - if (bFirst) { - S32 delta = openavbAvtpTimeUsecDelta(pTail->pAvtpTime); - S32 maxStale = (S32)(0 - pMediaQInfo->maxStaleTailUsec); - if(delta >= 0) { - pMediaQInfo->firstFuture = TRUE; - } - else if (delta < maxStale) { - bPurge = TRUE; - pMediaQInfo->firstFuture = FALSE; - } - - bFirst = FALSE; - } - else { - // Once we have triggered a stale tail purge everything past presentation time. - if (openavbAvtpTimeIsPast(pTail->pAvtpTime)) { -#if 0 // debug - if (!(++cnt % 1)) { - openavbPrintbufPrintf(printBuf, "Purge More\n"); - } -#endif - bPurge = TRUE; - } - else { - pMediaQInfo->firstFuture = TRUE; - } - } - - if (bPurge || (pMediaQInfo->firstFuture == FALSE)) { - openavbMediaQTailPull(pMediaQ); - pTail = NULL; - bMore = TRUE; - } - else { - pMediaQInfo->tailLocked = FALSE; - pTail = NULL; - } -#endif // ENABLE_FIRST_FUTURE - } } } @@ -292,7 +231,6 @@ media_q_t* openavbMediaQCreate() pMediaQInfo->headLocked = FALSE; pMediaQInfo->tail = -1; pMediaQInfo->tailLocked = FALSE; - pMediaQInfo->firstFuture = TRUE; pMediaQInfo->maxLatencyUsec = 0; pMediaQInfo->threadSafeOn = FALSE; pMediaQInfo->maxStaleTailUsec = MICROSECONDS_PER_SECOND; @@ -347,7 +285,7 @@ bool openavbMediaQSetSize(media_q_t *pMediaQ, int itemCount, int itemSize) int i1; for (i1 = 0; i1 < itemCount; i1++) { pMediaQInfo->pItems[i1].pAvtpTime = openavbAvtpTimeCreate(pMediaQInfo->maxLatencyUsec); - pMediaQInfo->pItems[i1].pPubData = calloc(1, itemSize); + pMediaQInfo->pItems[i1].pPubData = calloc(1, itemSize + 4 /* Just in case */); pMediaQInfo->pItems[i1].dataLen = 0; pMediaQInfo->pItems[i1].itemSize = itemSize; if (!pMediaQInfo->pItems[i1].pPubData) { @@ -399,7 +337,7 @@ bool openavbMediaQAllocItemMapData(media_q_t *pMediaQ, int itemPubMapSize, int i } } else { - AVB_LOG_ERROR("Attemping to reallocate public map data"); + AVB_LOG_ERROR("Attempting to reallocate public map data"); AVB_TRACE_EXIT(AVB_TRACE_MEDIAQ); return FALSE; } @@ -413,7 +351,7 @@ bool openavbMediaQAllocItemMapData(media_q_t *pMediaQ, int itemPubMapSize, int i } } else { - AVB_LOG_ERROR("Attemping to reallocate private map data"); + AVB_LOG_ERROR("Attempting to reallocate private map data"); AVB_TRACE_EXIT(AVB_TRACE_MEDIAQ); return FALSE; } @@ -449,7 +387,7 @@ bool openavbMediaQAllocItemIntfData(media_q_t *pMediaQ, int itemIntfSize) } } else { - AVB_LOG_ERROR("Attemping to reallocate private interface data"); + AVB_LOG_ERROR("Attempting to reallocate private interface data"); AVB_TRACE_EXIT(AVB_TRACE_MEDIAQ); return FALSE; } @@ -699,13 +637,14 @@ media_q_item_t* openavbMediaQTailLock(media_q_t *pMediaQ, bool ignoreTimestamp) if (pMediaQInfo->threadSafeOn) { MEDIAQ_UNLOCK(); } + AVB_TRACE_EXIT(AVB_TRACE_MEDIAQ_DETAIL); return NULL; } } pMediaQInfo->tailLocked = TRUE; - AVB_TRACE_EXIT(AVB_TRACE_MEDIAQ_DETAIL); // Mutex (LOCK()) if acquired stays locked + AVB_TRACE_EXIT(AVB_TRACE_MEDIAQ_DETAIL); return pTail; } } |