PASDK-218: Both Stop & Start Output operations are now better managed, by starting...
authorGovind Jeyaram <govind.j@ti.com>
Sat, 22 Jul 2017 05:23:28 +0000 (22:23 -0700)
committerGovind Jeyaram <govind.j@ti.com>
Sat, 22 Jul 2017 05:23:28 +0000 (22:23 -0700)
pasdk/test_dsp/framework/audioStreamOutProc.c

index 43784ca53354bbd12ad3be4367e64dc4a246c7f4..aec33bf53e17a1eff92bb5ecd9caa2322714c21f 100644 (file)
@@ -1703,6 +1703,8 @@ PAF_ASOT_selectDevices(
             }
         }
 
+/* No need to start-clocks here, since only selecting the device. */
+#if 0
         // if device selected and valid then enable stat tracking if
         // required and start clocking
         if ((pAstCfg->xOut[z].outBufStatus.sioSelect < 0) && (pAstCfg->xOut[z].hTxSio)) 
@@ -1719,6 +1721,7 @@ PAF_ASOT_selectDevices(
                 }
             }
         }
+#endif
     }
 
     return errno;
@@ -2750,7 +2753,7 @@ PAF_ASOT_startOutput(
     PAF_AST_Config *pAstCfg;
     Int as;                     /* Audio Stream Number (1, 2, etc.) */
     Int z;                      /* output counter */
-    Int errno,nbufs;            /* error number */
+    Int errno,nbufs, errme;            /* error number */
     Int zE, zS, zX;
     Int zMD;
     PAF_SIO_IALG_Obj    *pObj;
@@ -2778,6 +2781,26 @@ PAF_ASOT_startOutput(
                 }
             }
 
+// Need to Revisit: Starting Clocks here seems logical & also manages the McASP without spurious underruns .
+
+#if 1
+            // if device selected and valid then enable stat tracking if
+                       // required and start clocking
+                       if ((pAstCfg->xOut[z].outBufStatus.sioSelect < 0) && (pAstCfg->xOut[z].hTxSio))
+                       {
+                               TRACE_VERBOSE0("PAF_ASOT_startOutput: start SIO clocks");
+                               errme = SIO_ctrl(pAstCfg->xOut[z].hTxSio, PAF_SIO_CONTROL_OUTPUT_START_CLOCKS, 0);
+                               if (errno)
+                               {
+                                       TRACE_VERBOSE2("PAF_ASOT_startOutput: errme 0x%x, errno 0x%x", errme, errno);
+                                       SIO_idle(pAstCfg->xOut[z].hTxSio);
+                                       if (!errno)
+                                       {
+                                               errno = ASPERR_DEVOUT + errme;
+                                       }
+                               }
+                       }
+#endif
             // Set sample count so that DOB knows how much data to send
             pAstCfg->xOut[z].outBufConfig.lengthofFrame =
                 pAstCfg->xEnc[zE].encodeInStruct.pAudioFrame->sampleCount;