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

📄 hvxcuvextgendec.c

📁 MPEG2/MPEG4编解码参考程序(实现了MPEG4的部分功能)
💻 C
字号:
/*This software module was originally developed by    Masayuki Nishiguchi and Kazuyuki Iijima (Sony Corporation)    and edited by    Akira Inoue (Sony Corporation)    in the course of development of the MPEG-4 Audio standard (ISO/IEC 14496-3).    This software module is an implementation of a part of one or more    MPEG-4 Audio (ISO/IEC 14496-3) tools as specified by the MPEG-4 Audio    standard (ISO/IEC 14496-3).    ISO/IEC gives users of the MPEG-4 Audio standards (ISO/IEC 14496-3)    free license to this software module or modifications thereof for use    in hardware or software products claiming conformance to the MPEG-4    Audio standards (ISO/IEC 14496-3).    Those intending to use this software module in hardware or software    products are advised that this use may infringe existing patents.    The original developer of this software module and his/her company,    the subsequent editors and their companies, and ISO/IEC have no    liability for use of this software module or modifications thereof in    an implementation.    Copyright is not released for non MPEG-4 Audio (ISO/IEC 14496-3)    conforming products. The original developer retains full right to use    the code for his/her own purpose, assign or donate the code to a third    party and to inhibit third party from using the code for non MPEG-4    Audio (ISO/IEC 14496-3) conforming products.    This copyright notice must be included in all copies or derivative works.    Copyright (c)1996.*/#include <stdio.h>#include <math.h>#include "hvxc.h"#include "hvxcDec.h"#include "hvxcCommon.h"static float       w_celp_up[SAMPLE-OVERLAP+LD_LEN]; static float       w_celp_down[SAMPLE-OVERLAP+LD_LEN]; #define	 TR_UP 	 	30.#define	 TR_DOWN 	30.void IPC_make_w_celp(void)	{    int	i;    int	st1,st2;        st1=(FRM)/2;    st2=st1 + (int) TR_UP;        for(i=0;i<st1;i++)        w_celp_up[i]=0.;    for(i=st1;i<st2;i++)	w_celp_up[i]=(float)(i-st1+1)/(float)TR_UP;    for(i=st2;i<(FRM);i++)	w_celp_up[i]=1.;    /* for short delay mode decode */    for(i=FRM;i<FRM+LD_LEN;i++)        w_celp_up[i]=1.;        st1 = (int) ((FRM)/2 - TR_DOWN);    st2 = (FRM)/2;        for(i=0;i<st1;i++)	w_celp_down[i]=1.;    for(i=st1;i<st2;i++)	w_celp_down[i]=1. - (float)(i-st1)/(float)TR_DOWN;    for(i=st2;i<(FRM);i++)	w_celp_down[i]=0.;    /* for short delay mode decode */    for(i=FRM;i<FRM+LD_LEN;i++)	w_celp_down[i]=0.;}void IPC_uvExt(int *vuv, float *suv, float *qRes,HvxcDecStatus *HDS)	/* in: pointer to decoder status(AI 990129) */{    int i;    int v_uv = 0;    float uv_celp[FRM+LD_LEN];    /* static float old_qRes[FRM/2]; */        if(vuv[0] ==0 && vuv[1] ==0)	v_uv=0;    if(vuv[0] ==0 && vuv[1] !=0)	v_uv=1;    if(vuv[0] !=0 && vuv[1] ==0)	v_uv=2;    if(vuv[0] !=0 && vuv[1] !=0)	v_uv=3;    for(i=0;i<FRM/2;i++)	uv_celp[i] = HDS->old_qRes[i];    for(i=FRM/2;i<FRM;i++)	uv_celp[i] = qRes[i-FRM/2];    for(i=0;i<FRM/2;i++)  	HDS->old_qRes[i] = qRes[i+FRM/2];    if(HDS->decDelayMode == DM_SHORT)    {	for(i=FRM;i<FRM+LD_LEN;i++)	    uv_celp[i]= qRes[i-FRM/2];		if(v_uv == 0)	{	    for(i=0;i<FRM;i++)		suv[i]=uv_celp[i+LD_LEN];	}	else if(v_uv == 1)	{	    for(i=0;i<FRM;i++)		suv[i]=uv_celp[i+LD_LEN] * w_celp_down[i+LD_LEN];	}	else if(v_uv == 2)	{	    for(i=0;i<FRM;i++)		suv[i]=uv_celp[i+LD_LEN] * w_celp_up[i+LD_LEN];	}	else	{	    for(i=0;i<FRM;i++)		suv[i]=0. ;	}    }    else    {	if(v_uv == 0)	{	    for(i=0;i<FRM;i++)		suv[i]=uv_celp[i]; 	}	else if(v_uv == 1)	{	    for(i=0;i<FRM;i++)		suv[i]=uv_celp[i] * w_celp_down[i];	}	else if(v_uv == 2)	{	    for(i=0;i<FRM;i++)		suv[i]=uv_celp[i] * w_celp_up[i];	}	else	{	    for(i=0;i<FRM;i++)		suv[i]=0. ; 	}    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -