diff options
author | andrew-elder <aelder@audioscience.com> | 2017-09-26 08:48:31 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-26 08:48:31 -0400 |
commit | ecda7dadd3d0f8969770a718a7c65c83f26b8909 (patch) | |
tree | be1bd1117d3be172d79da0b97b3543e0183191cd | |
parent | a5c29c7bc1c9d8508555881b68e3746f5898336d (diff) | |
parent | 0b5524088fe86df6e798ba63f1b24d9ddfd321c5 (diff) | |
download | Open-AVB-ecda7dadd3d0f8969770a718a7c65c83f26b8909.tar.gz |
Merge pull request #694 from bdthomsen/aaf_max_size
AAF returns appropriate max frame size for Talkers vs Listeners
-rwxr-xr-x | lib/avtp_pipeline/map_aaf_audio/openavb_map_aaf_audio.c | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/lib/avtp_pipeline/map_aaf_audio/openavb_map_aaf_audio.c b/lib/avtp_pipeline/map_aaf_audio/openavb_map_aaf_audio.c index 0bc6144e..f9501750 100755 --- a/lib/avtp_pipeline/map_aaf_audio/openavb_map_aaf_audio.c +++ b/lib/avtp_pipeline/map_aaf_audio/openavb_map_aaf_audio.c @@ -142,7 +142,8 @@ typedef struct { aaf_sample_format_t aaf_format; U8 aaf_bit_depth; U32 payloadSize; - U32 payloadSizeMax; + U32 payloadSizeMaxTalker, payloadSizeMaxListener; + bool isTalker; U8 aaf_event_field; @@ -278,7 +279,7 @@ static void x_calculateSizes(media_q_t *pMediaQ) // AAF packet size calculations pPubMapInfo->packetFrameSizeBytes = pPubMapInfo->packetSampleSizeBytes * pPubMapInfo->audioChannels; - pPvtData->payloadSize = pPvtData->payloadSizeMax = + pPvtData->payloadSize = pPvtData->payloadSizeMaxTalker = pPvtData->payloadSizeMaxListener = pPubMapInfo->framesPerPacket * pPubMapInfo->packetFrameSizeBytes; AVB_LOGF_INFO("packet: sampleSz=%d * channels=%d => frameSz=%d * %d => payloadSz=%d", pPubMapInfo->packetSampleSizeBytes, @@ -288,8 +289,8 @@ static void x_calculateSizes(media_q_t *pMediaQ) pPvtData->payloadSize); if (pPvtData->aaf_format >= AAF_FORMAT_INT_32 && pPvtData->aaf_format <= AAF_FORMAT_INT_16) { // Determine the largest size we could receive before adjustments. - pPvtData->payloadSizeMax = 4 * pPubMapInfo->audioChannels * pPubMapInfo->framesPerPacket; - AVB_LOGF_DEBUG("packet: payloadSizeMax=%d", pPvtData->payloadSizeMax); + pPvtData->payloadSizeMaxListener = 4 * pPubMapInfo->audioChannels * pPubMapInfo->framesPerPacket; + AVB_LOGF_DEBUG("packet: payloadSizeMaxListener=%d", pPvtData->payloadSizeMaxListener); } // MediaQ item size calculations @@ -388,8 +389,17 @@ U16 openavbMapAVTPAudioMaxDataSizeCB(media_q_t *pMediaQ) return 0; } + // Return the largest size a frame payload could be. + // If we don't yet know if we are a Talker or Listener, the larger Listener max will be returned. + U16 payloadSizeMax; + if (pPvtData->isTalker) { + payloadSizeMax = pPvtData->payloadSizeMaxTalker + TOTAL_HEADER_SIZE; + } + else { + payloadSizeMax = pPvtData->payloadSizeMaxListener + TOTAL_HEADER_SIZE; + } AVB_TRACE_EXIT(AVB_TRACE_MAP); - return pPvtData->payloadSizeMax + TOTAL_HEADER_SIZE; + return payloadSizeMax; } AVB_TRACE_EXIT(AVB_TRACE_MAP); return 0; @@ -437,6 +447,12 @@ void openavbMapAVTPAudioGenInitCB(media_q_t *pMediaQ) void openavbMapAVTPAudioTxInitCB(media_q_t *pMediaQ) { AVB_TRACE_ENTRY(AVB_TRACE_MAP); + if (pMediaQ) { + pvt_data_t *pPvtData = pMediaQ->pPvtMapInfo; + if (pPvtData) { + pPvtData->isTalker = TRUE; + } + } AVB_TRACE_EXIT(AVB_TRACE_MAP); } @@ -591,6 +607,7 @@ void openavbMapAVTPAudioRxInitCB(media_q_t *pMediaQ) AVB_LOG_ERROR("Private mapping module data not allocated."); return; } + pPvtData->isTalker = FALSE; if (pPvtData->audioMcr != AVB_MCR_NONE) { HAL_INIT_MCR_V2(pPvtData->txInterval, pPvtData->packingFactor, pPvtData->mcrTimestampInterval, pPvtData->mcrRecoveryInterval); } |