summaryrefslogtreecommitdiff
path: root/lib/avtp_pipeline/map_uncmp_audio/openavb_map_uncmp_audio.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/avtp_pipeline/map_uncmp_audio/openavb_map_uncmp_audio.c')
-rwxr-xr-xlib/avtp_pipeline/map_uncmp_audio/openavb_map_uncmp_audio.c48
1 files changed, 47 insertions, 1 deletions
diff --git a/lib/avtp_pipeline/map_uncmp_audio/openavb_map_uncmp_audio.c b/lib/avtp_pipeline/map_uncmp_audio/openavb_map_uncmp_audio.c
index ca342b2b..6b703478 100755
--- a/lib/avtp_pipeline/map_uncmp_audio/openavb_map_uncmp_audio.c
+++ b/lib/avtp_pipeline/map_uncmp_audio/openavb_map_uncmp_audio.c
@@ -149,7 +149,10 @@ typedef struct {
U8 DBC;
avb_audio_mcr_t audioMcr;
-
+#if ATL_LAUNCHTIME_ENABLED
+ // Transmit interval in nanoseconds.
+ U32 txIntervalNs;
+#endif
} pvt_data_t;
static void x_calculateSizes(media_q_t *pMediaQ)
@@ -232,6 +235,10 @@ static void x_calculateSizes(media_q_t *pMediaQ)
pPubMapInfo->packetSampleSizeBytes = 4;
+#if ATL_LAUNCHTIME_ENABLED
+ pPvtData->txIntervalNs = 1000000000u / pPvtData->txInterval;
+ AVB_LOGF_INFO("LT interval ns:%d", pPvtData->txIntervalNs);
+#endif
AVB_LOGF_INFO("Rate:%d", pPubMapInfo->audioRate);
AVB_LOGF_INFO("Bits:%d", pPubMapInfo->audioBitDepth);
AVB_LOGF_INFO("Channels:%d", pPubMapInfo->audioChannels);
@@ -395,6 +402,42 @@ void openavbMapUncmpAudioAVDECCInitCB(media_q_t *pMediaQ, U16 configIdx, U16 des
AVB_TRACE_EXIT(AVB_TRACE_MAP);
}
+#if ATL_LAUNCHTIME_ENABLED
+#define ATL_LT_OFFSET 500000
+bool openavbMapUncmpLaunchtimCalculationCB(media_q_t *pMediaQ, U64 *lt)
+{
+static U64 last_time = 0;
+ bool res = false;
+ media_q_item_t* pMediaQItem;
+ pvt_data_t *pPvtData = pMediaQ->pPvtMapInfo;
+ AVB_TRACE_ENTRY(AVB_TRACE_INTF);
+ if (!lt) {
+ AVB_LOG_ERROR("Mapping module launchtime argument incorrect.");
+ return false;
+ }
+ if (!pPvtData) {
+ AVB_LOG_ERROR("Private mapping module data not allocated.");
+ return false;
+ }
+
+ pMediaQItem = openavbMediaQTailLock(pMediaQ, true);
+ if (pMediaQItem) {
+ if (pMediaQItem->readIdx == 0) {
+ last_time = pMediaQItem->pAvtpTime->timeNsec;
+ *lt = last_time + ATL_LT_OFFSET;
+ res = true;
+ } else if( last_time != 0 ) {
+ last_time += pPvtData->txIntervalNs;
+ *lt = last_time + ATL_LT_OFFSET;
+ res = true;
+ }
+ openavbMediaQTailUnlock(pMediaQ);
+ }
+ AVB_TRACE_EXIT(AVB_TRACE_INTF);
+ return res;
+}
+#endif
+
// A call to this callback indicates that this mapping module will be
// a talker. Any talker initialization can be done in this function.
void openavbMapUncmpAudioTxInitCB(media_q_t *pMediaQ)
@@ -737,6 +780,9 @@ extern DLL_EXPORT bool openavbMapUncmpAudioInitialize(media_q_t *pMediaQ, openav
pMapCB->map_rx_cb = openavbMapUncmpAudioRxCB;
pMapCB->map_end_cb = openavbMapUncmpAudioEndCB;
pMapCB->map_gen_end_cb = openavbMapUncmpAudioGenEndCB;
+#if ATL_LAUNCHTIME_ENABLED
+ pMapCB->map_lt_calc_cb = openavbMapUncmpLaunchtimCalculationCB;
+#endif
pPvtData->itemCount = 20;
pPvtData->txInterval = 0;