?? common.c
字號(hào):
fr_ps->sblimit = pick_table (fr_ps); else fr_ps->sblimit = SBLIMIT; if (hdr->mode == MPG_MD_JOINT_STEREO) fr_ps->jsbound = js_bound (hdr->lay, hdr->mode_ext); else fr_ps->jsbound = fr_ps->sblimit;}/* interpret data in hdr str to fields in fr_ps */void mc_hdr_to_frps (frame_params *fr_ps){ layer *hdr = fr_ps->header; /* (or pass in as arg?) */ if (fr_ps->header->surround == 3) /* second stereo program */ if (fr_ps->header->center == 1 || fr_ps->header->center == 3) { fr_ps->mc_channel = 3; /* 3 + 2 */ fr_ps->alloc_bits = 2; /* 2 bits for tc_alloc */ fr_ps->dyn_cross_bits = 1; fr_ps->pred_mode = 2; /* FdB for prediction 3/0 */ } else { fr_ps->mc_channel = 2; /* 2 + 2 or 1 + 2 */ fr_ps->alloc_bits = 0; /* 0 bits for tc_alloc */ fr_ps->dyn_cross_bits = 0; fr_ps->pred_mode = 5; /* FdB for prediction 2/0 */ } else if (fr_ps->header->surround == 2) /* stereo surround */ if (fr_ps->header->center == 1 || fr_ps->header->center == 3) { fr_ps->mc_channel = 3; /* 3 mc-channels 3/2 */ fr_ps->alloc_bits = 3; /* 3 bits for tc_alloc */ fr_ps->dyn_cross_bits = 4; fr_ps->pred_mode = 0; /* 7/4/95 R.S. for prediction 3/2 */ } else { fr_ps->mc_channel = 2; /* 2 mc-channels 2/2 */ fr_ps->alloc_bits = 2; /* 2 bits for tc_alloc */ fr_ps->dyn_cross_bits = 3; fr_ps->pred_mode = 3; /* 7/4/95 R.S. for prediction 2/2 */ } else if (fr_ps->header->surround == 1) /* mono surround */ if (fr_ps->header->center == 1 || fr_ps->header->center == 3) { fr_ps->mc_channel = 2; /* 3/1 */ fr_ps->alloc_bits = 3; /* 3 bits for tc_alloc */ fr_ps->dyn_cross_bits = 3; fr_ps->pred_mode = 1; /* 7/4/95 R.S. for prediction 3/1 */ } else { fr_ps->mc_channel = 1; /* 2/1 */ fr_ps->alloc_bits = 2; /* 2 bits for tc_alloc */ fr_ps->dyn_cross_bits = 1; fr_ps->pred_mode = 4; /* 7/4/95 R.S. for prediction 2/1 */ } else /* no surround */ if (fr_ps->header->center == 1 || fr_ps->header->center == 3) { fr_ps->mc_channel = 1; /* 3/0 */ fr_ps->alloc_bits = 2; /* 2 bits for tc_alloc */ fr_ps->dyn_cross_bits = 1; fr_ps->pred_mode = 2; /* 3/0 */ } else { fr_ps->mc_channel = 0; /* 2/0 or 1/0 */ fr_ps->alloc_bits = 0; /* 2 bits for tc_alloc */ fr_ps->dyn_cross_bits = 0; fr_ps->pred_mode = 5; /* FdB for prediction 2/0 */ } if ( (hdr->no_of_multi_lingual_ch>0) && (hdr->multi_lingual_layer>0) ) { fprintf (stderr, "MultiLingual not in Layer 2!\n exit.\n"); exit (1); } if (fr_ps->mc_channel > 0 || hdr->lfe || hdr->no_of_multi_lingual_ch > 0) mc_pick_table (fr_ps);}void WriteHdr(frame_params *fr_ps, FILE *s){layer *info = fr_ps->header; fprintf(s, "HDR: s=FFF, id=%X, l=%X, ep=%X, br=%X, sf=%X, pd=%X, ", info->version, info->lay, !info->error_protection, info->bitrate_index, info->sampling_frequency, info->padding); fprintf(s, "pr=%X, m=%X, js=%X, c=%X, o=%X, e=%X\n", info->extension, info->mode, info->mode_ext, info->copyright, info->original, info->emphasis); fprintf(s, "layer=%s, MPEG1-bitrate=%d, sfrq=%.1f, mode=%s, ", layer_names[info->lay-1],Bitrate=bitrate[info->lay-1][info->bitrate_index], S_freq=s_freq[info->sampling_frequency], mode_names[info->mode]); fprintf(s, "sblim=%d, jsbd=%d, MPEG1-ch=%d\n", fr_ps->sblimit, fr_ps->jsbound, fr_ps->stereo); fflush(s);}/********************************************************************************* Allocate number of bytes of memory equal to "block".********************************************************************************/void *mem_alloc(unsigned long block, char *item){void *ptr;#ifdef MACINTOSH ptr = NewPtr(block);#endif#ifdef MSDOS ptr = (void *)_fmalloc((unsigned int)block); /* far memory, 92-07-08 sr */#endif#if ! defined (MACINTOSH) && ! defined (MSDOS) ptr = (void *) malloc(block);#endif if (ptr != NULL){#ifdef MSDOS _fmemset(ptr, 0, (unsigned int)block); /* far memory, 92-07-08 sr */#else memset(ptr, 0, block);#endif } else{ fprintf (stderr, "Unable to allocate %s\n", item); exit (1); } return(ptr);}/****************************************************************************** Free memory pointed to by "*ptr_addr".******************************************************************************/void mem_free(void **ptr_addr){ if (*ptr_addr != NULL){#ifdef MACINTOSH DisposPtr(*ptr_addr);#else free(*ptr_addr);#endif *ptr_addr = NULL; }}/****************************************************************************** Routines to convert between the Apple SANE extended floating point format* and the IEEE double precision floating point format. These routines are* called from within the Audio Interchange File Format (AIFF) routines.******************************************************************************//**** Apple's 80-bit SANE extended has the following format: 1 15 1 63+-+-------------+-+-----------------------------+|s| e |i| f |+-+-------------+-+-----------------------------+ msb lsb msb lsbThe value v of the number is determined by these fields as follows:If 0 <= e < 32767, then v = (-1)^s * 2^(e-16383) * (i.f).If e == 32767 and f == 0, then v = (-1)^s * (infinity), regardless of i.If e == 32767 and f != 0, then v is a NaN, regardless of i.*** IEEE Draft Standard 754 Double Precision has the following format:MSB+-+---------+-----------------------------+|1| 11 Bits | 52 Bits |+-+---------+-----------------------------+ ^ ^ ^ | | | Sign Exponent Mantissa*//******************************************************************************* double_to_extended()** Purpose: Convert from IEEE double precision format to SANE extended* format.** Passed: Pointer to the double precision number and a pointer to what* will hold the Apple SANE extended format value.** Outputs: The SANE extended format pointer will be filled with the* converted value.** Returned: Nothing.******************************************************************************/void double_to_extended(double *pd, char ps[10]){#ifdef MACINTOSH x96tox80(pd, (extended *) ps);#else/* fixed bus alignment error, HP 27-may-93 */register unsigned long top2bits;register unsigned short *ps2;register IEEE_DBL *p_dbl;register SANE_EXT *p_ext;SANE_EXT ext_align;char *c_align;int i; p_dbl = (IEEE_DBL *) pd; p_ext = &ext_align; top2bits = p_dbl->hi & 0xc0000000L; p_ext->l1 = ((p_dbl->hi >> 4) & 0x3ff0000L) | top2bits; p_ext->l1 |= ((p_dbl->hi >> 5) & 0x7fffL) | 0x8000L; p_ext->l2 = (p_dbl->hi << 27) & 0xf8000000L; p_ext->l2 |= ((p_dbl->lo >> 5) & 0x07ffffffL); ps2 = (unsigned short *) & (p_dbl->lo); ps2++; p_ext->s1 = (*ps2 << 11) & 0xf800; c_align = (char *) p_ext; for (i=0;i<10;i++) ps[i] = c_align[i];#endif}/******************************************************************************* extended_to_double()** Purpose: Convert from SANE extended format to IEEE double precision* format.** Passed: Pointer to the Apple SANE extended format value and a pointer* to what will hold the the IEEE double precision number.** Outputs: The IEEE double precision format pointer will be filled with* the converted value.** Returned: Nothing.******************************************************************************/void extended_to_double(char ps[10], double *pd){#ifdef MACINTOSH x80tox96((extended *) ps, pd);#else/* fixed bus alignment error, HP 27-may-93 */register unsigned long top2bits;register IEEE_DBL *p_dbl;register SANE_EXT *p_ext;SANE_EXT ext_align;char *c_align;int i; p_dbl = (IEEE_DBL *) pd; p_ext = &ext_align; c_align = (char *) p_ext; for (i=0;i<10;i++) c_align[i] = ps[i]; top2bits = p_ext->l1 & 0xc0000000L; p_dbl->hi = ((p_ext->l1 << 4) & 0x3ff00000L) | top2bits; p_dbl->hi |= (p_ext->l1 << 5) & 0xffff0L; p_dbl->hi |= (p_ext->l2 >> 27) & 0x1f; p_dbl->lo = (p_ext->l2 << 5) & 0xffffffe0L; p_dbl->lo |= (unsigned long) ((p_ext->s1 >> 11) & 0x1f);#endif}/******************************************************************************* Read Audio Interchange File Format (AIFF) headers.******************************************************************************/int aiff_read_headers(FILE *file_ptr, IFF_AIFF *aiff_ptr, int *byte_per_sample){register char i;register long seek_offset;char temp_sampleRate[10];char *dummy;char holder;Chunk FormChunk;CommonChunk CommChunk;SoundDataChunk SndDChunk;identifier ident; if (fseek(file_ptr, 0, SEEK_SET) != 0) return(-1); if (fread(&FormChunk, sizeof(Chunk), 1, file_ptr) != 1) return(-1);#ifdef MSDOS holder = FormChunk.ckID[0]; FormChunk.ckID[0] = FormChunk.ckID[3]; FormChunk.ckID[3] = holder; holder = FormChunk.ckID[1]; FormChunk.ckID[1] = FormChunk.ckID[2]; FormChunk.ckID[2] = holder;/* fixed bug in next line, HP 27-may-93 */ holder = FormChunk.formType[0]; FormChunk.formType[0] = FormChunk.formType[3]; FormChunk.formType[3] = holder; holder = FormChunk.formType[1]; FormChunk.formType[1] = FormChunk.formType[2]; FormChunk.formType[2] = holder; FormChunk.ckSize = _lrotl(FormChunk.ckSize, 8);#endif/* fixed bug in next line, HP 27-may-93 */ if (strncmp(FormChunk.ckID,IFF_ID_FORM,4) != 0 || strncmp(FormChunk.formType,IFF_ID_AIFF,4) != 0) return(-1); /* warning: different levels of indirection.7/8/92.sr*/ if (fread(&ident,sizeof(identifier), 1, file_ptr) != 1) return(-1);#ifdef MSDOS holder = ident.name[0]; ident.name[0] = ident.name[3]; ident.name[3] = holder; holder = ident.name[1]; ident.name[1] = ident.name[2]; ident.name[2] = holder; ident.ck_length = _lrotl(ident.ck_length, 8);#endif/* fixed bug in next line, HP 27-may-93 */ while(strncmp(ident.name,IFF_ID_COMM,4) != 0) { dummy = calloc( ident.ck_length, sizeof(char));/* changed "fread( &dummy," to "fread ( dummy,", HP 26-may-93 */ if(fread( dummy, ident.ck_length, 1, file_ptr) != 1) return(-1); free(dummy);/* fixed bug in next line, HP 27-may-93 */ if(fread( &ident, sizeof(identifier),1, file_ptr) != 1) return(-1);#ifdef MSDOS holder = ident.name[0]; ident.name[0] = ident.name[3]; ident.name[3] = holder; holder = ident.name[1]; ident.name[1] = ident.name[2]; ident.name[2] = holder; ident.ck_length = _lrotl(ident.ck_length, 8);#endif } for( i = 0; i < 4; ++i) CommChunk.ckID[i] = ident.name[i]; CommChunk.ckSize = ident.ck_length; if (fread(&CommChunk.numChannels, sizeof(short), 1, file_ptr) != 1) return(-1); if (fread(&CommChunk.numSampleFrames, sizeof(unsigned long), 1, file_ptr) != 1) return(-1); if (fread(&CommChunk.sampleSize, sizeof(short), 1, file_ptr) != 1) return(-1); if (fread(CommChunk.sampleRate, sizeof(char[10]), 1, file_ptr) != 1) return(-1);#ifdef MSDOS CommChunk.sampleSize = _rotl(CommChunk.sampleSize, 8); CommChunk.ckSize = _lrotl(CommChunk.ckSize, 8); CommChunk.numChannels = _rotl(CommChunk.numChannels, 8); CommChunk.numSampleFrames = _lrotl(CommChunk.numSampleFrames, 8);#endif *byte_per_sample = ceil((double)CommChunk.sampleSize / 8); for (i = 0; i < sizeof(char[10]); i++) temp_sampleRate[i] = CommChunk.sampleRate[i]; extended_to_double(temp_sampleRate, &aiff_ptr->sampleRate);/* to start the search again from the beginning, HP 27-may-93 */ fseek (file_ptr, sizeof(Chunk), SEEK_SET); if (fread(&ident, sizeof(identifier), 1, file_ptr) != 1) return(-1);#ifdef MSDOS holder = ident.name[0]; ident.name[0] = ident.name[3]; ident.name[3] = holder; holder = ident.name[1]; ident.name[1] = ident.name[2]; ident.name[2] = holder; ident.ck_length = _lrotl(ident.ck_length, 8);#endif/* fixed bug in next line, HP 27-may-93 */
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -