Update of /cvsroot/audacity/audacity-src/src/export In directory sc8-pr-cvs11.sourceforge.net:/tmp/cvs-serv18632/src/export
Modified Files: ExportFFmpeg.cpp Log Message: More (16) bitrates for AAC (cosmetic) 1024 bits in kbit for AAC Add silence at the end of last frame (enabled by default, no pref for that yet) AND try to feed smaller frame at the same time (either it uses smaller frame, or it uses full frame with silence - it is unlikely to break). Index: ExportFFmpeg.cpp =================================================================== RCS file: /cvsroot/audacity/audacity-src/src/export/ExportFFmpeg.cpp,v retrieving revision 1.17 retrieving revision 1.18 diff -u -d -r1.17 -r1.18 --- ExportFFmpeg.cpp 13 Jul 2008 03:49:43 -0000 1.17 +++ ExportFFmpeg.cpp 13 Jul 2008 08:40:21 -0000 1.18 @@ -1247,7 +1247,7 @@ // ExportFFmpegAACOptions Class //---------------------------------------------------------------------------- -static int iAACBitRates[] = { 8*1024, 16*1024, 24*1024, 32*1024, 48*1024, 64*1024, 96*1024, 128*1024, 160*1024, 192*1024, 224*1024 }; +static int iAACBitRates[] = { 4*1024, 8*1024, 16*1024, 24*1024, 32*1024, 40*1024, 48*1024, 56*1024, 64*1024, 72*1024, 80*1024, 96*1024, 128*1024, 160*1024, 192*1024, 224*1024 }; static int iAACSampleRates[] = { 96000,88200,64000,48000,44100,32000,24000,22050,16000,12000,11025,8000,7350 }; static int iAACProfileValues[] = { FF_PROFILE_AAC_LOW, FF_PROFILE_AAC_MAIN, /*FF_PROFILE_AAC_SSR,*/ FF_PROFILE_AAC_LTP }; static const wxChar *iAACProfileNames[] = { _("Low Complexity"), _("Main profile"), /*_("SSR"),*/ _("LTP") }; //SSR is not supported @@ -1320,7 +1320,7 @@ for (unsigned int i=0; i < (sizeof(iAACBitRates)/sizeof(int)); i++) { - mBitRateNames.Add(wxString::Format(wxT("%i"),iAACBitRates[i]/1000)); + mBitRateNames.Add(wxString::Format(wxT("%i"),iAACBitRates[i]/1024)); mBitRateLabels.Add(iAACBitRates[i]); } @@ -1350,7 +1350,7 @@ { S.StartTwoColumn(); { - S.Id(AACBRChoice).TieChoice(_("Bit Rate:"), wxT("/FileFormats/AACBitRate"), + S.Id(AACBRChoice).TieChoice(_("Bit Rate (per channel):"), wxT("/FileFormats/AACBitRate"), 98000, mBitRateNames, mBitRateLabels); S.Id(AACSRChoice).TieChoice(_("Sample Rate:"), wxT("/FileFormats/AACSampleRate"), 44100, mSampleRateNames, mSampleRateLabels); @@ -1390,17 +1390,12 @@ mBitRateLabels.Clear(); for (unsigned int i=0; i < (sizeof(iAACBitRates)/sizeof(int)); i++) { - mBitRateNames.Add(wxString::Format(wxT("%i"),iAACBitRates[i]/1000)); + mBitRateNames.Add(wxString::Format(wxT("%i"),iAACBitRates[i]/1024)); mBitRateLabels.Add(iAACBitRates[i]); } for (unsigned int i=0; i < (sizeof(iAACBitRates)/sizeof(int)); i++) { choice->SetString(i,mBitRateNames[i]); - wxString s = choice->GetString(i); - if (s.Cmp(mBitRateNames[i]) != 0) - { - wxMessageBox(wxT("Err")); - } } return; } @@ -2094,25 +2089,42 @@ int nFifoBytes = FFmpegLibsInst->av_fifo_size(&mEncAudioFifo); // any bytes left in audio FIFO? nEncodedBytes = 0; + int nAudioFrameSizeOut = mEncAudioCodecCtx->frame_size * mEncAudioCodecCtx->channels * sizeof(int16_t); + if (mEncAudioCodecCtx->frame_size == 1) nAudioFrameSizeOut = mEncAudioEncodedBufSiz; // Flush the audio FIFO first if necessary. It won't contain a _full_ audio frame because // if it did we'd have pulled it from the FIFO during the last encodeAudioFrame() call - // the encoder must support short/incomplete frames for this to work. - if (nFifoBytes > 0 && mEncAudioCodecCtx->codec->capabilities & CODEC_CAP_SMALL_LAST_FRAME) + if (nFifoBytes > 0) { - int nFrameSizeTmp = mEncAudioCodecCtx->frame_size; + memset(mEncAudioFifoOutBuf,0,nAudioFrameSizeOut); + AVCodec *codec = mEncAudioCodecCtx->codec; + if ((codec->capabilities & CODEC_CAP_SMALL_LAST_FRAME) + || codec->id == CODEC_ID_FLAC + || mEncAudioCodecCtx->frame_size == 1 + || gPrefs->Read(wxT("/FileFormats/OverrideSmallLastFrame"),(long)1) + ) + { + int nFrameSizeTmp = mEncAudioCodecCtx->frame_size; - // The last frame is going to contain a smaller than usual number of samples. - mEncAudioCodecCtx->frame_size = nFifoBytes / (mEncAudioCodecCtx->channels * sizeof(int16_t)); + // The last frame is going to contain a smaller than usual number of samples. + if (mEncAudioCodecCtx->frame_size != 1) + mEncAudioCodecCtx->frame_size = nFifoBytes / (mEncAudioCodecCtx->channels * sizeof(int16_t)); - wxLogMessage(wxT("FFmpeg : Audio FIFO still contains %d bytes, writing short %d sample frame ..."), - nFifoBytes, mEncAudioCodecCtx->frame_size); + wxLogMessage(wxT("FFmpeg : Audio FIFO still contains %d bytes, writing short %d sample frame ..."), + nFifoBytes, mEncAudioCodecCtx->frame_size); - // Pull the bytes out from the FIFO and feed them to the encoder. - if (FFmpegLibsInst->av_fifo_read(&mEncAudioFifo, mEncAudioFifoOutBuf, nFifoBytes) == 0) - nEncodedBytes = FFmpegLibsInst->avcodec_encode_audio(mEncAudioCodecCtx, mEncAudioEncodedBuf, mEncAudioEncodedBufSiz, (int16_t*)mEncAudioFifoOutBuf); + // Pull the bytes out from the FIFO and feed them to the encoder. + if (FFmpegLibsInst->av_fifo_read(&mEncAudioFifo, mEncAudioFifoOutBuf, nFifoBytes) == 0) + { + if (mEncAudioCodecCtx->frame_size != 1) + nEncodedBytes = FFmpegLibsInst->avcodec_encode_audio(mEncAudioCodecCtx, mEncAudioEncodedBuf, mEncAudioEncodedBufSiz, (int16_t*)mEncAudioFifoOutBuf); + else + nEncodedBytes = FFmpegLibsInst->avcodec_encode_audio(mEncAudioCodecCtx, mEncAudioEncodedBuf, nFifoBytes, (int16_t*)mEncAudioFifoOutBuf); + } - mEncAudioCodecCtx->frame_size = nFrameSizeTmp; // restore the native frame size + mEncAudioCodecCtx->frame_size = nFrameSizeTmp; // restore the native frame size + } } // Now flush the encoder. ------------------------------------------------------------------------- Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW! Studies have shown that voting for your favorite open source project, along with a healthy diet, reduces your potential for chronic lameness and boredom. Vote Now at http://www.sourceforge.net/community/cca08 _______________________________________________ Audacity-cvs mailing list Audacity-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/audacity-cvs