shithub: aacenc

Download patch

ref: aaf7c645525630b7e298c163b84b42cc89b8e2d8
parent: e0831a18c4ff69f2e676f1e9ce0775ffdaf4571b
author: menno <menno>
date: Wed Jan 5 16:40:18 EST 2000

Removed backward prediction

--- a/aac_back_pred.c
+++ /dev/null
@@ -1,295 +1,0 @@
-/**********************************************************************
-
-This software module was originally developed by
-and edited by Nokia in the course of 
-development of the MPEG-2 NBC/MPEG-4 Audio standard
-ISO/IEC 13818-7, 14496-1,2 and 3. This software module is an
-implementation of a part of one or more MPEG-2 NBC/MPEG-4 Audio tools
-as specified by the MPEG-2 NBC/MPEG-4 Audio standard. ISO/IEC gives
-users of the MPEG-2 NBC/MPEG-4 Audio standards free license to this
-software module or modifications thereof for use in hardware or
-software products claiming conformance to the MPEG-2 NBC/ MPEG-4 Audio
-standards. 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-2
-NBC/MPEG-4 Audio 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-2 NBC/MPEG-4 Audio conforming products. This
-copyright notice must be included in all copies or derivative works.
-
-Copyright (c) 1997.
-**********************************************************************/
-/*********************************************************************
- *
- * aac_back_pred.c  -  AAC backward prediction subroutine
- *
- * Authors:
- * LY    Lin Yin, Nokia Research Center
- * CL    Chuck Lueck, TI <lueck@ti.com>
- * ADD   Alberto Duenas, NDS <alberto@ndsuk.com)
- * JB    Jeremy Bennett, NDS <jbennett@ndsuk.com>
- *
- * Changes:
- * 07-jun-97   LY   Initial revision.
- * 14-sep-97   CL   Made predicted samples array, sb_samples_pred, static.
- *                  Modified line 98 to add these predicted values to
- *                  the last spectrum prior to analysis.
- * 03-dec-97   ADD & JB   Added prediction reset.
- *
-**********************************************************************/
-
-/**********************************************************************
-
-INPUT:
-act_spec[]: the current frame's spectral components to be encoded.
-last_spec[]: the previous frame's quantized spectral error components 
-btype: the current frame's window type
-nsfb: the number of scalefactor bands
-isfb_width[]: scalefactor bandwidth
-
-OUTPUT:
-act_spec[]: the current frame's spectral error components to be encoded
-pred_global_flag: global prediction enable/disable flag
-pred_sbf_glag[]: enable/disable flag for each scalefactor band
-reset_group: number for the reset group => if -1, then no reset
-***********************************************************************/
-
-#include "aac_back_pred.h"
-
-
-int psy_init_mc[MAX_TIME_CHANNELS];
-double dr_mc[MAX_TIME_CHANNELS][LPC+1][FLEN_LONG/2],e_mc[MAX_TIME_CHANNELS][LPC+1+1][FLEN_LONG/2];
-double K_mc[MAX_TIME_CHANNELS][LPC+1][FLEN_LONG/2], R_mc[MAX_TIME_CHANNELS][LPC+1][FLEN_LONG/2];
-double VAR_mc[MAX_TIME_CHANNELS][LPC+1][FLEN_LONG/2], KOR_mc[MAX_TIME_CHANNELS][LPC+1][FLEN_LONG/2];
-double sb_samples_pred_mc[MAX_TIME_CHANNELS][FLEN_LONG/2];
-int thisLineNeedsResetting_mc[MAX_TIME_CHANNELS][FLEN_LONG/2];
-int reset_count_mc[MAX_TIME_CHANNELS];
-
-void PredInit(void)
-{
-	int i;
-	for (i=0;i<MAX_TIME_CHANNELS;i++) {
-		psy_init_mc[i] = 0;
-		reset_count_mc[i] = 0;
-	}
-}
- 
-void PredCalcPrediction( double *act_spec, double *last_spec, int btype, 
-						int nsfb, int *isfb_width, short *pred_global_flag, 
-						int *pred_sfb_flag, int *reset_group ,
-						int chanNum) 
-{
-	int i, k, j, cb_long;
-	double num_bit, snr[SBMAX_L];
-	double energy[FLEN_LONG/2], snr_p[FLEN_LONG/2], temp1, temp2;
-
-	/* Set pointers for specified channel number */
-	/* int psy_init; */
-	int *psy_init;
-	double (*dr)[FLEN_LONG/2],(*e)[FLEN_LONG/2];
-	double (*K)[FLEN_LONG/2], (*R)[FLEN_LONG/2];
-	double (*VAR)[FLEN_LONG/2], (*KOR)[FLEN_LONG/2];
-	double *sb_samples_pred;
-	int *thisLineNeedsResetting;
-	/* int reset_count; */
-	int *reset_count;
-
-	/* psy_init = psy_init_mc[chanNum]; */
-	psy_init = &psy_init_mc[chanNum];
-	dr = &dr_mc[chanNum][0];
-	e = &e_mc[chanNum][0];
-	K = &K_mc[chanNum][0]; 
-	R = &R_mc[chanNum][0];
-	VAR = &VAR_mc[chanNum][0];
-	KOR = &KOR_mc[chanNum][0];
-	sb_samples_pred = &sb_samples_pred_mc[chanNum][0];
-	thisLineNeedsResetting = &thisLineNeedsResetting_mc[chanNum][0];
-	reset_count = &reset_count_mc[chanNum];
-
-	*psy_init = (*psy_init && (btype!=2));
-
-	if((*psy_init) == 0) {
-		for (j=0; j<FLEN_LONG/2; j++) {
-			thisLineNeedsResetting[j]=1;
-		}
-		*psy_init = 1;
-	}
-
-	if (btype==2) {
-		pred_global_flag[0]=0;
-
-		/* As SHORT WINDOWS reset all the co-efficients, the count
-		* must also be reset.
-		*/
-		*reset_count = ((*reset_count) / RESET_FRAME) * RESET_FRAME;
-		return;
-	}
-
-
-
-	/**************************************************/
-	/*  Compute state using last_spec                 */
-	/**************************************************/
-	for (i=0;i<FLEN_LONG/2;i++) 
-    {
-		/* e[0][i]=last_spec[i]; */ 
-		e[0][i]=last_spec[i]+sb_samples_pred[i];
-		
-		for(j=1;j<=LPC;j++)
-			e[j][i] = e[j-1][i]-K[j][i]*R[j-1][i];
-		
-		for(j=1;j<LPC;j++) 
-			dr[j][i] = K[j][i]*e[j-1][i];
-		
-		for(j=1;j<=LPC;j++) {
-			VAR[j][i] = ALPHA*VAR[j][i]+.5*(R[j-1][i]*R[j-1][i]+e[j-1][i]*e[j-1][i]);
-			KOR[j][i] = ALPHA*KOR[j][i]+R[j-1][i]*e[j-1][i];
-		}
-
-		for(j=LPC-1;j>=1;j--) 
-			R[j][i] = A*(R[j-1][i]-dr[j][i]);
-		R[0][i] = A*e[0][i];
-    }
-
-
-	/**************************************************/
-	/* Reset state here if resets were sent           */
-	/**************************************************/
-	for (i=0;i<FLEN_LONG/2;i++) {
-		if (thisLineNeedsResetting[i]) {
-			for (j = 0; j <= LPC; j++)
-			{
-				K[j][i] = 0.0;
-				dr[j][i] = 0.0;
-				e[j][i] = 0.0;
-				R[j][i] = 0.0;
-				VAR[j][i] = 1.0;
-				KOR[j][i] = 0.0;
-			}
-		}
-	}
-
-
-	/**************************************************/
-	/* Compute predictor coefficients, predicted data */
-	/**************************************************/
-	for (i=0;i<FLEN_LONG/2;i++) 
-    {
-		for(j=1;j<=LPC;j++) {
-			if(VAR[j][i]>MINVAR)
-				K[j][i] = KOR[j][i]/VAR[j][i]*B;
-			else
-				K[j][i] = 0;
-		}
-    }
-
-
-	for (k=0; k<FLEN_LONG/2; k++)
-    {
-		sb_samples_pred[k]=0.0;
-		for (i=1; i<=LPC; i++)
-			sb_samples_pred[k]+=K[i][k]*R[i-1][k];
-    }
-
-
-
-	/**************************************************/
-	/* Determine whether to enable/disable prediction */
-	/**************************************************/
-
-	for (k=0; k<FLEN_LONG/2; k++)
-    {
-		energy[k]=act_spec[k]*act_spec[k];
-		snr_p[k]=(act_spec[k]-sb_samples_pred[k])*(act_spec[k]-sb_samples_pred[k]);
-	}
-	
-	cb_long=0;
-	for (i=0; i<nsfb; i++)
-    {
-		pred_sfb_flag[i]=1;
-		temp1=0.0;
-		temp2=0.0;
-		for (j=cb_long; j<cb_long+isfb_width[i]; j++)
-		{
-			temp1+=energy[j];
-			temp2+=snr_p[j];
-		}
-		if(temp2<1.e-20)
-			temp2=1.e-20;
-		if(temp1!=0.0) {
-			snr[i]=-10.*log10((double ) temp2/temp1);
-		} else
-			snr[i]=0.0;
-		if(snr[i]<=0.0) {
-			pred_sfb_flag[i]=0; 
-			for (j=cb_long; j<cb_long+isfb_width[i]; j++)
-				sb_samples_pred[j]=0.0;
-		}
-		cb_long+=isfb_width[i];
-    }
-
-	/* Disable prediction for bands nsfb through SBMAX_L */ 
-	for (i=cb_long;i<FLEN_LONG/2;i++) {
-		sb_samples_pred[i]=0.0;
-	}
-	for (i=nsfb;i<SBMAX_L;i++) {
-		pred_sfb_flag[i]=0;
-	}
-
-	num_bit=0.0;
-	for (i=0; i<nsfb; i++)
-		if(snr[i]>0.0)
-			num_bit+=snr[i]/6.*isfb_width[i];	
-
-	pred_global_flag[0]=1;
-	if(num_bit < 50) {
-		pred_global_flag[0]=0; num_bit=0.0; 
-		for (j=0; j<FLEN_LONG/2; j++)
-			sb_samples_pred[j]=0.0; 
-	}
-	for (j=0; j<FLEN_LONG/2; j++)
-		act_spec[j]-=sb_samples_pred[j];
-
-	/* Code segment added by JB */
-
-	/* Determine whether a prediction reset is required - if so, then
-	* set reset flag for the appropriate group.
-	*/
-	(*reset_count)++;
-	/* Reset the frame counter */
-	for (i=0;i<FLEN_LONG/2;i++) {
-		thisLineNeedsResetting[i]=0;
-	}
-	if (*reset_count >= 31 * RESET_FRAME)
-		*reset_count = RESET_FRAME;
-	if (*reset_count % RESET_FRAME == 0)
-	{ /* Send a reset in this frame */
-		*reset_group = *reset_count / 8;
-
-		for (i = *reset_group - 1; i < FLEN_LONG / 2; i += 30)
-		{
-			thisLineNeedsResetting[i]=1;
-		}
-	}
-	else
-		*reset_group = -1;
-	/* End of code segment */
-
-
-	/* Code segment added by JB */
-
-	/* Ensure that prediction data is sent when there is a prediction
-	* reset.
-	*/
-	if (*reset_group != -1 && pred_global_flag[0] == 0)
-	{
-		pred_global_flag[0] = 1;
-		for (i = 0; i < nsfb; i++)
-			pred_sfb_flag[i] = 0;
-	}
-	/* End of code segment */
-}
--- a/aac_back_pred.h
+++ /dev/null
@@ -1,74 +1,0 @@
-/**********************************************************************
-
-This software module was originally developed by
-and edited by Nokia in the course of 
-development of the MPEG-2 NBC/MPEG-4 Audio standard
-ISO/IEC 13818-7, 14496-1,2 and 3. This software module is an
-implementation of a part of one or more MPEG-2 NBC/MPEG-4 Audio tools
-as specified by the MPEG-2 NBC/MPEG-4 Audio standard. ISO/IEC gives
-users of the MPEG-2 NBC/MPEG-4 Audio standards free license to this
-software module or modifications thereof for use in hardware or
-software products claiming conformance to the MPEG-2 NBC/ MPEG-4 Audio
-standards. 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-2
-NBC/MPEG-4 Audio 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-2 NBC/MPEG-4 Audio conforming products. This
-copyright notice must be included in all copies or derivative works.
-
-Copyright (c) 1997.
-**********************************************************************/
-/*********************************************************************
- *
- * aac_back_pred.c  -  AAC backward prediction subroutine
- *
- * Authors:
- * LY    Lin Yin, Nokia Research Center
- * CL    Chuck Lueck, TI <lueck@ti.com>
- * ADD   Alberto Duenas, NDS <alberto@ndsuk.com>
- * JB    Jeremy Bennett, NDS <jbennett@ndsuk.com>
- *
- * Changes:
- * 07-jun-97   LY   Initial revision.
- * 14-sep-97   CL   Updated ALPHA, A, and B coefficients.
- * 03-dec-97   ADD & JB   Added prediction reset.
- *
-**********************************************************************/
-
-#ifndef _AAC_BACK_H_INCLUDED
-#define _AAC_BACK_H_INCLUDED
-
-#include <math.h>
-#include "interface.h"
-#include "all.h"
-
-#define         FLEN_LONG              2048
-#define         SBMAX_L                49
-#define         LPC                    2
-#define         ALPHA                  PRED_ALPHA
-#define         A                      PRED_A
-#define         B                      PRED_B
-#define         MINVAR                 1.e-10
-
-/* Reset every RESET_FRAME frames. */
-#define		RESET_FRAME 8
- 
-void PredCalcPrediction( double *act_spec, 
-			 double *last_spec, 
-			 int btype, 
-			 int nsfb, 
-			 int *isfb_width, 
-			 short *pred_global_flag, 
-			 int *pred_sfb_flag,
-			 int *reset_group,
-			 int chanNum); 
-
-void PredInit(void);
-
-#endif
-