⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dolby_adapt.c

📁 MPEG-4编解码的实现(包括MPEG4视音频编解码)
💻 C
📖 第 1 页 / 共 2 页
字号:
            *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 + -