PASDK-400:AAC integration
authorFrank Livingston <frank-livingston@ti.com>
Mon, 25 Sep 2017 15:36:30 +0000 (10:36 -0500)
committerFrank Livingston <frank-livingston@ti.com>
Mon, 25 Sep 2017 15:36:30 +0000 (10:36 -0500)
Implementation of AAC integration from MRB, Ogo-san w/ guidance from PP.

pasdk/common/aspDecOpCircBuf_common.c
pasdk/common/aspDecOpCircBuf_common.h
pasdk/test_arm/framework/aspDecOpCircBuf_slave.c
pasdk/test_arm/framework/audioStreamDecodeProc.c
pasdk/test_dsp/framework/audioStreamInpProc.c

index 74e570a2021e3861f7fb4072e554bf4a0da8de2a..0f9446dbfdebedd6b303e385e95413150c8ae412 100644 (file)
@@ -138,6 +138,11 @@ Int cbReset(
         pCb->afWrtIdx = ASP_DECOP_CB_INIT_WRTIDX_PCM;
         pCb->afRdIdx = ASP_DECOP_CB_INIT_RDIDX_PCM;
     }
+    else if (pCb->sourceSel == PAF_SOURCE_AAC)
+    {
+        pCb->afWrtIdx = ASP_DECOP_CB_INIT_WRTIDX_AAC;
+        pCb->afRdIdx = ASP_DECOP_CB_INIT_RDIDX_AAC;
+    }
     else if (pCb->sourceSel == PAF_SOURCE_DDP)
     {
         pCb->afWrtIdx = ASP_DECOP_CB_INIT_WRTIDX_DDP;
index f533e9dbcd9ff84e0e54bbf73d2e9066b94c3810..1facf56ed31ceb030bd84ca462d220e1ffce0865 100644 (file)
@@ -67,6 +67,9 @@ All rights reserved.
 #define ASP_DECOP_CB_MAX_NUM_PCM_FRAMES         ( 15 )      // decoder output circular buffer maximum number PCM frames //Qin - Increased to prevent cb overflow for ddp.
 #define ASP_DECOP_CB_MAX_PCM_FRAME_LEN          ( 6*256 )   // decoder output circular buffer maximum PCM frame length
 
+#define ASP_DECOP_CB_MAX_NUM_PCM_CH_AAC         ( 16 )      // decoder output circular buffer maximum number audio PCM channels for AAC
+#define ASP_DECOP_CB_MAX_PCM_FRAME_LEN_48kAAC   ( 6*256 )   // decoder output circular buffer maximum PCM frame length at 48kHz sampling rate
+
 #define ASP_DECOP_CB_MAX_NUM_PCM_CH_DDP         ( 16 )      // decoder output circular buffer maximum number audio PCM channels for DDP
 #define ASP_DECOP_CB_MAX_PCM_FRAME_LEN_48kDDP   ( 6*256 )   // decoder output circular buffer maximum PCM frame length at 48kHz sampling rate
 
@@ -95,6 +98,11 @@ All rights reserved.
 //#define ASP_DECOP_CB_INIT_LAG_PCM               ( 2 )
 #define ASP_DECOP_CB_TARGET_ND_SAMPS_48kPCM     ( (4+1) * 256 ) // PCM target Nominal Delay in number of samples, fs=48 kHz
 
+#define ASP_DECOP_CB_MAX_NUM_AF_AAC             ( 4 )
+#define ASP_DECOP_CB_INIT_WRTIDX_AAC            ( 0 )
+#define ASP_DECOP_CB_INIT_RDIDX_AAC             ( 0 )
+#define ASP_DECOP_CB_TARGET_ND_SAMPS_AAC        ( (4+1) * 256 )
+
 #define ASP_DECOP_CB_MAX_NUM_AF_DDP             ( 3 )
 #if (ASP_DECOP_CB_MAX_NUM_AF_DDP > ASP_DECOP_CB_MAX_NUM_AF)
     #error "CB Max AF DDP error"
index 06360effd3eeccc2399351bca617fa4a8ffd7e38..62cf64262af006bc19c9c50fa97d137b9eef1abb 100644 (file)
@@ -157,6 +157,21 @@ Int cbInitDecWrite(
 
         pCb->maxNumPcmSampsPerCh = (Int32)(pCb->pcmBufEnd - pCb->pcmBuf)/pCb->maxAFChanNum;
     }
+    else if (sourceSelect == PAF_SOURCE_AAC)
+    {
+        pCb->maxNumAfCb = ASP_DECOP_CB_MAX_NUM_AF_AAC;
+
+        //pCb->afInitialLag = ASP_DECOP_CB_INIT_LAG_PCM;
+        pCb->targetNDSamps = ASP_DECOP_CB_TARGET_ND_SAMPS_AAC;
+
+        pCb->afWrtIdx = ASP_DECOP_CB_INIT_WRTIDX_AAC;
+        pCb->afRdIdx = ASP_DECOP_CB_INIT_RDIDX_AAC;
+
+        pCb->maxAFChanNum = ASP_DECOP_CB_MAX_NUM_PCM_CH_AAC;
+        pCb->maxAFSampCount = ASP_DECOP_CB_MAX_PCM_FRAME_LEN_48kAAC;
+
+        pCb->maxNumPcmSampsPerCh = (Int32)(pCb->pcmBufEnd - pCb->pcmBuf)/pCb->maxAFChanNum;
+    }
     else if ((sourceSelect == PAF_SOURCE_DDP) || (sourceSelect == PAF_SOURCE_AC3))
     {
         pCb->maxNumAfCb = ASP_DECOP_CB_MAX_NUM_AF_DDP;
index d10e34e20d731fd218647cc772e2a2d45403f362..77d41d7988890c2641d8da3421b9f902c10199e3 100644 (file)
@@ -337,6 +337,8 @@ Void taskAsdpFxn(
     Cache_wb((Ptr)(&IACP_STD_BETA_TABLE.pStatus[STD_BETA_THD]), sizeof(IALG_Status *), Cache_Type_ALLD, 0);
     Cache_wb((Ptr)(&IACP_STD_BETA_TABLE.pStatus[STD_BETA_THD2]), sizeof(IALG_Status *), Cache_Type_ALLD, 0);
     Cache_wb((Ptr)(&IACP_STD_BETA_TABLE.pStatus[STD_BETA_DTSUHDA]), sizeof(IALG_Status *), Cache_Type_ALLD, 0);
+    Cache_wb((Ptr)(&IACP_STD_BETA_TABLE.pStatus[STD_BETA_AAC]), sizeof(IALG_Status *), Cache_Type_ALLD, 0);
+    Cache_wb((Ptr)(&IACP_STD_BETA_TABLE.pStatus[STD_BETA_AAC2]), sizeof(IALG_Status *), Cache_Type_ALLD, 0);
     Cache_wait();
     
     // (***) FL: revisit
@@ -1644,6 +1646,9 @@ Int resetAf(
         case PAF_SOURCE_PCM:
             pAudioFrame->data.nSamples = FRAMELENGTH;
             break;
+        case PAF_SOURCE_AAC:
+            pAudioFrame->data.nSamples =  1024;
+            break;
         case PAF_SOURCE_AC3:
         case PAF_SOURCE_DDP:
             pAudioFrame->data.nSamples = 1536;
index 990a758abf82a4eae85f414c1eb6874476a14650..3256aa8337cda5dba20601a4ead59c233c7de7bc 100644 (file)
@@ -555,6 +555,8 @@ Void taskAsipFxn(
     Cache_inv((Ptr)(&IACP_STD_BETA_TABLE.pStatus[STD_BETA_THD]), sizeof(IALG_Status *), Cache_Type_ALLD, 0);
     Cache_inv((Ptr)(&IACP_STD_BETA_TABLE.pStatus[STD_BETA_THD2]), sizeof(IALG_Status *), Cache_Type_ALLD, 0);
     Cache_inv((Ptr)(&IACP_STD_BETA_TABLE.pStatus[STD_BETA_DTSUHDA]), sizeof(IALG_Status *), Cache_Type_ALLD, 0);
+    Cache_inv((Ptr)(&IACP_STD_BETA_TABLE.pStatus[STD_BETA_AAC]), sizeof(IALG_Status *), Cache_Type_ALLD, 0);
+    Cache_inv((Ptr)(&IACP_STD_BETA_TABLE.pStatus[STD_BETA_AAC2]), sizeof(IALG_Status *), Cache_Type_ALLD, 0);
     Cache_wait();
     if (!IACP_STD_BETA_TABLE.pStatus[STD_BETA_DECODE]) Log_info0("ERROR: beta unit for Dec==NULL");
     if (!IACP_STD_BETA_TABLE.pStatus[STD_BETA_PCM]) Log_info0("ERROR: beta unit for Dec==NULL");
@@ -590,6 +592,12 @@ Void taskAsipFxn(
     Cache_inv((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_THD2]), size, Cache_Type_ALLD, 0);
     size = IACP_STD_BETA_TABLE.pStatus[STD_BETA_DTSUHDA]->size;
     Cache_inv((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_DTSUHDA]), size, Cache_Type_ALLD, 0);
+    Cache_inv((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_AAC]), sizeof(Int), Cache_Type_ALLD, 0);
+    size = IACP_STD_BETA_TABLE.pStatus[STD_BETA_AAC]->size;
+    Cache_inv((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_AAC]), size, Cache_Type_ALLD, 0);
+    Cache_inv((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_AAC2]), sizeof(Int), Cache_Type_ALLD, 0);
+    size = IACP_STD_BETA_TABLE.pStatus[STD_BETA_AAC2]->size;
+    Cache_inv((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_AAC2]), size, Cache_Type_ALLD, 0);
     Cache_wait();
     
 #ifdef NON_CACHE_STATUS
@@ -3603,6 +3611,9 @@ static Int getFrameLengthSourceSel(
         case PAF_SOURCE_PCM:
             frameLength = FRAMELENGTH;
             break;
+        case PAF_SOURCE_AAC:
+            frameLength = 1024;
+            break;
         case PAF_SOURCE_AC3: 
         case PAF_SOURCE_DDP: 
             frameLength = ASIP_FRAMELEN_SS_DDP_AC3;