Add ultra-insane CBR 320kbit mp3 quality
[ardour.git] / libs / ardour / export_formats.cc
index 642f05a2280a2f20e63ad75ab8d9d500b97ed069..b6c090652c9c1ebce974416041ef360121df6b32 100644 (file)
@@ -33,6 +33,13 @@ ExportFormat::has_sample_format ()
        return dynamic_cast<HasSampleFormat *> (this);
 }
 
+bool
+ExportFormat::has_codec_quality ()
+{
+       return dynamic_cast<HasCodecQuality *> (this);
+}
+
+
 bool
 ExportFormat::sample_format_is_compatible (SampleFormat format) const
 {
@@ -192,6 +199,7 @@ ExportFormatLinear::ExportFormatLinear (string name, FormatId format_id) :
        add_sample_rate (SR_48);
        add_sample_rate (SR_88_2);
        add_sample_rate (SR_96);
+       add_sample_rate (SR_176_4);
        add_sample_rate (SR_192);
        add_sample_rate (SR_Session);
 
@@ -263,9 +271,16 @@ ExportFormatOggVorbis::ExportFormatOggVorbis ()
        add_sample_rate (SR_48);
        add_sample_rate (SR_88_2);
        add_sample_rate (SR_96);
+       add_sample_rate (SR_176_4);
        add_sample_rate (SR_192);
        add_sample_rate (SR_Session);
 
+       /* these are 100 vorbis_encode_init_vbr() quality */
+       add_codec_quality ("Low (0)",           0);
+       add_codec_quality ("Default (4)",      40);
+       add_codec_quality ("High (6)",         60);
+       add_codec_quality ("Very High (10)",  100);
+
        add_endianness (E_FileDefault);
 
        set_extension ("ogg");
@@ -303,6 +318,7 @@ ExportFormatFLAC::ExportFormatFLAC () :
        add_sample_rate (SR_48);
        add_sample_rate (SR_88_2);
        add_sample_rate (SR_96);
+       add_sample_rate (SR_176_4);
        add_sample_rate (SR_192);
        add_sample_rate (SR_Session);
 
@@ -337,6 +353,7 @@ ExportFormatBWF::ExportFormatBWF () :
        add_sample_rate (SR_48);
        add_sample_rate (SR_88_2);
        add_sample_rate (SR_96);
+       add_sample_rate (SR_176_4);
        add_sample_rate (SR_192);
        add_sample_rate (SR_Session);
 
@@ -361,4 +378,54 @@ ExportFormatBWF::set_compatibility_state (ExportFormatCompatibility const & comp
        return compatible;
 }
 
+
+/*** FFMPEG Pipe ***/
+
+ExportFormatFFMPEG::ExportFormatFFMPEG (std::string const& name, std::string const& ext)
+{
+       set_name (name);
+       set_format_id (F_FFMPEG);
+       sample_formats.insert (SF_Float);
+
+       add_sample_rate (SR_8);
+       add_sample_rate (SR_22_05);
+       add_sample_rate (SR_44_1);
+       add_sample_rate (SR_48);
+       add_sample_rate (SR_Session);
+
+       add_endianness (E_Little);
+
+       add_codec_quality ("VBR 220-260 kb/s",  0);
+       add_codec_quality ("VBR 190-250 kb/s", -1);
+       add_codec_quality ("VBR 170-210 kb/s", -2);
+       add_codec_quality ("VBR 150-195 kb/s", -3);
+       add_codec_quality ("VBR 140-185 kb/s", -4);
+       add_codec_quality ("VBR 120-150 kb/s", -5);
+       add_codec_quality ("VBR 100-130 kb/s", -6);
+       add_codec_quality ("VBR 80-120 kb/s",  -7);
+       add_codec_quality ("VBR 70-105 kb/s",  -8);
+       add_codec_quality ("VBR 45-85 kb/s",   -9);
+       /*  Available CBR options are:
+        *  8, 16, 24, 32, 40, 48, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320
+        */
+       add_codec_quality ("CBR  64 kb/s",     64);
+       add_codec_quality ("CBR 128 kb/s",    128);
+       add_codec_quality ("CBR 160 kb/s",    160);
+       add_codec_quality ("CBR 192 kb/s",    192);
+       add_codec_quality ("CBR 256 kb/s",    256);
+       add_codec_quality ("CBR 320 kb/s",    320);
+
+       set_extension (ext);
+       set_quality (Q_LossyCompression);
+}
+
+bool
+ExportFormatFFMPEG::set_compatibility_state (ExportFormatCompatibility const & compatibility)
+{
+       bool compatible = compatibility.has_format (F_FFMPEG);
+       set_compatible (compatible);
+       return compatible;
+}
+
+
 }; // namespace ARDOUR