📄 musicout.c
字号:
frameBits += bs_ext.totbits; if (!sync) { fprintf(stderr, "Extension frame cannot be located, end of input stream\n"); exit (1); } while (bs_ext.curpos < bs_ext.totbits) bs_mc.bits[bs_mc.totbits++] = bs_ext.bits[bs_ext.curpos++]; } for (i=0; i < channels; i++) for (j=0; j < SBLIMIT; j++) if (I_bit_alloc[0][i][j] > 0) bit_alloc[i][j] = I_bit_alloc[0][i][j]; else if (I_bit_alloc[1][i][j] > 0) bit_alloc[i][j] = I_bit_alloc[1][i][j]; else if (I_bit_alloc[2][i][j] > 0) bit_alloc[i][j] = I_bit_alloc[2][i][j]; else bit_alloc[i][j] = 0; } } else if (info.lay == 2 ) { layer_I_frames = 3; bitsPerSlot = 8; samplesPerFrame = 1152; ch_start = 0; channels = stereo; II_decode_bitalloc (&bs_mpg, &fr_ps, bit_alloc, bits_log); II_decode_scale (&bs_mpg, &fr_ps, scfsi, bit_alloc, scale_index, &ch_start, &channels, scfsi_log); if (error_protection) { II_CRC_calc(&fr_ps, bit_alloc, scfsi, &new_crc); if (new_crc != old_crc) { printf(" \n ERROR in LAYER 2 - CRC! \n"); crc_error_count++; total_error_count++; recover_CRC_error (*pcm_sample, crc_error_count, &fr_ps, musicout, &sample_frames, channels); } else crc_error_count = 0; } clip = 0; for (i=0;i<12;i++) { II_buffer_sample (&bs_mpg, &fr_ps, (*sample), bit_alloc);if (!any_log){ II_dequantize_sample ((*sample), bit_alloc, *fraction, &fr_ps, &i); II_denormalize_sample (*fraction, scale_index, &fr_ps, i>>2, &i);} } /* end of for loop */ if (mpeg > 1) { while (bs_mpg.curpos < bs_mpg.totbits) bs_mc.bits[bs_mc.totbits++] = bs_mpg.bits[bs_mpg.curpos++]; mc_header (&bs_mc, &fr_ps); mc_hdr_to_frps (&fr_ps); bs_mc.totbits -= fr_ps.header->n_ad_bytes * 8; if (fr_ps.header->ext_bit_stream_present) { sync = seek_sync_ext (&bs_ext, &fr_ps); frameBits += bs_ext.totbits; if (!sync) { fprintf(stderr, "Extension frame cannot be located, end of input stream\n"); exit (1); } while (bs_ext.curpos < bs_ext.totbits) bs_mc.bits[bs_mc.totbits++] = bs_ext.bits[bs_ext.curpos++]; } } } /**********************************************************/ /* multichannel - decoding */ /* 7.07.93 Susanne Ritscher */ /* 13.10.93 Ralf Schwalbe */ /* 30.05.94 Ralf Schwalbe */ /**********************************************************/ if (rate_log) printf ("frame: %5d bitrate: %8.3f kbps\n", frameNum, frameBits * S_freq / samplesPerFrame); else if (mpeg >= 2) { if ( (frameNum==1) && (fr_ps.header->no_of_multi_lingual_ch>0) ) { /*frameNum==1 NOT frameNum==0*/ if (fr_ps.header->no_of_multi_lingual_ch>7) { printf("\n\n***Warning. There are %d multilingual channels.\n", fr_ps.header->no_of_multi_lingual_ch); printf (" This decoder supports only upto 7 channels.\n\n"); } printf("There are %d multilingual channels, coded at ",fr_ps.header->no_of_multi_lingual_ch); if (fr_ps.header->multi_lingual_fs==0) printf("full"); else printf("half"); printf(" sampling rate.\n They are outputted in \"%s\".\n",decoded_file_name_ml); if ((musicout_ml = fopen(decoded_file_name_ml, "w+b")) == NULL) { fprintf (stderr, "***Error. Could not create \"%s\".\nExit\n", decoded_file_name_ml); exit (1); } if(need_aiff) { printf("Multilingual file written in AIFF format\n"); if (aiff_seek_to_sound_data (musicout_ml) == -1) { fprintf (stderr, "Could not seek to ML PCM sound data in \"%s\".\n", decoded_file_name_ml); exit (1); } } } mc_channel = fr_ps.mc_channel; crc_error_count_mc = 0; buffer_CRC (&bs_mc, &old_crc); /* read CRC - check from header */ mc_composite_status_info (&bs_mc, &fr_ps, tca_log, dynx_log); if (frameNum == 1) if (info.lfe) printf ("mc-channel=%d, MPEG2-ext-length=%d kbit/s lfe-channel present\n", mc_channel, (int) (info.ext_length * s_freq[info.sampling_frequency] / 144)); else printf ("mc-channel=%d, MPEG2-ext-length=%d kbit/s\n", mc_channel, (int) (info.ext_length * s_freq[info.sampling_frequency] / 144)); /* Achtung: fr_ps.jsbound = 27; wird in Abh鋘gikeit von fs gesetzt*/ ch_start = stereo; channels = stereo + mc_channel; /* decoding bitallocation's */ II_decode_bitalloc_mc (&bs_mc, &fr_ps, bit_alloc, &ch_start, &channels, bits_log); II_decode_scale (&bs_mc, &fr_ps, scfsi, bit_alloc, scale_index, &ch_start, &channels, scfsi_log); /* mandatory CRC check is set */ if (crc_check) { mc_error_check (&fr_ps, bit_alloc, scfsi, &new_crc, ch_start, channels); if (new_crc != old_crc) { crc_error_count_mc++; total_error_count_mc++; for (i = 0; i < SBLIMIT; i ++) for (ii = ch_start; ii < channels; ++ii) bit_alloc[ii][i] = 0; printf ("\nERROR in MC-CRC -> mc frame can't be decoded !\n"); } else crc_error_count_mc = 0; } /* endif crc_check */ clip = 0; for (i = 0; i < 12; i++) { II_buffer_sample_mc (&bs_mc, &fr_ps, (*sample), bit_alloc, ch_start, channels, i);if (!any_log){ II_dequantize_sample_mc ((*sample), bit_alloc, *fraction, &fr_ps, ch_start, channels, &i); II_denormalize_sample_mc (*fraction, scale_index, &fr_ps, i>>2, ch_start, channels, &i);} } /* 10/31/95 Ralf Schwalbe LFE */ if( info.lfe ) { if(lfe_init) { f = strlen (encoded_file_name) - 4; strcpy (lfe_file_name, encoded_file_name); strcpy (&lfe_file_name[f], DFLT_OPEXT_LFE); if ((lfe = fopen (lfe_file_name, "w+b")) == NULL) { fprintf (stderr, "Could not create \"%s\".\n",lfe_file_name ); exit (1); } if (need_aiff) { printf ("LFE file written in AIFF format\n"); if (aiff_seek_to_sound_data (lfe) == -1) { fprintf (stderr, "Could not seek to LFE PCM sound data in \"%s\".\n", lfe_file_name); exit (1); } } } lfe_init = 0; /* R.S. only one time */ II_lfe_calc(&fr_ps); }/*********************************************************************//* JMZ 09/03/1995 Multilingual , WtK 7/8/95 */ if (info.no_of_multi_lingual_ch>0) { /* SWKim060695 add the condion with 32, 44.1kHz case */ if (info.sampling_frequency == 1) fr_ps.jsbound = 27; else fr_ps.jsbound = 30; m = info.no_of_multi_lingual_ch; II_decode_bitalloc_ml (&bs_mc, &fr_ps, bit_alloc_ml, &m); II_decode_scale_ml (&bs_mc, &fr_ps, scfsi_ml, bit_alloc_ml, scale_index_ml, &m); clip = 0; for (i=0; i< ( (info.multi_lingual_fs==0) ? 12 : 6 ); i++) /* ngr : n_of_granules loop */ { II_buffer_sample_ml (&bs_mc, &fr_ps, (*sample_ml), bit_alloc_ml, &m);if (!any_log){ II_dequantize_sample_ml ((*sample_ml), bit_alloc_ml, *fraction_ml, &fr_ps, &m, &i); II_denormalize_sample_ml (*fraction_ml, scale_index_ml, &fr_ps, ( (info.multi_lingual_fs==0) ? (i>>2) : (i>>1) ), &m, &i);} for (k = 0; k < info.no_of_multi_lingual_ch; k++) for (ii = 0; ii < 3; ii++) for (j = 0; j < 32; j++) sym_sample_ml[i][k][ii][j] = (*sample_ml)[k][ii][j]; } }/* JMZ 09/03/1995 Multilingual *//*********************************************************************/#ifdef Augmentation_7ch if (mpeg == 3) if (stereo != 2 || fr_ps.header->surround != 2 || fr_ps.header->center == 0) { /* no 3/2 mode */ printf ("WARNING: Stream does not contain 5/2 info\n"); printf (" Continue decoding of MPEG2 MC part\n"); mpeg = 2; } if (mpeg == 3) { crc_error_count_aug = 0; mc_aug_composite_status_info (&bs_mc, &fr_ps, tca_log, dynx_log); buffer_CRC (&bs_mc, &old_crc); /* read CRC - check from header */ /* Achtung: fr_ps.jsbound = 27; wird in Abh鋘gikeit von fs gesetzt*/ ch_start = 5; channels = 7; /* decoding bitallocation's */ II_decode_bitalloc_aug (&bs_mc, &fr_ps, bit_alloc, &ch_start, &channels, bits_log); II_decode_scale (&bs_mc, &fr_ps, scfsi, bit_alloc, scale_index, &ch_start, &channels, scfsi_log); /* mandatory CRC check is set */ if (crc_check) { mc_aug_error_check(&fr_ps, bit_alloc, scfsi, &new_crc); if (new_crc != old_crc) { crc_error_count_aug++; total_error_count_aug++; for( i = 0; i < SBLIMIT; i ++) for(ii = ch_start; ii < channels; ++ii) bit_alloc[ii][i] = 0; printf("ERROR in MC-AUG-CRC -> mc aug frame can't be decoded !\n"); } else crc_error_count_aug = 0; } /* endif crc_check */ clip = 0; for (i=0;i<12;i++) { II_buffer_sample_aug (&bs_mc, &fr_ps, (*sample), bit_alloc, i);if (!any_log){ II_dequantize_sample_aug ((*sample), bit_alloc, *fraction, &fr_ps, &i); II_denormalize_sample_aug (*fraction, scale_index, &fr_ps, i>>2, &i);} } } /* endif mpeg == 3 */#endif if (info.mc_prediction_on) for (k=0; k<2; k++) for (ii=0; ii<8; ii++) { for (j=0; j<PREDDEL; j++) (*pred_buf)[k][ii][j] = (*pred_buf)[k][ii][j+36]; for (j =0; j <3; j++) for (jj=0;jj<12;jj++) (*pred_buf)[k][ii][PREDDEL+j+3*jj] = (*fraction)[k][ii][j][jj]; } /* prediction & dematricing MPEG2 part */if (!any_log) if (crc_error_count_mc == 0) dematricing_mc (*fraction, &fr_ps, *pred_buf);#ifdef Augmentation_7ch if (mpeg == 3) {if (!any_log) if (crc_error_count_aug == 0) { dematricing_aug (*fraction, &fr_ps); denormalizing_aug (*fraction, &fr_ps); } } else#endif if (crc_error_count_mc == 0) denormalizing_mc (*fraction, &fr_ps, channels); } /* endif mpeg >= 2 */if (!any_log) for (jj=0;jj<4*layer_I_frames;jj++) for (k=0; k < channels; k++) for (j =0; j <3; j++) for (ii=0; ii< SBLIMIT; ii++) (*fraction_help)[jj][k][j][ii] = (*fraction)[k][ii][j][jj];if (!any_log) for (i=0;i<4*layer_I_frames;i++) { for (j=0;j<3;j++) for (k=0; k < channels; k++) clip += SubBandSynthesis (&((*fraction_help)[i][k][j][0]), k, &((*pcm_sample)[k][j][0])); out_fifo (*pcm_sample, 3, &fr_ps, done, musicout, &sample_frames, channels); } /* 31/10/95 Ralf Schwalbe LFE output */if (!any_log) if (info.lfe) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -