summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandrew-elder <aelder@audioscience.com>2017-09-26 08:48:31 -0400
committerGitHub <noreply@github.com>2017-09-26 08:48:31 -0400
commitecda7dadd3d0f8969770a718a7c65c83f26b8909 (patch)
treebe1bd1117d3be172d79da0b97b3543e0183191cd
parenta5c29c7bc1c9d8508555881b68e3746f5898336d (diff)
parent0b5524088fe86df6e798ba63f1b24d9ddfd321c5 (diff)
downloadOpen-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-xlib/avtp_pipeline/map_aaf_audio/openavb_map_aaf_audio.c27
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);
}