www.pudn.com > SMV_Code.rar > lib_io.c


/*=========================================================================*/ 
/* Each of the companies; Ericsson, Lucent, Mindspeed, Motorola, Nokia,    */ 
/* Nortel Networks, and Qualcomm (hereinafter referred to individually as  */ 
/* “Source” or collectively as “Sources”) do hereby state:                 */ 
/*                                                                         */ 
/* To the extent to which the Source(s) may legally and freely do so,      */ 
/* the Source(s), upon submission of a Contribution, grant(s) a free,      */ 
/* irrevocable, non-exclusive, license to the Third Generation Partnership */ 
/* Project 2 (3GPP2) and its Organizational Partners: ARIB, CCSA, TIA,     */ 
/* TTA, and TTC, under the Source’s copyright or copyright license rights  */ 
/* in the Contribution, to, in whole or in part, copy, make derivative     */ 
/* works, perform, display and distribute the Contribution and derivative  */ 
/* works thereof consistent with 3GPP2’s and each Organizational Partner’s */ 
/* policies and procedures, with the right to (i) sublicense the foregoing */ 
/* rights consistent with 3GPP2’s and each Organizational Partner’s        */ 
/* policies and procedures and (ii) copyright and sell, if applicable) in  */ 
/* 3GPP2's name or each Organizational Partner’s name any 3GPP2 or         */ 
/* transposed Publication even though this Publication may contain the     */ 
/* Contribution or a derivative work thereof.  The Contribution shall      */ 
/* disclose any known limitations on the Source’s rights to license as     */ 
/* herein provided.                                                        */ 
/*                                                                         */ 
/* When a Contribution is submitted by the Source(s) to assist the         */ 
/* formulating groups of 3GPP2 or any of its Organizational Partners,      */ 
/* it is proposed to the Committee as a basis for discussion and is not    */ 
/* to be construed as a binding proposal on the Source(s).  The Source(s)  */ 
/* specifically reserve(s) the right to amend or modify the material       */ 
/* contained in the Contribution. Nothing contained in the Contribution    */ 
/* shall, except as herein expressly provided, be construed as conferring  */ 
/* by implication, estoppel or otherwise, any license or right under       */ 
/* (i) any existing or later issuing patent, whether or not the use of     */ 
/* information in the document necessarily employs an invention of any     */ 
/* existing or later issued patent, (ii) any copyright, (iii) any          */ 
/* trademark, or (iv) any other intellectual property right.               */ 
/*                                                                         */ 
/* With respect to the Software necessary for the practice of any or all   */ 
/* Normative portions of the Selectable Mode Vocoder (SMV) as it exists on */ 
/* the date of submittal of this form, should the SMV be approved as a     */ 
/* Specification or Report by 3GPP2, or as a transposed Standard by any of */ 
/* the 3GPP2’s Organizational Partners, the Source(s) state(s) that a      */ 
/* worldwide license to reproduce, use and distribute the Software, the    */ 
/* license rights to which are held by the Source(s), will be made         */ 
/* available to applicants under terms and conditions that are reasonable  */ 
/* and non-discriminatory, which may include monetary compensation,        */ 
/* and only to the extent necessary for the practice of any or all of the  */ 
/* Normative portions of the SMV or the field of use of practice of the    */ 
/* SMV Specification, Report, or Standard.  The statement contained above  */ 
/* is irrevocable and shall be binding upon the Source(s).  In the event   */ 
/* the rights of the Source(s) in and to copyright or copyright license    */ 
/* rights subject to such commitment are assigned or transferred,          */ 
/* the Source(s) shall notify the assignee or transferee of the existence  */ 
/* of such commitments.                                                    */ 
/*=========================================================================*/ 
/*                                                                   */ 
/*-------------------------------------------------------------------*/ 
/*===================================================================*/ 
/* LIBRARY: lib_io.c                                                 */ 
/*-------------------------------------------------------------------*/ 
/* PURPOSE : Library of INPUT/OUTPUT fonctions.                      */ 
/*===================================================================*/ 
 
/*----------------------------------------------------------------------------*/ 
/*-------------------------------- INCLUDE -----------------------------------*/ 
/*----------------------------------------------------------------------------*/ 
 
#include "typedef.h" 
 
#include "main.h" 
#include "const.h" 
 
#include "mcutil.h" 
 
#include "lib_io.h" 
#include "lib_swb.h" 
 
/*----------------------------------------------------------------------------*/ 
/*-------------------------------- FUNCTIONS ---------------------------------*/ 
/*----------------------------------------------------------------------------*/ 
 
/*===================================================================*/ 
/* FUNCTION       :  IO_readsamples ().                              */ 
/*-------------------------------------------------------------------*/ 
/* PURPOSE        :  This function reads one block from the input    */ 
/*                   file.                                           */ 
/*-------------------------------------------------------------------*/ 
/* INPUT ARGUMENTS  :                                                */ 
/*            _ (FILE *)     file_x: input file.                     */ 
/*            _ (INT32)      N:      number of samples to be         */ 
/*                                   extracted.                      */ 
/*-------------------------------------------------------------------*/ 
/* OUTPUT ARGUMENTS :                                                */ 
/*            _ (FLOAT64 []) x:      extracted frame.                */ 
/*            _ (INT16   [])  s_x:   extrac. frame short format.     */ 
/*-------------------------------------------------------------------*/ 
/* INPUT/OUTPUT ARGUMENTS :                                          */ 
/*                    _ None.                                        */ 
/*-------------------------------------------------------------------*/ 
/* RETURN ARGUMENTS :                                                */ 
/*                    _ None.                                        */ 
/*===================================================================*/ 
 
INT32	IO_readsamples (FILE *file_x, INT16 s_x[], FLOAT64 x [], INT32 N) 
	{ 
	 /*-------------------------------------------------------------------*/ 
 
	 INT32	rd_samp, i, r_val; 
 
	 /*-------------------------------------------------------------------*/ 
 
	 rd_samp = fread(s_x, sizeof(INT16), N, file_x); 
 
	 /*-------------------------------------------------------------------*/ 
 
	 if (rd_samp > 0) 
		{ 
		 for(i = 0; i < N; i++) 
		 	{ 
 
#ifdef BYTE_SWAP_INPUT 
 
			 s_x[i] = byte_swap_int16(s_x[i]);			  
#endif 
 
			 x [i] = (FLOAT64) s_x[i]; 
			} 
 
		  r_val =  rd_samp; 
		} 
	 else 
		r_val =  0; 
	 
	 /*-------------------------------------------------------------------*/ 
 
	 return	r_val; 
	  
	 /*-------------------------------------------------------------------*/ 
	} 
 
/*----------------------------------------------------------------------------*/ 
 
/*===================================================================*/ 
/* FUNCTION       :  IO_writesamples ().                             */ 
/*-------------------------------------------------------------------*/ 
/* PURPOSE        :  This function write one block into the output   */ 
/*                   file.                                           */ 
/*-------------------------------------------------------------------*/ 
/* INPUT ARGUMENTS  :                                                */ 
/*            _ (FILE *)     file_y: output file.                    */ 
/*            _ (INT32)      N:      number of samples to write.     */ 
/*            _ (FLOAT64 []) y:      output frame.                   */ 
/*-------------------------------------------------------------------*/ 
/* OUTPUT ARGUMENTS :                                                */ 
/*            _ (INT16  [])  s_y:    output frame short format.      */ 
/*-------------------------------------------------------------------*/ 
/* INPUT/OUTPUT ARGUMENTS :                                          */ 
/*                    _ None.                                        */ 
/*-------------------------------------------------------------------*/ 
/* RETURN ARGUMENTS :                                                */ 
/*                    _ None.                                        */ 
/*===================================================================*/ 
 
INT32	IO_writesamples (FILE *file_y, FLOAT64 y [], INT16 s_y[], INT32 N) 
	{ 
	 /*-------------------------------------------------------------------*/ 
	  
	 INT32 i, wt_samp; 
	 FLOAT64 tmp; 
 
	 /*-------------------------------------------------------------------*/ 
 
	 for (i = 0; i < N; i++) 
	 	{ 
		 tmp = y[i]; 
		  
		 if(tmp >= 0.0)  
		 	tmp += 0.5; 
		 else 
			tmp -= 0.5; 
			 
		 if(tmp > 32767.0)  
			tmp = 32767.0; 
			 
		 if(tmp < -32768.) 
		 	tmp = -32768.; 
 
		 if((INT16)tmp < 0.0)  
			s_y[i] = (INT16)tmp + 2; 
		 else 
			s_y[i] = (INT16)tmp; 
 
#ifdef BYTE_SWAP_OUTPUT 
 
		 s_y[i] = byte_swap_int16(s_y[i]); 
#endif 
 
		} 
		 
	 wt_samp = fwrite(s_y, sizeof(INT16), N, file_y); 
 
	 /*-------------------------------------------------------------------*/ 
	  
#ifdef VERBOSE 
	 if (wt_samp != N) 
	 	 nrerror("Error Writing output Samples!"); 
#endif 
	  
	 /*-------------------------------------------------------------------*/ 
	  
	 return	wt_samp; 
	 
	 /*-------------------------------------------------------------------*/ 
	} 
 
/*----------------------------------------------------------------------------*/ 
 
/*============================================================================*/ 
/*------------------------------------- END ----------------------------------*/ 
/*============================================================================*/