Mercurial > mplayer.hg
comparison mencoder.c @ 4370:18f73fb0380e
more audiocopy fixes (especially for .asf)
author | arpi |
---|---|
date | Sun, 27 Jan 2002 02:31:06 +0000 |
parents | b768f17c6d36 |
children | a7aa414b1bcf |
comparison
equal
deleted
inserted
replaced
4369:b768f17c6d36 | 4370:18f73fb0380e |
---|---|
764 force_fourcc[2], force_fourcc[3]); | 764 force_fourcc[2], force_fourcc[3]); |
765 printf("Forcing output fourcc to %x [%.4s]\n", | 765 printf("Forcing output fourcc to %x [%.4s]\n", |
766 mux_v->bih->biCompression, (char *)&mux_v->bih->biCompression); | 766 mux_v->bih->biCompression, (char *)&mux_v->bih->biCompression); |
767 } | 767 } |
768 | 768 |
769 if(demuxer->file_format!=DEMUXER_TYPE_AVI) pts_from_bps=0; // it must be 0 for mpeg/asf! | |
770 | |
769 // ============= AUDIO =============== | 771 // ============= AUDIO =============== |
770 if(sh_audio){ | 772 if(sh_audio){ |
771 | 773 |
772 mux_a=aviwrite_new_stream(muxer,AVIWRITE_TYPE_AUDIO); | 774 mux_a=aviwrite_new_stream(muxer,AVIWRITE_TYPE_AUDIO); |
773 | 775 |
778 | 780 |
779 mux_a->codec=out_audio_codec; | 781 mux_a->codec=out_audio_codec; |
780 | 782 |
781 switch(mux_a->codec){ | 783 switch(mux_a->codec){ |
782 case ACODEC_COPY: | 784 case ACODEC_COPY: |
783 if(sh_audio->audio.dwScale){ | |
784 mux_a->h.dwSampleSize=sh_audio->audio.dwSampleSize; | |
785 mux_a->h.dwScale=sh_audio->audio.dwScale; | |
786 mux_a->h.dwRate=sh_audio->audio.dwRate; | |
787 } else { | |
788 mux_a->h.dwSampleSize=1; | |
789 mux_a->h.dwScale=1; | |
790 mux_a->h.dwRate=sh_audio->i_bps; | |
791 } | |
792 if (sh_audio->wf){ | 785 if (sh_audio->wf){ |
793 mux_a->wf=sh_audio->wf; | 786 mux_a->wf=sh_audio->wf; |
787 if(!sh_audio->i_bps) sh_audio->i_bps=mux_a->wf->nAvgBytesPerSec; | |
794 } else { | 788 } else { |
795 mux_a->wf = malloc(sizeof(WAVEFORMATEX)); | 789 mux_a->wf = malloc(sizeof(WAVEFORMATEX)); |
796 mux_a->wf->nBlockAlign = mux_a->h.dwSampleSize; | 790 mux_a->wf->nBlockAlign = 1; //mux_a->h.dwSampleSize; |
797 mux_a->wf->wFormatTag = sh_audio->format; | 791 mux_a->wf->wFormatTag = sh_audio->format; |
798 mux_a->wf->nChannels = sh_audio->channels; | 792 mux_a->wf->nChannels = sh_audio->channels; |
799 mux_a->wf->nSamplesPerSec = sh_audio->samplerate; | 793 mux_a->wf->nSamplesPerSec = sh_audio->samplerate; |
800 mux_a->wf->nAvgBytesPerSec=sh_audio->i_bps; //mux_a->h.dwSampleSize*mux_a->wf->nSamplesPerSec; | 794 mux_a->wf->nAvgBytesPerSec=sh_audio->i_bps; //mux_a->h.dwSampleSize*mux_a->wf->nSamplesPerSec; |
801 mux_a->wf->wBitsPerSample = 16; // FIXME | 795 mux_a->wf->wBitsPerSample = 16; // FIXME |
802 mux_a->wf->cbSize=0; // FIXME for l3codeca.acm | 796 mux_a->wf->cbSize=0; // FIXME for l3codeca.acm |
803 } | 797 } |
804 printf("audiocodec: framecopy (format=%x chans=%d rate=%d bits=%d)\n", | 798 if(sh_audio->audio.dwScale){ |
799 mux_a->h.dwSampleSize=sh_audio->audio.dwSampleSize; | |
800 mux_a->h.dwScale=sh_audio->audio.dwScale; | |
801 mux_a->h.dwRate=sh_audio->audio.dwRate; | |
802 } else { | |
803 mux_a->h.dwSampleSize=mux_a->wf->nBlockAlign; | |
804 mux_a->h.dwScale=mux_a->h.dwSampleSize; | |
805 mux_a->h.dwRate=mux_a->wf->nAvgBytesPerSec; | |
806 } | |
807 printf("audiocodec: framecopy (format=%x chans=%d rate=%d bits=%d bps=%d sample=%d)\n", | |
805 mux_a->wf->wFormatTag, mux_a->wf->nChannels, mux_a->wf->nSamplesPerSec, | 808 mux_a->wf->wFormatTag, mux_a->wf->nChannels, mux_a->wf->nSamplesPerSec, |
806 mux_a->wf->wBitsPerSample); | 809 mux_a->wf->wBitsPerSample, mux_a->wf->nAvgBytesPerSec, mux_a->h.dwSampleSize); |
807 break; | 810 break; |
808 case ACODEC_PCM: | 811 case ACODEC_PCM: |
809 printf("CBR PCM audio selected\n"); | 812 printf("CBR PCM audio selected\n"); |
810 mux_a->h.dwSampleSize=2*sh_audio->channels; | 813 mux_a->h.dwSampleSize=2*sh_audio->channels; |
811 mux_a->h.dwScale=1; | 814 mux_a->h.dwScale=1; |
1126 int len=0; | 1129 int len=0; |
1127 if(mux_a->h.dwSampleSize){ | 1130 if(mux_a->h.dwSampleSize){ |
1128 // CBR - copy 0.5 sec of audio | 1131 // CBR - copy 0.5 sec of audio |
1129 switch(mux_a->codec){ | 1132 switch(mux_a->codec){ |
1130 case ACODEC_COPY: // copy | 1133 case ACODEC_COPY: // copy |
1131 len=sh_audio->i_bps/2; | 1134 len=mux_a->wf->nAvgBytesPerSec/2; |
1132 len/=mux_a->h.dwSampleSize;if(len<1) len=1; | 1135 len/=mux_a->h.dwSampleSize;if(len<1) len=1; |
1133 len*=mux_a->h.dwSampleSize; | 1136 len*=mux_a->h.dwSampleSize; |
1134 len=demux_read_data(sh_audio->ds,mux_a->buffer,len); | 1137 len=demux_read_data(sh_audio->ds,mux_a->buffer,len); |
1135 break; | 1138 break; |
1136 case ACODEC_PCM: | 1139 case ACODEC_PCM: |
1358 // A-V sync! | 1361 // A-V sync! |
1359 if(pts_from_bps){ | 1362 if(pts_from_bps){ |
1360 unsigned int samples=(sh_audio->audio.dwSampleSize)? | 1363 unsigned int samples=(sh_audio->audio.dwSampleSize)? |
1361 ((ds_tell(d_audio)-sh_audio->a_in_buffer_len)/sh_audio->audio.dwSampleSize) : | 1364 ((ds_tell(d_audio)-sh_audio->a_in_buffer_len)/sh_audio->audio.dwSampleSize) : |
1362 (d_audio->pack_no); // <- used for VBR audio | 1365 (d_audio->pack_no); // <- used for VBR audio |
1366 printf("samples=%d \n",samples); | |
1363 a_pts=samples*(float)sh_audio->audio.dwScale/(float)sh_audio->audio.dwRate; | 1367 a_pts=samples*(float)sh_audio->audio.dwScale/(float)sh_audio->audio.dwRate; |
1364 delay_corrected=1; | 1368 delay_corrected=1; |
1365 } else { | 1369 } else { |
1366 // PTS = (last timestamp) + (bytes after last timestamp)/(bytes per sec) | 1370 // PTS = (last timestamp) + (bytes after last timestamp)/(bytes per sec) |
1367 a_pts=d_audio->pts; | 1371 a_pts=d_audio->pts; |