Update of /cvsroot/audacity/audacity-src/src/export In directory sc8-pr-cvs11.sourceforge.net:/tmp/cvs-serv8196/src/export
Modified Files: ExportFFmpeg.cpp Log Message: Reverse bitrate list order for AAC options dialog Retain bitrate choice in AAC options dialog M4A export type (=MP4) Automatically change format name to match the file extension if export type was MP4 Commented-out RA3 as unsupported at the moment Index: ExportFFmpeg.cpp =================================================================== RCS file: /cvsroot/audacity/audacity-src/src/export/ExportFFmpeg.cpp,v retrieving revision 1.19 retrieving revision 1.20 diff -u -d -r1.19 -r1.20 --- ExportFFmpeg.cpp 13 Jul 2008 16:27:32 -0000 1.19 +++ ExportFFmpeg.cpp 14 Jul 2008 09:42:00 -0000 1.20 @@ -108,6 +108,7 @@ FMT_PCMS16LEWAV, FMT_MP3, FMT_MP4, + FMT_M4A, FMT_FLAC, FMT_AC3, FMT_AAC, @@ -118,7 +119,7 @@ FMT_AMRNB, FMT_AMRWB, FMT_WMA2, - FMT_RA3, +// FMT_RA3, FMT_OTHER, FMT_LAST }; @@ -138,7 +139,8 @@ { {FMT_PCMS16LEWAV, wxT("WAV"), wxT("wav"), 255, true,_("WAV Files (FFmpeg)"), CODEC_ID_PCM_S16LE}, {FMT_MP3, wxT("MP3"), wxT("mp3"), 2, true,_("MP3 Files (FFmpeg)"), CODEC_ID_MP3LAME}, - {FMT_MP4, wxT("MP4"), wxT("mp4"), 48, true,_("MP4 (AAC) Files (FFmpeg)"), CODEC_ID_AAC}, + {FMT_MP4, wxT("MP4"), wxT("mp4"), 48, true,_("MP4/MOV/iPOD/PSP/3GP/3G2 (AAC) Files (FFmpeg)"),CODEC_ID_AAC}, + {FMT_M4A, wxT("M4A"), wxT("m4a"), 48, true,_("M4A (AAC) Files (FFmpeg)"), CODEC_ID_AAC}, {FMT_FLAC, wxT("FLAC"), wxT("flac"), 8, true,_("FLAC Files (FFmpeg)"), CODEC_ID_FLAC}, {FMT_AC3, wxT("AC3"), wxT("ac3"), 7, true,_("AC3 Files (FFmpeg)"), CODEC_ID_AC3}, {FMT_AAC, wxT("AAC"), wxT("aac"), 48, true,_("AAC Files (FFmpeg)"), CODEC_ID_AAC}, @@ -147,9 +149,9 @@ {FMT_GSMAIFF, wxT("GSMAIFF"), wxT("aiff"), 1, true,_("GSM-AIFF Files (FFmpeg)"), CODEC_ID_GSM}, {FMT_GSMMSWAV, wxT("GSMWAV"), wxT("wav"), 1, true,_("GSM-WAV (Microsoft) Files (FFmpeg)"), CODEC_ID_GSM_MS}, {FMT_AMRNB, wxT("AMRNB"), wxT("amr"), 1, true,_("AMR (narrow band) Files (FFmpeg)"), CODEC_ID_AMR_NB}, - {FMT_AMRWB, wxT("AMRWB"), wxT("3gp"), 1, true,_("3GP-AMR (wide band) Files (FFmpeg)"), CODEC_ID_AMR_WB}, + {FMT_AMRWB, wxT("AMRWB"), wxT("amr"), 1, true,_("AMR (wide band) Files (FFmpeg)"), CODEC_ID_AMR_WB}, {FMT_WMA2, wxT("WMA"), wxT("wma"), 2, true,_("WMA (version 2) Files (FFmpeg)"), CODEC_ID_WMAV2}, - {FMT_RA3, wxT("RA3"), wxT("ra"), 6, true,_("Real Audio (version 3) Files (FFmpeg)"), CODEC_ID_AC3}, +// {FMT_RA3, wxT("RA3"), wxT("ra"), 6, true,_("Real Audio (version 3) Files (FFmpeg)"), CODEC_ID_AC3}, //until i figure out how to export realplayer-compatible RMs {FMT_OTHER, wxT("FFMPEG"), wxT("ffmpeg"), 255, true,_("Other FFmpeg-Compatible Files"), CODEC_ID_NONE} }; @@ -1247,7 +1249,7 @@ // ExportFFmpegAACOptions Class //---------------------------------------------------------------------------- -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 iAACBitRates[16]; 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 @@ -1315,7 +1317,7 @@ for (unsigned int i=0; i < (sizeof(iAACBitRates)/sizeof(int)); i++) { - iAACBitRates[i] = mbr - i*mbr/((sizeof(iAACBitRates)/sizeof(int))); + iAACBitRates[i] = (i+1)*mbr/((sizeof(iAACBitRates)/sizeof(int))); } for (unsigned int i=0; i < (sizeof(iAACBitRates)/sizeof(int)); i++) @@ -1381,10 +1383,14 @@ long selsr; srchoice->GetString(srchoice->GetSelection()).ToLong(&selsr); wxChoice *choice = (wxChoice*)this->FindWindowById(AACBRChoice); + long selbr; + selbr = choice->GetSelection(); + if (selbr >= 0) + selbr = iAACBitRates[selbr]; unsigned int mbr = MaxAACBitrate(selsr); for (unsigned int i=0; i < (sizeof(iAACBitRates)/sizeof(int)); i++) { - iAACBitRates[i] = mbr - i*mbr/((sizeof(iAACBitRates)/sizeof(int))); + iAACBitRates[i] = (i+1)*mbr/((sizeof(iAACBitRates)/sizeof(int))); } mBitRateNames.Clear(); mBitRateLabels.Clear(); @@ -1393,10 +1399,20 @@ mBitRateNames.Add(wxString::Format(wxT("%i"),iAACBitRates[i]/1024)); mBitRateLabels.Add(iAACBitRates[i]); } + long mindiff = 1024*1024; + long minindex = -1; for (unsigned int i=0; i < (sizeof(iAACBitRates)/sizeof(int)); i++) { choice->SetString(i,mBitRateNames[i]); + //Retain previous choice if possible + if (abs(iAACBitRates[i] - selbr) < mindiff) + { + mindiff = abs(iAACBitRates[i] - selbr); + minindex = i; + } } + if (minindex != -1) + choice->SetSelection(minindex); return; } @@ -1827,10 +1843,11 @@ switch(newfmt) { case FMT_MP4: - AddExtension(wxString(wxT("m4a")),newfmt); - break; - case FMT_RA3: - AddExtension(wxString(wxT("rm")),newfmt); + AddExtension(wxString(wxT("mov")),newfmt); + AddExtension(wxString(wxT("psp")),newfmt); + AddExtension(wxString(wxT("ipod")),newfmt); + AddExtension(wxString(wxT("3gp")),newfmt); + AddExtension(wxString(wxT("3g2")),newfmt); break; case FMT_WMA2: AddExtension(wxString(wxT("asf")),newfmt); @@ -1873,6 +1890,23 @@ AVFormatParameters fpOutFile; + //Black magic - for mp4 format change shortname based on user-provided extension + if (strcmp(shortname,"mp4") == 0) + { + wxFileName fullname(mName); + wxString ext = fullname.GetExt(); + if (ext.CmpNoCase(wxT("mov"))) + shortname = "mov"; + else if (ext.CmpNoCase(wxT("ipod"))) + shortname = "ipod"; + else if (ext.CmpNoCase(wxT("psp"))) + shortname = "psp"; + else if (ext.CmpNoCase(wxT("3gp"))) + shortname = "3gp"; + else if (ext.CmpNoCase(wxT("3g2"))) + shortname = "3g2"; + } + // See if libavformat has modules that can write our output format. If so, mEncFormatDesc // will describe the functions used to write the format (used internally by libavformat) // and the default video/audio codecs that the format uses. @@ -1961,11 +1995,13 @@ mEncAudioCodecCtx->bit_rate = gPrefs->Read(wxT("/FileFormats/MP3BitRate"), 192000); break; case FMT_MP4: + case FMT_M4A: case FMT_AAC: mSampleRate = gPrefs->Read(wxT("/FileFormats/AACSampleRate"), 48000); mEncAudioCodecCtx->bit_rate = gPrefs->Read(wxT("/FileFormats/AACBitRate"), 98000); mEncAudioCodecCtx->bit_rate *= mChannels; mEncAudioCodecCtx->profile = gPrefs->Read(wxT("/FileFormats/AACProfile"),FF_PROFILE_AAC_LOW); + mEncAudioCodecCtx->cutoff = mSampleRate/2; break; case FMT_FLAC: case FMT_OGGFLAC: @@ -1973,7 +2009,7 @@ mEncAudioCodecCtx->compression_level = gPrefs->Read(wxT("/FileFormats/FLACCompression"), 5); break; case FMT_AC3: - case FMT_RA3: +// case FMT_RA3: mSampleRate = gPrefs->Read(wxT("/FileFormats/AC3SampleRate"), 48000); mEncAudioCodecCtx->bit_rate = gPrefs->Read(wxT("/FileFormats/AC3BitRate"), 192000); break; @@ -2354,7 +2390,7 @@ od.ShowModal(); return true; } - else if ((format == FMT_MP4) || (format == FMT_AAC)) + else if ((format == FMT_MP4) || (format == FMT_AAC) || (format == FMT_M4A)) { ExportFFmpegAACOptions od(project); od.ShowModal(); @@ -2366,7 +2402,7 @@ od.ShowModal(); return true; } - else if ((format == FMT_AC3) || (format == FMT_RA3)) + else if ((format == FMT_AC3)/* || (format == FMT_RA3)*/) { ExportFFmpegAC3Options od(project); od.ShowModal(); ------------------------------------------------------------------------- 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