📄 dolby_adapt.c
字号:
*destPtr++ = *transBuffPtr++ + *timeBuffPtr++;
*destPtr++ = *transBuffPtr++ + *timeBuffPtr++;
*destPtr++ = *transBuffPtr++ + *timeBuffPtr++;
*destPtr++ = *transBuffPtr++ + *timeBuffPtr++;
*destPtr++ = *transBuffPtr++ + *timeBuffPtr++;
*destPtr++ = *transBuffPtr++ + *timeBuffPtr++;
*destPtr++ = *transBuffPtr++ + *timeBuffPtr++;
*destPtr++ = *transBuffPtr++ + *timeBuffPtr++;
*destPtr++ = *transBuffPtr++ + *timeBuffPtr++;
}
/* Save second half as old data */
timeBuffPtr = timeBuff;
for (i = BLOCK_LEN_LONG/16 - 1; i >= 0; --i) {
*timeBuffPtr++ = *transBuffPtr++; *timeBuffPtr++ = *transBuffPtr++;
*timeBuffPtr++ = *transBuffPtr++; *timeBuffPtr++ = *transBuffPtr++;
*timeBuffPtr++ = *transBuffPtr++; *timeBuffPtr++ = *transBuffPtr++;
*timeBuffPtr++ = *transBuffPtr++; *timeBuffPtr++ = *transBuffPtr++;
*timeBuffPtr++ = *transBuffPtr++; *timeBuffPtr++ = *transBuffPtr++;
*timeBuffPtr++ = *transBuffPtr++; *timeBuffPtr++ = *transBuffPtr++;
*timeBuffPtr++ = *transBuffPtr++; *timeBuffPtr++ = *transBuffPtr++;
*timeBuffPtr++ = *transBuffPtr++; *timeBuffPtr++ = *transBuffPtr++;
}
hDecoder->dolbyShortOffset_f2t = 0;
}
else if (blockType == STOP_TYPE) {
unfold (freqInPtr, transBuff, BLOCK_LEN_LONG);
/* Do 1 LONG transforms */
ITransformBlock (hDecoder, transBuff, STOP_FLAT_BLOCK, wnd_shape, timeBuff);
/* Add first half and old data */
transBuffPtr = transBuff;
timeBuffPtr = timeBuff;
destPtr = timeOutPtr;
for (i = (BLOCK_LEN_LONG - NFLAT)/16 - 1; i>=0;--i)
{
*destPtr++ = *transBuffPtr++ + *timeBuffPtr++;
*destPtr++ = *transBuffPtr++ + *timeBuffPtr++;
*destPtr++ = *transBuffPtr++ + *timeBuffPtr++;
*destPtr++ = *transBuffPtr++ + *timeBuffPtr++;
*destPtr++ = *transBuffPtr++ + *timeBuffPtr++;
*destPtr++ = *transBuffPtr++ + *timeBuffPtr++;
*destPtr++ = *transBuffPtr++ + *timeBuffPtr++;
*destPtr++ = *transBuffPtr++ + *timeBuffPtr++;
*destPtr++ = *transBuffPtr++ + *timeBuffPtr++;
*destPtr++ = *transBuffPtr++ + *timeBuffPtr++;
*destPtr++ = *transBuffPtr++ + *timeBuffPtr++;
*destPtr++ = *transBuffPtr++ + *timeBuffPtr++;
*destPtr++ = *transBuffPtr++ + *timeBuffPtr++;
*destPtr++ = *transBuffPtr++ + *timeBuffPtr++;
*destPtr++ = *transBuffPtr++ + *timeBuffPtr++;
*destPtr++ = *transBuffPtr++ + *timeBuffPtr++;
}
for ( i = NFLAT/16-1; i>=0;--i) {
*destPtr++ = *transBuffPtr++; *destPtr++ = *transBuffPtr++;
*destPtr++ = *transBuffPtr++; *destPtr++ = *transBuffPtr++;
*destPtr++ = *transBuffPtr++; *destPtr++ = *transBuffPtr++;
*destPtr++ = *transBuffPtr++; *destPtr++ = *transBuffPtr++;
*destPtr++ = *transBuffPtr++; *destPtr++ = *transBuffPtr++;
*destPtr++ = *transBuffPtr++; *destPtr++ = *transBuffPtr++;
*destPtr++ = *transBuffPtr++; *destPtr++ = *transBuffPtr++;
*destPtr++ = *transBuffPtr++; *destPtr++ = *transBuffPtr++;
}
/* Save second half as old data */
timeBuffPtr = timeBuff;
for (i = BLOCK_LEN_LONG/16 - 1; i >= 0; --i ) {
*timeBuffPtr++ = *transBuffPtr++; *timeBuffPtr++ = *transBuffPtr++;
*timeBuffPtr++ = *transBuffPtr++; *timeBuffPtr++ = *transBuffPtr++;
*timeBuffPtr++ = *transBuffPtr++; *timeBuffPtr++ = *transBuffPtr++;
*timeBuffPtr++ = *transBuffPtr++; *timeBuffPtr++ = *transBuffPtr++;
*timeBuffPtr++ = *transBuffPtr++; *timeBuffPtr++ = *transBuffPtr++;
*timeBuffPtr++ = *transBuffPtr++; *timeBuffPtr++ = *transBuffPtr++;
*timeBuffPtr++ = *transBuffPtr++; *timeBuffPtr++ = *transBuffPtr++;
*timeBuffPtr++ = *transBuffPtr++; *timeBuffPtr++ = *transBuffPtr++;
}
}
i=0;
do
{
*(ftimeOutPtr++) = (timeOutPtr[i]); i++;
*(ftimeOutPtr++) = (timeOutPtr[i]); i++;
*(ftimeOutPtr++) = (timeOutPtr[i]); i++;
*(ftimeOutPtr++) = (timeOutPtr[i]); i++;
*(ftimeOutPtr++) = (timeOutPtr[i]); i++;
*(ftimeOutPtr++) = (timeOutPtr[i]); i++;
*(ftimeOutPtr++) = (timeOutPtr[i]); i++;
*(ftimeOutPtr++) = (timeOutPtr[i]); i++;
} while(i<BLOCK_LEN_LONG);
FreeMemory(timeOutPtr);
FreeMemory(transBuff);
}
/*****************************************************************************
*
* time2freq_adapt
* transform to time domain data to freq. domain.
* Blocks composed of multiple segments (i.e. all but long) have
* input spectrums interleaved.
* Notice: currently verified only for certain blocktypes
* input: see below
* output: see below
* local static:
* none
* globals: none
*
*****************************************************************************/
void time2freq_adapt(faacDecHandle hDecoder,
WINDOW_TYPE blockType, /* input: blockType 0-3 */
Wnd_Shape *wnd_shape, /* input/output */
Float *timeInPtr, /* input: time domain data */
Float *ffreqOutPtr) /* output: 1/2 block of new freq values */
{
Float *transBuff, *transBuffPtr;
int i, j;
Float *srcPtr;
Float *destPtr;
Float *freqOutPtr;
transBuff = AllocMemory(2*BLOCK_LEN_LONG*sizeof(Float));
freqOutPtr = AllocMemory(BLOCK_LEN_LONG*sizeof(Float));
if (blockType == NORM_TYPE)
{
srcPtr = timeInPtr;
destPtr = transBuff;
for (i = 2 * BLOCK_LEN_LONG / 16 - 1; i >= 0; --i)
{
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
}
/* Do 1 LONG transform */
TransformBlock (hDecoder, transBuff, LONG_BLOCK, wnd_shape);
srcPtr = transBuff;
destPtr = freqOutPtr;
for (i = BLOCK_LEN_LONG/16-1; i>=0; --i)
{
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
}
}
else if (blockType == SHORT_TYPE) {
/* Do 8 SHORT transforms */
srcPtr = timeInPtr + (BLOCK_LEN_LONG - BLOCK_LEN_SHORT) / 2;
destPtr = freqOutPtr;
for (i = 0; i < 8; i++) {
transBuffPtr = transBuff;
for (i = 2 * BLOCK_LEN_SHORT/16-1; i>=0; --i) {
*transBuffPtr++ = *srcPtr++; *transBuffPtr++ = *srcPtr++;
*transBuffPtr++ = *srcPtr++; *transBuffPtr++ = *srcPtr++;
*transBuffPtr++ = *srcPtr++; *transBuffPtr++ = *srcPtr++;
*transBuffPtr++ = *srcPtr++; *transBuffPtr++ = *srcPtr++;
*transBuffPtr++ = *srcPtr++; *transBuffPtr++ = *srcPtr++;
*transBuffPtr++ = *srcPtr++; *transBuffPtr++ = *srcPtr++;
*transBuffPtr++ = *srcPtr++; *transBuffPtr++ = *srcPtr++;
*transBuffPtr++ = *srcPtr++; *transBuffPtr++ = *srcPtr++;
}
srcPtr -= BLOCK_LEN_SHORT;
TransformBlock (hDecoder, transBuff, SHORT_BLOCK, wnd_shape);
/* Copy data to output buffer */
transBuffPtr = transBuff;
for (j = BLOCK_LEN_SHORT/16-1; j>=0;--j) {
*destPtr++ = *transBuffPtr++; *destPtr++ = *transBuffPtr++;
*destPtr++ = *transBuffPtr++; *destPtr++ = *transBuffPtr++;
*destPtr++ = *transBuffPtr++; *destPtr++ = *transBuffPtr++;
*destPtr++ = *transBuffPtr++; *destPtr++ = *transBuffPtr++;
*destPtr++ = *transBuffPtr++; *destPtr++ = *transBuffPtr++;
*destPtr++ = *transBuffPtr++; *destPtr++ = *transBuffPtr++;
*destPtr++ = *transBuffPtr++; *destPtr++ = *transBuffPtr++;
*destPtr++ = *transBuffPtr++; *destPtr++ = *transBuffPtr++;
}
}
}
else if (blockType == START_TYPE) {
srcPtr = timeInPtr;
destPtr = transBuff;
for (i = 2 * BLOCK_LEN_LONG/16-1; i>=0;--i) {
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
}
TransformBlock (hDecoder, transBuff, START_FLAT_BLOCK, wnd_shape);
srcPtr = transBuff;
destPtr = freqOutPtr;
for (i = BLOCK_LEN_LONG/16-1; i>=0;--i) {
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
}
hDecoder->dolbyShortOffset_t2f = 0;
}
else if (blockType == STOP_TYPE) {
srcPtr = timeInPtr;
destPtr = transBuff;
for (i = 2 * BLOCK_LEN_LONG/16-1; i>=0;--i) {
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
}
TransformBlock (hDecoder, transBuff, STOP_FLAT_BLOCK, wnd_shape);
srcPtr = transBuff;
destPtr = freqOutPtr;
for (i = BLOCK_LEN_LONG/16-1; i>=0;--i) {
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
}
}
srcPtr = freqOutPtr;
destPtr = ffreqOutPtr;
for (i = BLOCK_LEN_LONG/16-1; i>=0;--i) {
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
*destPtr++ = *srcPtr++; *destPtr++ = *srcPtr++;
}
FreeMemory(freqOutPtr);
FreeMemory(transBuff);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -