📄 son_gc_modifier.c
字号:
/*******************************************************************This software module was originally developed byYoshiaki Oikawa (Sony Corporation) andMitsuyuki Hatanaka (Sony Corporation)and edited byTakashi Koike (Sony Corporation)in the course of development of the MPEG-2 NBC/MPEG-4 System/MPEG-4Video/MPEG-4 Audio standard ISO/IEC 13818-7, 14496-1,2 and 3. Thissoftware module is an implementation of a part of one or more MPEG-2NBC/MPEG-4 System/MPEG-4 Video/MPEG-4 Audio tools as specified by theMPEG-2 NBC/MPEG-4 System/MPEG-4 Video/MPEG-4 Audio standard. ISO/IECgives users of the MPEG-2 NBC/MPEG-4 System/MPEG-4 Video/MPEG-4 Audiostandards free license to this software module or modificationsthereof for use in hardware or software products claiming conformanceto the MPEG-2 NBC/MPEG-4 System/MPEG-4 Video/MPEG-4 Audiostandards. Those intending to use this software module in hardware orsoftware products are advised that this use may infringe existingpatents. The original developer of this software module and his/hercompany, the subsequent editors and their companies, and ISO/IEC haveno liability for use of this software module or modifications thereofin an implementation. Copyright is not released for non MPEG-2NBC/MPEG-4 System/MPEG-4 Video/MPEG-4 Audio conforming products.Theoriginal developer retains full right to use the code for his/her ownpurpose, assign or donate the code to a third party and to inhibitthird party from using the code for non MPEG-2 NBC/MPEG-4System/MPEG-4 Video/MPEG-4 Audio conforming products. This copyrightnotice must be included in all copies or derivative works.Copyright (C) 1996.*******************************************************************/#include <stdlib.h>#include <stdio.h>#include "buffersHandle.h" /* handler, defines, enums */#include "resilienceHandle.h" /* handler, defines, enums */#include "tf_mainHandle.h" /* handler, defines, enums */#include "sony_local.h"void son_gainc_window(int, GAINC, GAINC, GAINC, double *, int);void son_gc_modifier_sub( double input[], GAINC *g_infoCh[], int block_size_samples, int window_sequence, int ch, int band, double output[] ){ /* This parameter will be removed outside */ static GAINC g_info_prev[MAX_TIME_CHANNELS][NBANDS]; int i, j; double *work_buf; double *a_gcwind; work_buf = input; a_gcwind = (double *)calloc(block_size_samples/NBANDS*2, sizeof(double)); switch(window_sequence){ case ONLY_LONG_SEQUENCE: son_gainc_window(block_size_samples/NBANDS*2, g_info_prev[ch][band], g_infoCh[band][0], g_infoCh[band][0], a_gcwind, window_sequence); for (j = 0; j < block_size_samples/NBANDS*2; j++) { output[j] = work_buf[j]/a_gcwind[j]; } g_info_prev[ch][band] = g_infoCh[band][0]; break; case EIGHT_SHORT_SEQUENCE: for (i = 0; i < SHORT_WIN_IN_LONG; i++) { son_gainc_window( block_size_samples/SHORT_WIN_IN_LONG/NBANDS*2, g_info_prev[ch][band], g_infoCh[band][i], g_infoCh[band][i], a_gcwind, window_sequence); for (j = 0; j < block_size_samples/SHORT_WIN_IN_LONG/NBANDS*2; j++) { output[j+block_size_samples/SHORT_WIN_IN_LONG/NBANDS*2*i] = work_buf[j+block_size_samples/NBANDS*7/16+i*block_size_samples/SHORT_WIN_IN_LONG/NBANDS]/a_gcwind[j]; } g_info_prev[ch][band] = g_infoCh[band][i]; } break; case LONG_START_SEQUENCE: son_gainc_window(block_size_samples/NBANDS*2, g_info_prev[ch][band], g_infoCh[band][0], g_infoCh[band][1], a_gcwind, window_sequence); for (j = 0; j < block_size_samples/NBANDS*2; j++) { output[j] = work_buf[j]/a_gcwind[j]; } g_info_prev[ch][band] = g_infoCh[band][1]; break; case LONG_STOP_SEQUENCE: son_gainc_window(block_size_samples/NBANDS*2, g_info_prev[ch][band], g_infoCh[band][0], g_infoCh[band][1], a_gcwind, window_sequence); for (j = 0; j < block_size_samples/NBANDS*2; j++) { output[j] = work_buf[j]/a_gcwind[j]; } g_info_prev[ch][band] = g_infoCh[band][1]; break; default: fprintf(stderr, "gc_modifier: ERROR! Illegal Window Type \n"); exit(0); break; } free(a_gcwind);}void son_gc_modifier( double *bandSigChForGCAnalysis[], GAINC *g_infoCh[], int block_size_samples, int window_sequence, int ch, double *bandSigChWithGC[] ){ int i; for (i = 0; i < NBANDS; i++) { son_gc_modifier_sub(bandSigChForGCAnalysis[i], g_infoCh, block_size_samples, window_sequence, ch, i, bandSigChWithGC[i]); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -