📄 omxacmp3_requantizesfb_s32_i.c
字号:
if (sfmax < sfBound) { sfmax = sfBound; } /* Fill remaining sfb with intensity pos */ for (sfb = sfBound; sfb < 12; sfb++) { sp = pSfbTableShort [Soff + sfb]; width = pSfbTableShort [Soff + sfb + 1] - sp; i = 3 * sp + win * width; for (fr = 0; fr < width; fr++) { scalFactor = pRScaleFactor[sfb * 3 + win]; if(scalFactor >= 0) { is_pos [i + fr] = scalFactor; } if(id == 1 && scalFactor == 7) { is_pos [i + fr] = -scalFactor; /* Saving negative value indicationg illegal is_pos */ } /* if MPEG1, intensity position is > 7 return error */ armRetArgErrIf(id == 1 && is_pos [i + fr] > 7, OMX_Sts_BadArgErr) } } frlimit = pSfbTableShort [Soff + 13] - pSfbTableShort [Soff + 12]; i = 3 * pSfbTableShort [Soff + 12] + win * frlimit; width = pSfbTableShort [Soff + 12] - pSfbTableShort [Soff + 11]; sp = 3 * pSfbTableShort [Soff + 11] + width * win; for (fr = 0; fr < frlimit; fr++) { is_pos [i + fr] = is_pos [sp]; } } /* change sfbLimit on id*/ if (sfmax <= 3) { if(id !=0) { sfbLimit = 8-1; } else { sfbLimit = 6-1; } for (sfb = sfbLimit,sfBound = 0; sfb >= 0; sfb--) { sp = pSfbTableLong [Loff + sfb]; width = pSfbTableLong [Loff + sfb + 1] - sp; i = pSfbTableLong [Loff + sfb + 1]; for (fr = 0; fr < width; fr++, i--) { if (pSrc [1][i] != 0.0) { /* Got Last Non Zero value */ sfBound = sfb + 1; sfb = -1; fr = width; } } } if(id !=0) { sfbLimit = 8; } else { sfbLimit = 6; } /* Fill remaining sfb with intensity pos */ for (sfb = sfBound; sfb < sfbLimit; sfb++) { i = pSfbTableLong [Loff + sfb]; width = pSfbTableLong [Loff + sfb + 1] - i; for (fr = 0; fr < width; fr++) { scalFactor = pRScaleFactor[sfb]; if(scalFactor >= 0) { is_pos [i + fr] = scalFactor; } if(id == 1 && scalFactor == 7) { is_pos [i + fr] = -scalFactor; /* Saving negative value indicationg illegal is_pos */ } /* if MPEG1, intensity position is > 7 return error */ armRetArgErrIf(id == 1 && is_pos [i + fr] > 7, OMX_Sts_Err) } } } } } else { /* Long Block */ Loff = (samplingFreq + 3 * id) * ARM_MP3_LONG_SFB_TABLE_SZ; i = OMX_MP3_GRANULE_LEN - 1; while (pSrc [1][i] == 0.0) { i--; } sfb = ARM_MP3_LONG_SFB_TABLE_SZ - 1; i++; while (pSfbTableLong [Loff + sfb] >= i) { sfb--; } sfb = sfb + 1; for (; sfb < (ARM_MP3_LONG_SFB_TABLE_SZ - 2); sfb++) { i = pSfbTableLong [Loff + sfb]; fr = pSfbTableLong [Loff + sfb + 1] - i; for (--fr; fr >= 0; fr--) { scalFactor = pRScaleFactor[sfb]; if(scalFactor >= 0) { is_pos [i + fr] = scalFactor; } if(id == 1 && scalFactor == 7) { is_pos [i + fr] = -scalFactor; /* Saving negative value indicationg illegal is_pos */ } /* if MPEG1, intensity position is > 7 return error */ armRetArgErrIf(id == 1 && is_pos [i + fr] > 7, OMX_Sts_Err) } } sp = pSfbTableLong [Loff + ARM_MP3_LONG_SFB_TABLE_SZ - 3]; i = pSfbTableLong [Loff + ARM_MP3_LONG_SFB_TABLE_SZ - 2]; fr = OMX_MP3_GRANULE_LEN - i; for (--fr; fr >= 0; fr--) { is_pos [i + fr] = is_pos [sp]; } } } if (mode != 3) /* not mono */ { /* MPEG 2 intensity stereo case */ if (id == 0 && IStereoFlag) { is_ratio = (sfCompress % 2) ? 0.707106781188 : 0.840896415256; } for (i = 0; i < OMX_MP3_GRANULE_LEN; i++) { if (is_pos [i] < 0)/* If negative do MS based on modeExt */ { if (MSStereoFlag) { /* M/S Stereo */ pDst [0][i] = (pSrc [0][i] + pSrc [1][i]) / ARM_MP3_SQUARROOT; pDst [1][i] = (pSrc [0][i] - pSrc [1][i]) / ARM_MP3_SQUARROOT; } else { /* Normal Stereo/Dual */ pDst [0][i] = pSrc [0][i]; pDst [1][i] = pSrc [1][i]; } } else { if (IStereoFlag) { if (id == 1) { is_ratio = tan (is_pos [i] * PI / 12.0); pDst [0][i] = pSrc [0][i] * is_ratio / (1 + is_ratio); pDst [1][i] = pSrc [0][i] / (1 + is_ratio); } else { /* Check that id==0 */ armAssert(id==0); /* MPEG 2 intensity stereo case */ if (is_pos [i] == 0) { pDst [0][i] = pSrc [0][i]; pDst [1][i] = pSrc [0][i];/* Corrected from pSrc [1][i]; */ } else if((is_pos [i] % 2) == 1) { pDst [0][i] = pSrc [0][i] * pow (is_ratio, (OMX_F64) ((is_pos [i] + 1) / 2)); pDst [1][i] = pSrc [0][i]; /* Corrected from pSrc [1][i]; */ } else { pDst [0][i] = pSrc [0][i]; pDst [1][i] = pSrc [0][i] * pow (is_ratio, (OMX_F64) (is_pos [i] / 2)); /* Corrected from pSrc [1][i]; */ } } } else { /* Error Conditon */ return OMX_Sts_Err; } } } } else { /* Mono */ for (i = 0; i < OMX_MP3_GRANULE_LEN; i++) { pDst [0][i] = pSrc [0][i]; } } return OMX_Sts_NoErr; /* End of Stereo Module */ }/*** Function: armACMP3_Reorder**/static OMXResult armACMP3_Reorder (OMX_F64 *pSrc, OMX_F64 *pDst, OMX_INT winSwitch, OMX_INT blockType, OMX_INT mixedBlock, OMX_INT samplingFreq, OMX_INT id, OMXMP3ScaleFactorBandTableLong pSfbTableLong, OMXMP3ScaleFactorBandTableShort pSfbTableShort){ OMX_S32 Offset; OMX_S32 frstart, frlimit; OMX_S32 i; OMX_S32 sfb = 0; OMX_U32 win; OMX_U32 dstart[3], d, prevd; OMX_S32 sfbLimit; if (winSwitch && blockType == 2) { /* Short Block */ if (mixedBlock) { if(id !=0) { sfbLimit = 8; } else { sfbLimit = 6; } /* Mixed Block */ Offset = (samplingFreq + 3 * id) * ARM_MP3_LONG_SFB_TABLE_SZ; for (i = 0; i < pSfbTableLong [Offset + sfbLimit]; i++) { pDst [i] = pSrc [i]; } sfb = 3; } Offset = (samplingFreq + 3 * id) * ARM_MP3_SHORT_SFB_TABLE_SZ; for (win = 0; win < 3; win++) { dstart[win] = (pSfbTableShort [Offset + sfb] * 3) / 18; } d = (pSfbTableShort [Offset + sfb] * 3) % 18; for (; sfb < 13; sfb++) { frstart = pSfbTableShort [Offset + sfb]; frlimit = pSfbTableShort [Offset + sfb + 1] - frstart; prevd = d; for (win = 0; win < 3; win++) { d = prevd; for (i = 0; i < frlimit; i++, d++) { if (d == 6) { dstart[win] = dstart[win] + 1; d = 0; } pDst [18 * dstart[win] + (win * 6) + d] = pSrc [3 * frstart + (win * frlimit) + i]; } } } } else { /* Long Block */ for (i = 0; i < OMX_MP3_GRANULE_LEN; i++) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -