comparison dec_audio.c @ 5206:2ca5a9bfaa98

allow sh_audio struct to be initialized by demuxer, add parsing of mp4 esds header to mov demuxer, init faad from info from mov header
author atmos4
date Tue, 19 Mar 2002 21:48:55 +0000
parents 59df6b778d78
children 6175c9cfab11
comparison
equal deleted inserted replaced
5205:47259a4f3216 5206:2ca5a9bfaa98
326 } 326 }
327 327
328 int init_audio(sh_audio_t *sh_audio){ 328 int init_audio(sh_audio_t *sh_audio){
329 int driver=sh_audio->codec->driver; 329 int driver=sh_audio->codec->driver;
330 330
331 sh_audio->samplesize=2; 331 if(!sh_audio->samplesize)
332 sh_audio->samplesize=2;
333 if(!sh_audio->sample_format)
332 #ifdef WORDS_BIGENDIAN 334 #ifdef WORDS_BIGENDIAN
333 sh_audio->sample_format=AFMT_S16_BE; 335 sh_audio->sample_format=AFMT_S16_BE;
334 #else 336 #else
335 sh_audio->sample_format=AFMT_S16_LE; 337 sh_audio->sample_format=AFMT_S16_LE;
336 #endif 338 #endif
337 sh_audio->samplerate=0; 339 //sh_audio->samplerate=0;
338 //sh_audio->pcm_bswap=0; 340 //sh_audio->pcm_bswap=0;
339 sh_audio->o_bps=0; 341 //sh_audio->o_bps=0;
340 342
341 sh_audio->a_buffer_size=0; 343 sh_audio->a_buffer_size=0;
342 sh_audio->a_buffer=NULL; 344 sh_audio->a_buffer=NULL;
343 345
344 sh_audio->a_in_buffer_len=0; 346 sh_audio->a_in_buffer_len=0;
838 case AFM_AAC: { 840 case AFM_AAC: {
839 unsigned long faac_samplerate, faac_channels; 841 unsigned long faac_samplerate, faac_channels;
840 faacDecConfigurationPtr faac_conf; 842 faacDecConfigurationPtr faac_conf;
841 faac_hdec = faacDecOpen(); 843 faac_hdec = faacDecOpen();
842 844
843 #if 0 845 #if 1
844 /* Set the default object type and samplerate */ 846 /* Set the default object type and samplerate */
845 /* This is useful for RAW AAC files */ 847 /* This is useful for RAW AAC files */
846 faac_conf = faacDecGetCurrentConfiguration(faac_hdec); 848 faac_conf = faacDecGetCurrentConfiguration(faac_hdec);
847 if(sh_audio->samplerate) 849 if(sh_audio->samplerate)
848 faac_conf->defSampleRate = sh_audio->samplerate; 850 faac_conf->defSampleRate = sh_audio->samplerate;
849 /* XXX: is outputFormat samplesize of compressed data or samplesize of 851 /* XXX: FAAD support FLOAT output, how do we handle
850 * decoded data, maybe upsampled? Also, FAAD support FLOAT output, 852 * that (FAAD_FMT_FLOAT)? ::atmos
851 * how do we handle that (FAAD_FMT_FLOAT)? ::atmos 853 */
852 */
853 if(sh_audio->samplesize) 854 if(sh_audio->samplesize)
854 switch(sh_audio->samplesize){ 855 switch(sh_audio->samplesize){
855 case 1: // 8Bit 856 case 1: // 8Bit
856 mp_msg(MSGT_DECAUDIO,MSGL_WARN,"FAAD: 8Bit samplesize not supported by FAAD, assuming 16Bit!\n"); 857 mp_msg(MSGT_DECAUDIO,MSGL_WARN,"FAAD: 8Bit samplesize not supported by FAAD, assuming 16Bit!\n");
857 default: 858 default:
863 break; 864 break;
864 case 4: // 32Bit 865 case 4: // 32Bit
865 faac_conf->outputFormat = FAAD_FMT_32BIT; 866 faac_conf->outputFormat = FAAD_FMT_32BIT;
866 break; 867 break;
867 } 868 }
868 faac_conf->defObjectType = LTP; // => MAIN, LC, SSR, LTP available. 869 //faac_conf->defObjectType = LTP; // => MAIN, LC, SSR, LTP available.
869 870
870 faacDecSetConfiguration(faac_hdec, faac_conf); 871 faacDecSetConfiguration(faac_hdec, faac_conf);
871 #endif 872 #endif
872 873
873 if(faac_buffer == NULL) 874 if(faac_buffer == NULL)
885 } else { 886 } else {
886 mp_msg(MSGT_DECAUDIO,MSGL_V,"FAAD: Decoder init done (%dBytes)!\n", faac_bytesconsumed); // XXX: remove or move to debug! 887 mp_msg(MSGT_DECAUDIO,MSGL_V,"FAAD: Decoder init done (%dBytes)!\n", faac_bytesconsumed); // XXX: remove or move to debug!
887 mp_msg(MSGT_DECAUDIO,MSGL_V,"FAAD: Negotiated samplerate: %dHz channels: %d\n", faac_samplerate, faac_channels); 888 mp_msg(MSGT_DECAUDIO,MSGL_V,"FAAD: Negotiated samplerate: %dHz channels: %d\n", faac_samplerate, faac_channels);
888 sh_audio->channels = faac_channels; 889 sh_audio->channels = faac_channels;
889 sh_audio->samplerate = faac_samplerate; 890 sh_audio->samplerate = faac_samplerate;
890 sh_audio->i_bps = 128*1000/8; // XXX: HACK!!! There's currently no way to get bitrate from libfaad2! ::atmos 891 if(!sh_audio->i_bps) {
892 mp_msg(MSGT_DECAUDIO,MSGL_WARN,"FAAD: compressed input bitrate missing, assuming 128kbit/s!\n");
893 sh_audio->i_bps = 128*1000/8; // XXX: HACK!!! There's currently no way to get bitrate from libfaad2! ::atmos
894 } else
895 mp_msg(MSGT_DECAUDIO,MSGL_V,"FAAD: got %dkbit/s rate from MP4 header!\n",sh_audio->i_bps*8/1000);
891 } 896 }
892 897
893 } break; 898 } break;
894 #endif 899 #endif
895 900