Home | History | Annotate | Download | only in lib_src

Lines Matching defs:pState

46 static EAS_RESULT LinearPCMDecode (EAS_DATA_HANDLE pEASData, S_PCM_STATE *pState);
47 static EAS_RESULT LinearPCMLocate (EAS_DATA_HANDLE pEASData, S_PCM_STATE *pState, EAS_I32 time);
108 static EAS_RESULT RenderPCMStream (S_EAS_DATA *pEASData, S_PCM_STATE *pState, EAS_I32 numSamples);
113 static EAS_RESULT InitPCMStream (S_EAS_DATA *pEASData, S_PCM_STATE *pState);
133 S_PCM_STATE *pState;
153 for (i = 0, pState = pEASData->pPCMStreams; i < MAX_PCM_STREAMS; i++, pState++)
154 pState->fileHandle = NULL;
208 S_PCM_STATE *pState;
213 for (i = 0, pState = pEASData->pPCMStreams; i < MAX_PCM_STREAMS; i++, pState++)
215 if ((pState->fileHandle) && (pState->state != EAS_STATE_STOPPED) && (pState->state != EAS_STATE_PAUSED))
216 if ((result = RenderPCMStream(pEASData, pState, numSamples)) != EAS_SUCCESS)
232 * pState - pointer to variable to store state
244 EAS_RESULT EAS_PEState (S_EAS_DATA *pEASData, EAS_PCM_HANDLE pInstData, EAS_STATE *pState)
247 *pState = pInstData->state;
268 EAS_RESULT EAS_PEClose (S_EAS_DATA *pEASData, EAS_PCM_HANDLE pState)
272 if ((result = EAS_HWCloseFile(pEASData->hwInstData, pState->fileHandle)) != EAS_SUCCESS)
275 pState->fileHandle = NULL;
296 EAS_RESULT EAS_PEReset (S_EAS_DATA *pEASData, EAS_PCM_HANDLE pState)
301 if ((result = EAS_HWFileSeek(pEASData->hwInstData, pState->fileHandle, pState->startPos)) != EAS_SUCCESS)
308 return InitPCMStream(pEASData, pState);
330 S_PCM_STATE *pState;
346 if ((pState = FindSlot(pEASData, pParams->fileHandle, pParams->pCallbackFunc, pParams->cbInstData)) == NULL)
353 if ((result = EAS_HWFilePos(pEASData->hwInstData, pState->fileHandle, &filePos)) != EAS_SUCCESS)
356 pState->fileHandle = NULL;
360 pState->pDecoder = decoders[pParams->decoder];
361 pState->startPos = filePos;
362 pState->bytesLeftLoop = pState->byteCount = pParams->size;
363 pState->loopStart = pParams->loopStart;
364 pState->samplesTilLoop = (EAS_I32) pState->loopStart;
365 pState->loopSamples = pParams->loopSamples;
366 pState->samplesInLoop = 0;
367 pState->blockSize = (EAS_U16) pParams->blockSize;
368 pState->flags = pParams->flags;
369 pState->envData = pParams->envData;
370 pState->volume = pParams->volume;
371 pState->sampleRate = (EAS_U16) pParams->sampleRate;
374 pState->basefreq = (SRC_RATE_MULTIPLER * (EAS_U32) pParams->sampleRate) >> 15;
377 pState->rateShift = 0;
378 while (pState->basefreq > 32767)
380 pState->basefreq = pState->basefreq >> 1;
381 pState->rateShift++;
385 if ((result = InitPCMStream(pEASData, pState)) != EAS_SUCCESS)
388 *pHandle = pState;
391 pState->startPos, pState->byteCount, pState->loopSamples); */ }
412 EAS_RESULT EAS_PEContinueStream (S_EAS_DATA *pEASData, EAS_PCM_HANDLE pState, EAS_I32 size)
416 pState->bytesLeft += size;
417 if (pState->bytesLeft > 0)
418 pState->flags &= ~PCM_FLAGS_EMPTY;
439 EAS_RESULT EAS_PEGetFileHandle (S_EAS_DATA *pEASData, EAS_PCM_HANDLE pState, EAS_FILE_HANDLE *pFileHandle)
441 *pFileHandle = pState->fileHandle;
470 EAS_RESULT EAS_PEUpdateParams (S_EAS_DATA* pEASData, EAS_PCM_HANDLE pState, EAS_I16 pitch, EAS_I16 gainLeft, EAS_I16 gainRight)
473 pState->gainLeft = gainLeft;
476 pState->gainRight = gainRight;
479 pState->pitch = pitch;
492 * pState - stream handle
496 EAS_RESULT EAS_PELocate (S_EAS_DATA *pEASData, EAS_PCM_HANDLE pState, EAS_I32 time)
498 if (pState->pDecoder->pfLocate == NULL)
501 return pState->pDecoder->pfLocate(pEASData, pState, time);
527 EAS_RESULT EAS_PEUpdateVolume (S_EAS_DATA* pEASData, EAS_PCM_HANDLE pState, EAS_I16 volume)
529 pState->volume = volume;
541 * pState - pointer to S_PCM_STATE for this stream
546 EAS_RESULT EAS_PEUpdatePitch (S_EAS_DATA* pEASData, EAS_PCM_HANDLE pState, EAS_I16 pitch)
548 pState->pitch = pitch;
571 EAS_RESULT EAS_PEPause (S_EAS_DATA *pEASData, EAS_PCM_HANDLE pState)
574 pState->state = EAS_STATE_PAUSING;
598 EAS_RESULT EAS_PEResume (S_EAS_DATA *pEASData, EAS_PCM_HANDLE pState)
601 pState->state = EAS_STATE_PLAY;
745 EAS_RESULT EAS_PERelease (S_EAS_DATA *pEASData, EAS_PCM_HANDLE pState)
751 if (((pState->envData >> 24) & 0x0F)==0)
754 pState->envState = PCM_ENV_RELEASE;
755 utemp = ((pState->envData >> 20) & 0x0F);
756 pState->envScale = getDecayScale(utemp); //getReleaseScale(utemp);
761 pState->envState = PCM_ENV_SUSTAIN;
762 utemp = ((pState->envData >> 28) & 0x0F);
763 pState->envScale = getDecayScale(utemp); //getSustainScale(utemp);
767 if (pState->envScale > 505)
768 pState->envScale = 505;
793 S_PCM_STATE *pState;
803 for (i = 0, pState = pEASData->pPCMStreams; i < MAX_PCM_STREAMS; i++, pState++)
806 if (pState->fileHandle == NULL)
808 foundState = pState;
817 if ((pState->state != EAS_STATE_STOPPING) && (pState->startOrder < startOrder))
820 stealState = pState;
822 startOrder = pState->startOrder;
825 if (pState->startOrder >= youngest)
827 youngest = pState->startOrder;
858 pState = &pEASData->pPCMStreams[i];
859 if (pState->fileHandle != NULL)
862 pState->fileHandle = fileHandle;
863 pState->pCallback = pCallbackFunc;
864 pState->cbInstData = cbInstData;
865 return pState;
922 static EAS_RESULT InitPCMStream (S_EAS_DATA *pEASData, S_PCM_STATE *pState)
926 pState->bytesLeft = pState->byteCount;
927 pState->phase = 0;
928 pState->srcByte = 0;
929 pState->decoderL.acc = 0;
930 pState->decoderL.output = 0;
931 pState->decoderL.x0 = pState->decoderL.x1 = 0;
932 pState->decoderL.step = 0;
933 pState->decoderR.acc = 0;
934 pState->decoderR.output = 0;
935 pState->decoderR.x0 = pState->decoderR.x1 = 0;
936 pState->decoderR.step = 0;
937 pState->hiNibble = EAS_FALSE;
938 pState->pitch = 0;
939 pState->blockCount = 0;
940 pState->gainLeft = PCM_DEFAULT_GAIN_SETTING;
941 // pState->currentGainLeft = PCM_DEFAULT_GAIN_SETTING;
942 pState->envValue = 0;
943 pState->envState = PCM_ENV_START;
946 pState->gainRight = PCM_DEFAULT_GAIN_SETTING;
947 // pState->currentGainRight = PCM_DEFAULT_GAIN_SETTING;
949 pState->state = EAS_STATE_READY;
952 if (pState->pDecoder->pfInit)
953 return (*pState->pDecoder->pfInit)(pEASData, pState);
973 static EAS_RESULT RenderPCMStream (S_EAS_DATA *pEASData, S_PCM_STATE *pState, EAS_I32 numSamples)
988 ((pState->envData >> 12) & 0x0F),
989 ((pState->envData >> 16) & 0x0F),
990 ((pState->envData >> 8) & 0x0F),
991 ((pState->envData >> 28) & 0x0F),
992 ((pState->envData >> 20) & 0x0F));
995 if (pState->envState == PCM_ENV_START)
998 utemp = ((pState->envData >> 12) & 0x0F);
1004 pState->envValue = (32768<<7);
1006 utemp = ((pState->envData >> 16) & 0x0F);
1007 pState->envScale = getDecayScale(utemp);
1008 pState->envState = PCM_ENV_DECAY;
1009 pState->currentGainLeft = (EAS_I16) FMUL_15x15(pState->gainLeft, pState->volume);
1010 pState->currentGainRight = (EAS_I16) FMUL_15x15(pState->gainRight, pState->volume);
1016 pState->envValue = (2<<7);
1017 pState->currentGainLeft = 0;
1018 pState->currentGainRight = 0;
1020 pState->envScale = getAttackIncrement(utemp);
1022 pState->envState = PCM_ENV_ATTACK;
1025 if (pState->envState == PCM_ENV_ATTACK)
1027 //printf("env attack, env value = %d, env scale = %d\n",pState->envValue>>7,pState->envScale);
1029 pState->envValue = pState->envValue + (pState->envScale << 7);
1031 if (pState->envValue >= (32768<<7))
1033 pState->envValue = (32768<<7);
1034 utemp = ((pState->envData >> 16) & 0x0F);
1035 pState->envScale = getDecayScale(utemp);
1036 pState->envState = PCM_ENV_DECAY;
1039 else if (pState->envState == PCM_ENV_DECAY)
1041 //printf("env decay, env value = %d, env scale = %d\n",pState->envValue>>7,pState->envScale);
1043 pState->envValue = (pState->envValue * pState->envScale)>>9;
1045 utemp = ((pState->envData >> 8) & 0x0F);
1052 if (pState->envValue <= utemp)
1054 utemp = ((pState->envData >> 28) & 0x0F);
1055 pState->envScale = getDecayScale(utemp); //getSustainScale(utemp);
1056 pState->envState = PCM_ENV_SUSTAIN;
1059 else if (pState->envState == PCM_ENV_SUSTAIN)
1061 //printf("env sustain, env value = %d, env scale = %d\n",pState->envValue>>7,pState->envScale);
1063 pState->envValue = (pState->envValue * pState->envScale)>>9;
1065 if (pState->envValue <= (2<<7))
1068 pState->envScale = 512;
1069 pState->envState = PCM_ENV_END;
1072 else if (pState->envState == PCM_ENV_RELEASE)
1074 //printf("env release, env value = %d, env scale = %d\n",pState->envValue>>7,pState->envScale);
1076 pState->envValue = (pState->envValue * pState->envScale)>>9;
1078 if (pState->envValue <= (2<<7))
1081 pState->envScale = 512;
1082 pState->envState = PCM_ENV_END;
1085 else if (pState->envState == PCM_ENV_END)
1089 pState->state = EAS_STATE_STOPPING;
1092 //pState->gainLeft = (EAS_U16)((pState->gainLeft * (pState->envValue>>7))>>15);
1093 //pState->gainRight = (EAS_U16)((pStatepState->envValue>>7))>>15);
1097 gainLeft = (EAS_I32) pState->currentGainLeft << SYNTH_UPDATE_PERIOD_IN_BITS;
1100 gainRight = (EAS_I32) pState->currentGainRight << SYNTH_UPDATE_PERIOD_IN_BITS;
1104 if ((pState->state == EAS_STATE_PAUSING) || (pState->state == EAS_STATE_PAUSED))
1106 gainIncLeft = -pState->currentGainLeft;
1108 gainIncRight= -pState->currentGainRight;
1113 EAS_I32 gain = FMUL_15x15(pState->envValue >> 7, pState->volume);
1114 gainIncLeft = FMUL_15x15(pState->gainLeft, gain) - pState->currentGainLeft;
1116 gainIncRight = FMUL_15x15(pState->gainRight, gain) - pState->currentGainRight;
1121 phaseInc = pState->basefreq;
1124 if (pState->pitch)
1126 temp = EAS_Calculate2toX(pState->pitch);
1129 phaseInc = phaseInc << pState->rateShift;
1139 pState->decoderL.output = pState->decoderL.x0 + FMUL_15x15((pState->decoderL.x1 - pState->decoderL.x0), pState->phase & PHASE_FRAC_MASK);
1145 if (pState->flags & PCM_FLAGS_STEREO)
1146 pState->decoderR.output = pState->decoderR.x0 + FMUL_15x15((pState->decoderR.x1 - pState->decoderR.x0), pState->phase & PHASE_FRAC_MASK);
1150 *pOut++ += (pState->decoderL.output * (gainLeft >> SYNTH_UPDATE_PERIOD_IN_BITS)) >> PCM_MIXER_GUARD_BITS;
1154 if (pState->flags & PCM_FLAGS_STEREO)
1155 *pOut++ += (pState->decoderR.output * (gainRight >> SYNTH_UPDATE_PERIOD_IN_BITS)) >> PCM_MIXER_GUARD_BITS;
1157 *pOut++ += (pState->decoderL.output * (gainRight >> SYNTH_UPDATE_PERIOD_IN_BITS)) >> PCM_MIXER_GUARD_BITS;
1164 if (pState->flags & PCM_FLAGS_STEREO)
1166 pState->decoderR.output= pState->decoderR.x0 + FMUL_15x15((pState->decoderR.x1 - pState->decoderR.x0), pState->phase & PHASE_FRAC_MASK);
1170 *pOut++ += ((pState->decoderL.output + pState->decoderR.output) * (gainLeft >> SYNTH_UPDATE_PERIOD_IN_BITS)) >> PCM_MIXER_GUARD_BITS;
1174 *pOut++ += (pState->decoderL.output * (gainLeft >> SYNTH_UPDATE_PERIOD_IN_BITS)) >> PCM_MIXER_GUARD_BITS;
1180 pState->phase += phaseInc;
1183 while (pState->phase & ~PHASE_FRAC_MASK)
1185 pState->decoderL.x0 = pState->decoderL.x1;
1186 pState->decoderR.x0 = pState->decoderR.x1;
1189 if (!pState->bytesLeft && pState->pCallback && ((pState->flags & PCM_FLAGS_EMPTY) == 0))
1191 pState->flags |= PCM_FLAGS_EMPTY;
1192 (*pState->pCallback)(pEASData, pState->cbInstData, pState, EAS_STATE_EMPTY);
1193 { /* dpp: EAS_ReportEx(_EAS_SEVERITY_DETAIL, "RenderPCMStream: After empty callback, bytesLeft = %d\n", pState->bytesLeft); */ }
1197 if ((result = (*pState->pDecoder->pfDecodeSample)(pEASData, pState)) != EAS_SUCCESS)
1201 pState->phase -= (1L << NUM_PHASE_FRAC_BITS);
1208 pState->currentGainLeft = (EAS_I16) (gainLeft >> SYNTH_UPDATE_PERIOD_IN_BITS);
1212 pState->currentGainRight = (EAS_I16) (gainRight >> SYNTH_UPDATE_PERIOD_IN_BITS);
1216 if (pState->state == EAS_STATE_PAUSING)
1218 pState->state = EAS_STATE_PAUSED;
1219 if (pState->pCallback)
1220 (*pState->pCallback)(pEASData, pState->cbInstData, pState, pState->state);
1224 if (pState->bytesLeft == 0 || pState->state == EAS_STATE_STOPPING)
1226 pState->state = EAS_STATE_STOPPED;
1229 if (pState->pCallback && pState->fileHandle)
1230 (*pState->pCallback)(pEASData, pState->cbInstData, pState, pState->state);
1233 if (pState->state == EAS_STATE_READY)
1234 pState->state = EAS_STATE_PLAY;
1255 static EAS_RESULT LinearPCMDecode (EAS_DATA_HANDLE pEASData, S_PCM_STATE *pState)
1263 if ((pState->bytesLeft == 0) && (pState->loopSamples != 0))
1265 if ((result = EAS_HWFileSeek(pEASData->hwInstData, pState->fileHandle, (EAS_I32) (pState->startPos + pState->loopLocation))) != EAS_SUCCESS)
1267 pState->bytesLeft = pState->byteCount = (EAS_I32) pState->bytesLeftLoop;
1268 pState->flags &= ~PCM_FLAGS_EMPTY;
1269 { /* dpp: EAS_ReportEx(_EAS_SEVERITY_DETAIL, "LinearPCMDecode: Rewind file to %d, bytesLeft = %d\n", pState->startPos, pState->bytesLeft); */ }
1272 if (pState->bytesLeft)
1276 if (pState->flags & PCM_FLAGS_8_BIT)
1279 if ((result = EAS_HWGetByte(hwInstData, pState->fileHandle, &pState->srcByte)) != EAS_SUCCESS)
1283 if (pState->flags & PCM_FLAGS_UNSIGNED)
1286 pState->decoderL.x1 = (EAS_PCM)(((EAS_PCM) pState->srcByte << 8) ^ 0x8000);
1291 pState->decoderL.x1 = (EAS_PCM)((EAS_PCM) pState->srcByte << 8);
1293 pState->bytesLeft--;
1296 if(pState->flags & PCM_FLAGS_STEREO)
1298 if ((result = EAS_HWGetByte(hwInstData, pState->fileHandle, &pState->srcByte)) != EAS_SUCCESS)
1302 if (pState->flags & PCM_FLAGS_UNSIGNED)
1305 pState->decoderR.x1 = (EAS_PCM)(((EAS_PCM) pState->srcByte << 8) ^ 0x8000);
1310 pState->decoderR.x1 = (EAS_PCM)((EAS_PCM) pState->srcByte << 8);
1312 pState->bytesLeft--;
1320 if (pState->flags & PCM_FLAGS_UNSIGNED)
1326 if ((result = EAS_HWGetWord(hwInstData, pState->fileHandle, &pState->decoderL.x1, EAS_FALSE)) != EAS_SUCCESS)
1328 pState->bytesLeft -= 2;
1331 if(pState->flags & PCM_FLAGS_STEREO)
1333 if ((result = EAS_HWGetWord(hwInstData, pState->fileHandle, &pState->decoderR.x1, EAS_FALSE)) != EAS_SUCCESS)
1335 pState->bytesLeft -= 2;
1342 pState->decoderL.x1 = pState->decoderR.x1 = 0;
1354 static EAS_RESULT LinearPCMLocate (EAS_DATA_HANDLE pEASData, S_PCM_STATE *pState, EAS_I32 time)
1362 if (pState->flags & PCM_FLAGS_8_BIT)
1366 if (pState->flags & PCM_FLAGS_STEREO)
1374 temp = (msecs * pState->sampleRate);
1378 temp += secs * pState->sampleRate;
1385 if (temp > (EAS_I32) pState->loopStart)
1388 if (pState->loopSamples == 0)
1390 pState->bytesLeft = 0;
1391 pState->flags |= PCM_FLAGS_EMPTY;
1396 while (temp > (EAS_I32) pState->loopStart)
1397 temp -= (EAS_I32) pState->loopStart;
1401 if ((result = EAS_PESeek(pEASData, pState, &temp)) != EAS_SUCCESS)
1405 if ((pState->state != EAS_STATE_PAUSING) && (pState->state != EAS_STATE_PAUSED))
1406 pState->state = EAS_STATE_READY;
1427 EAS_RESULT EAS_PESeek (S_EAS_DATA *pEASData, S_PCM_STATE *pState, EAS_I32 *pLocation)
1432 if ((result = EAS_HWFileSeek(pEASData->hwInstData, pState->fileHandle, pState->startPos)) != EAS_SUCCESS)
1434 pState->state = EAS_STATE_ERROR;
1437 pState->bytesLeft = pState->bytesLeftLoop;
1440 while (*pLocation > (EAS_I32) pState->bytesLeft)
1443 { /* dpp: EAS_ReportEx(_EAS_SEVERITY_DETAIL, "EAS_PESeek: Seek to offset = %d\n", pState->bytesLeft); */ }
1444 if ((result = EAS_HWFileSeekOfs(pEASData->hwInstData, pState->fileHandle, pState->bytesLeft)) != EAS_SUCCESS)
1446 pState->state = EAS_STATE_ERROR;
1449 *pLocation -= pState->bytesLeft;
1450 pState->bytesLeft = 0;
1451 pState->flags |= PCM_FLAGS_EMPTY;
1454 if (pState->pCallback)
1455 (*pState->pCallback)(pEASData, pState->cbInstData, pState, EAS_STATE_EMPTY);
1457 { /* dpp: EAS_ReportEx(_EAS_SEVERITY_DETAIL, "EAS_PESeek: bytesLeft=%d, byte location = %d\n", pState->bytesLeft, *pLocation); */ }
1460 if (pState->bytesLeft == 0)
1468 if ((result = EAS_HWFileSeekOfs(pEASData->hwInstData, pState->fileHandle, *pLocation)) != EAS_SUCCESS)
1470 pState->state = EAS_STATE_ERROR;
1475 if (pState->flags & PCM_FLAGS_STREAMING)
1476 pState->bytesLeft = 0x7fffffff;
1478 pState->bytesLeft -= *pLocation;