From 474f8bc37623f48f7e69dff57aee233c99f6d07c Mon Sep 17 00:00:00 2001 From: Sakari Bergen Date: Mon, 29 Sep 2008 10:02:35 +0000 Subject: Made Export format compatibility checking a bit more robust git-svn-id: svn://localhost/ardour2/branches/3.0@3829 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/ardour/export_formats.h | 10 ++++----- libs/ardour/export_format_manager.cc | 8 +++---- libs/ardour/export_formats.cc | 42 +++++++++++++++++------------------- 3 files changed, 29 insertions(+), 31 deletions(-) diff --git a/libs/ardour/ardour/export_formats.h b/libs/ardour/ardour/export_formats.h index 34227526fc..fc6dc0a5f7 100644 --- a/libs/ardour/ardour/export_formats.h +++ b/libs/ardour/ardour/export_formats.h @@ -26,11 +26,15 @@ #include #include +#include namespace ARDOUR { -class HasSampleFormat; +class ExportFormatIncompatible : public failed_constructor { + public: + virtual const char *what() const throw() { return "Export format constructor failed: Format incompatible with system"; } +}; /// Base class for formats class ExportFormat : public ExportFormatBase, public ExportFormatBase::SelectableCompatible { @@ -170,8 +174,6 @@ class ExportFormatOggVorbis : public ExportFormat { ExportFormatOggVorbis (); ~ExportFormatOggVorbis () {}; - static bool check_system_compatibility (); - bool set_compatibility_state (ExportFormatCompatibility const & compatibility); Type get_type () const { return T_Sndfile; } SampleFormat get_explicit_sample_format () const { return SF_Vorbis; } @@ -183,8 +185,6 @@ class ExportFormatFLAC : public ExportFormat, public HasSampleFormat { ExportFormatFLAC (); ~ExportFormatFLAC () {}; - static bool check_system_compatibility (); - bool set_compatibility_state (ExportFormatCompatibility const & compatibility); Type get_type () const { return T_Sndfile; } diff --git a/libs/ardour/export_format_manager.cc b/libs/ardour/export_format_manager.cc index a1d1b72629..2a41a8b150 100644 --- a/libs/ardour/export_format_manager.cc +++ b/libs/ardour/export_format_manager.cc @@ -185,15 +185,15 @@ ExportFormatManager::init_formats () fl_ptr->set_extension ("raw"); add_format (f_ptr); - if (ExportFormatOggVorbis::check_system_compatibility()) { + try { f_ptr.reset (new ExportFormatOggVorbis ()); add_format (f_ptr); - } + } catch (ExportFormatIncompatible & e) {} - if (ExportFormatFLAC::check_system_compatibility()) { + try { f_ptr.reset (new ExportFormatFLAC ()); add_format (f_ptr); - } + } catch (ExportFormatIncompatible & e) {} } void diff --git a/libs/ardour/export_formats.cc b/libs/ardour/export_formats.cc index f3c8f7197c..9e77bb2f1d 100644 --- a/libs/ardour/export_formats.cc +++ b/libs/ardour/export_formats.cc @@ -234,6 +234,16 @@ ExportFormatLinear::set_compatibility_state (ExportFormatCompatibility const & c ExportFormatOggVorbis::ExportFormatOggVorbis () { + /* Check system compatibility */ + + SF_INFO sf_info; + sf_info.channels = 2; + sf_info.samplerate = SR_44_1; + sf_info.format = F_Ogg | SF_Vorbis; + if (sf_format_check (&sf_info) != SF_TRUE) { + throw ExportFormatIncompatible(); + } + set_name ("Ogg Vorbis"); set_format_id (F_Ogg); sample_formats.insert (SF_Vorbis); @@ -251,17 +261,6 @@ ExportFormatOggVorbis::ExportFormatOggVorbis () set_quality (Q_LossyCompression); } -bool -ExportFormatOggVorbis::check_system_compatibility () -{ - SF_INFO sf_info; - sf_info.channels = 2; - sf_info.samplerate = SR_44_1; - sf_info.format = F_Ogg | SF_Vorbis; - - return (sf_format_check (&sf_info) == SF_TRUE ? true : false); -} - bool ExportFormatOggVorbis::set_compatibility_state (ExportFormatCompatibility const & compatibility) { @@ -275,6 +274,16 @@ ExportFormatOggVorbis::set_compatibility_state (ExportFormatCompatibility const ExportFormatFLAC::ExportFormatFLAC () : HasSampleFormat (sample_formats) { + /* Check system compatibility */ + + SF_INFO sf_info; + sf_info.channels = 2; + sf_info.samplerate = SR_44_1; + sf_info.format = F_FLAC | SF_16; + if (sf_format_check (&sf_info) != SF_TRUE) { + throw ExportFormatIncompatible(); + } + set_name ("FLAC"); set_format_id (F_FLAC); @@ -295,17 +304,6 @@ ExportFormatFLAC::ExportFormatFLAC () : set_quality (Q_LosslessCompression); } -bool -ExportFormatFLAC::check_system_compatibility () -{ - SF_INFO sf_info; - sf_info.channels = 2; - sf_info.samplerate = SR_44_1; - sf_info.format = F_FLAC | SF_16; - - return (sf_format_check (&sf_info) == SF_TRUE ? true : false); -} - bool ExportFormatFLAC::set_compatibility_state (ExportFormatCompatibility const & compatibility) { -- cgit v1.2.3