]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - processor-sdk/performance-audio-sr.git/blobdiff - pasdk/test_arm/framework/aspDecOpCircBuf_slave.c
Fixed DTSX 192kHz problem.
[processor-sdk/performance-audio-sr.git] / pasdk / test_arm / framework / aspDecOpCircBuf_slave.c
index 62cf64262af006bc19c9c50fa97d137b9eef1abb..30615c26104efaf6cb652be69be04a8bece6fa56 100644 (file)
@@ -237,7 +237,26 @@ Int cbInitDecWrite(
         pCb->pcmRdIdx = 0;
         pCb->maxAFChanNum = ASP_DECOP_CB_MAX_NUM_PCM_CH_DTS;
         pCb->maxAFSampCount = ASP_DECOP_CB_MAX_PCM_FRAME_LEN_48kDTS;
+        switch (pDecInitAf->sampleRate)
+        {
+            case PAF_SAMPLERATE_44100HZ:
+            case PAF_SAMPLERATE_48000HZ:
+                decOpFrameLen = 256;
+                break;
+            case PAF_SAMPLERATE_88200HZ:
+            case PAF_SAMPLERATE_96000HZ:
+                decOpFrameLen = (256*2);
+                break;
+            case PAF_SAMPLERATE_176400HZ:
+            case PAF_SAMPLERATE_192000HZ:
+                decOpFrameLen = (256*4);
+                break;
+            default:
+                decOpFrameLen = 256;
+                break;
+        }
 
+#if 0          
         // initialize audio frames
         for (n=0; n<pCb->maxNumAfCb; n++)
         {
@@ -259,6 +278,7 @@ Int cbInitDecWrite(
             pAfCb->numPrivateMetadata  = 0;                             /* number of valid private metadata (0 or 1 if metadata filtering enabled) */
             pAfCb->bsMetadata_offset   = 0;                             /* offset into audio frame for change in bsMetadata_type field */
         }
+#endif
     }
     else
     {
@@ -714,15 +734,27 @@ Int cbWriteAf(
         pAfCb->pafBsFixedData = pAfWrt->pafBsFixedData;                   /* if true, do not convert float to fixed in DTSX metadata transfer */
         pAfCb->root = pAfWrt->root;                                       /* used for channel MASK in DTSX . BAD IDEA, need fix */
         pAfCb->resetCount = pAfWrt->resetCount;                           /* used for communication between DTSX and PARMA */
+                       pAfCb->data.nChannels = pAfWrt->data.nChannels;                   /* number of channels used */
 #endif         
             // write PCM samples
+#ifdef DTS_BUILD
+                       //DTSX needs up to 8 to 16 channels to transfer metadata depends on sampling rate.
+            for (i = 0; i < pAfWrt->data.nChannels; i++)
+                       { 
+                               for (j = 0; j < pAfWrt->sampleCount; j++)
+                               {
+                                       pAfCb->data.sample[i][j] = pAfWrt->data.sample[i][j];
+                               }
+
+                               pAfCb->data.samsiz[i] = pAfWrt->data.samsiz[i];
+                       }
+#else
             streamMask = pAfWrt->fxns->channelMask(pAfWrt, pAfCb->channelConfigurationStream);
             for (i = 0; i < pCb->maxAFChanNum; i++)
             {
-#ifndef DTS_BUILD
-            if ((streamMask >> i) & 0x1)
-#endif
-            { //DTSX needs up to 16 channels to transfer metadata.
+
+                if ((streamMask >> i) & 0x1)
+                { //DTSX needs up to 16 channels to transfer metadata.
                     for (j = 0; j < pAfWrt->sampleCount; j++)
                     {
                         pAfCb->data.sample[i][j] = pAfWrt->data.sample[i][j];
@@ -731,7 +763,7 @@ Int cbWriteAf(
                     pAfCb->data.samsiz[i] = pAfWrt->data.samsiz[i];
                 }
             }
-            
+#endif
             // Update PCM samples per channel
             pCb->numPcmSampsPerCh += pAfWrt->sampleCount;
             
@@ -846,15 +878,21 @@ Int cbWriteAf(
             Cache_wb(pAfCb->pafPrivateMetadata, pAfWrt->numPrivateMetadata*sizeof(PAF_PrivateMetadata *), Cache_Type_ALLD, 0);
             Cache_wait();
             // write back PCM data
+#ifdef DTS_BUILD
+                       //DTSX needs up to 8 to 16 channels to transfer metadata depends on sampling rate.
+            for (i = 0; i < pAfWrt->data.nChannels; i++)
+                       { 
+                               Cache_wb(pAfCb->data.sample[i], pAfWrt->sampleCount * sizeof(PAF_AudioData), Cache_Type_ALLD, 0);
+            }
+#else
             for (i = 0; i < pCb->maxAFChanNum; i++)
             {
-#ifndef DTS_BUILD
-            if ((streamMask >> i) & 0x1)
-#endif
-            {//DTSX needs up to 16 channels to transfer metadata.
-                    Cache_wb(pAfCb->data.sample[i], pAfWrt->sampleCount * sizeof(PAF_AudioData), Cache_Type_ALLD, 0);
+                               if ((streamMask >> i) & 0x1)
+                               {
+                                       Cache_wb(pAfCb->data.sample[i], pAfWrt->sampleCount * sizeof(PAF_AudioData), Cache_Type_ALLD, 0);
                 }
             }
+#endif
             Cache_wait();
 
 #if 0 // (***) FL: shows timing of CB write