comparison mencoder.c @ 6534:fce6f98eb72e

fixed mono mp3 encoding, hint by Paul Ortyl
author alex
date Sun, 23 Jun 2002 19:09:25 +0000
parents f8d544dd22e9
children 896c062e85ec
comparison
equal deleted inserted replaced
6533:52f8bde27fea 6534:fce6f98eb72e
714 mux_a->h.dwRate=force_srate?force_srate:sh_audio->samplerate; 714 mux_a->h.dwRate=force_srate?force_srate:sh_audio->samplerate;
715 mux_a->h.dwScale=(mux_a->h.dwRate<32000)?576:1152; // samples/frame 715 mux_a->h.dwScale=(mux_a->h.dwRate<32000)?576:1152; // samples/frame
716 if(sizeof(MPEGLAYER3WAVEFORMAT)!=30) mp_msg(MSGT_MENCODER,MSGL_WARN,"sizeof(MPEGLAYER3WAVEFORMAT)==%d!=30, maybe broken C compiler?\n",sizeof(MPEGLAYER3WAVEFORMAT)); 716 if(sizeof(MPEGLAYER3WAVEFORMAT)!=30) mp_msg(MSGT_MENCODER,MSGL_WARN,"sizeof(MPEGLAYER3WAVEFORMAT)==%d!=30, maybe broken C compiler?\n",sizeof(MPEGLAYER3WAVEFORMAT));
717 mux_a->wf=malloc(sizeof(MPEGLAYER3WAVEFORMAT)); // should be 30 717 mux_a->wf=malloc(sizeof(MPEGLAYER3WAVEFORMAT)); // should be 30
718 mux_a->wf->wFormatTag=0x55; // MP3 718 mux_a->wf->wFormatTag=0x55; // MP3
719 mux_a->wf->nChannels=(lame_param_mode == 3) ? 1 : sh_audio->channels; 719 mux_a->wf->nChannels= sh_audio->channels;
720 mux_a->wf->nSamplesPerSec=force_srate?force_srate:sh_audio->samplerate; 720 mux_a->wf->nSamplesPerSec=force_srate?force_srate:sh_audio->samplerate;
721 mux_a->wf->nAvgBytesPerSec=192000/8; // FIXME! 721 mux_a->wf->nAvgBytesPerSec=192000/8; // FIXME!
722 mux_a->wf->nBlockAlign=(mux_a->h.dwRate<32000)?576:1152; // required for l3codeca.acm + WMP 6.4 722 mux_a->wf->nBlockAlign=(mux_a->h.dwRate<32000)?576:1152; // required for l3codeca.acm + WMP 6.4
723 mux_a->wf->wBitsPerSample=0; //16; 723 mux_a->wf->wBitsPerSample=0; //16;
724 // from NaNdub: (requires for l3codeca.acm) 724 // from NaNdub: (requires for l3codeca.acm)
852 int len=dec_audio(sh_audio,tmp,2304); 852 int len=dec_audio(sh_audio,tmp,2304);
853 if(len<=0) break; // eof 853 if(len<=0) break; // eof
854 /* mono encoding, a bit tricky */ 854 /* mono encoding, a bit tricky */
855 if (mux_a->wf->nChannels == 1) 855 if (mux_a->wf->nChannels == 1)
856 { 856 {
857 len = lame_encode_buffer(lame, tmp, tmp, len/4, 857 len = lame_encode_buffer(lame, tmp, tmp, len/2,
858 mux_a->buffer+mux_a->buffer_len, mux_a->buffer_size-mux_a->buffer_len); 858 mux_a->buffer+mux_a->buffer_len, mux_a->buffer_size-mux_a->buffer_len);
859 } 859 }
860 else 860 else
861 { 861 {
862 len=lame_encode_buffer_interleaved(lame, 862 len=lame_encode_buffer_interleaved(lame,
873 // printf("[%d]\n",mp_mp3_get_lsf(mux_a->buffer)); 873 // printf("[%d]\n",mp_mp3_get_lsf(mux_a->buffer));
874 while(mux_a->buffer_len<len){ 874 while(mux_a->buffer_len<len){
875 unsigned char tmp[2304]; 875 unsigned char tmp[2304];
876 int len=dec_audio(sh_audio,tmp,2304); 876 int len=dec_audio(sh_audio,tmp,2304);
877 if(len<=0) break; // eof 877 if(len<=0) break; // eof
878 len=lame_encode_buffer_interleaved(lame, 878 /* mono encoding, a bit tricky */
879 if (mux_a->wf->nChannels == 1)
880 {
881 len = lame_encode_buffer(lame, tmp, tmp, len/2,
882 mux_a->buffer+mux_a->buffer_len, mux_a->buffer_size-mux_a->buffer_len);
883 }
884 else
885 {
886 len=lame_encode_buffer_interleaved(lame,
879 tmp,len/4, 887 tmp,len/4,
880 mux_a->buffer+mux_a->buffer_len,mux_a->buffer_size-mux_a->buffer_len); 888 mux_a->buffer+mux_a->buffer_len,mux_a->buffer_size-mux_a->buffer_len);
889 }
881 if(len<0) break; // error 890 if(len<0) break; // error
882 mux_a->buffer_len+=len; 891 mux_a->buffer_len+=len;
883 } 892 }
884 break; 893 break;
885 #endif 894 #endif