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 ----------------------------------*/
/*============================================================================*/