185 lines
5.9 KiB
C++
185 lines
5.9 KiB
C++
/*
|
|
* Copyright (C) 2008-2013 Paul Davis <paul@linuxaudiosystems.com>
|
|
* Copyright (C) 2009 David Robillard <d@drobilla.net>
|
|
* Copyright (C) 2011-2012 Sakari Bergen <sakari.bergen@beatwaves.net>
|
|
* Copyright (C) 2013-2014 Colin Fletcher <colin.m.fletcher@googlemail.com>
|
|
* Copyright (C) 2016-2018 Robin Gareus <robin@gareus.org>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*/
|
|
|
|
#ifndef __ardour_export_format_manager_h__
|
|
#define __ardour_export_format_manager_h__
|
|
|
|
#include <list>
|
|
#include <memory>
|
|
#include <string>
|
|
|
|
#include "pbd/signals.h"
|
|
|
|
#include "ardour/export_formats.h"
|
|
#include "ardour/export_pointers.h"
|
|
|
|
namespace ARDOUR
|
|
{
|
|
|
|
class ExportFormat;
|
|
class ExportFormatCompatibility;
|
|
class ExportFormatSpecification;
|
|
class AnyTime;
|
|
|
|
class LIBARDOUR_API ExportFormatManager : public PBD::ScopedConnectionList
|
|
{
|
|
public:
|
|
|
|
typedef std::list<ExportFormatCompatibilityPtr> CompatList;
|
|
typedef std::list<ExportFormatPtr> FormatList;
|
|
|
|
typedef HasSampleFormat::SampleFormatPtr SampleFormatPtr;
|
|
typedef HasSampleFormat::SampleFormatList SampleFormatList;
|
|
typedef HasSampleFormat::WeakSampleFormatPtr WeakSampleFormatPtr;
|
|
|
|
typedef HasSampleFormat::DitherTypePtr DitherTypePtr;
|
|
typedef HasSampleFormat::WeakDitherTypePtr WeakDitherTypePtr;
|
|
|
|
/* Quality states */
|
|
|
|
class QualityState : public ExportFormatBase::SelectableCompatible {
|
|
public:
|
|
QualityState (ExportFormatBase::Quality quality, std::string name) :
|
|
quality (quality) { set_name (name); }
|
|
ExportFormatBase::Quality quality;
|
|
};
|
|
typedef std::shared_ptr<QualityState> QualityPtr;
|
|
typedef std::weak_ptr<QualityState> WeakQualityPtr;
|
|
typedef std::list<QualityPtr> QualityList;
|
|
|
|
/* Sample rate states */
|
|
|
|
class SampleRateState : public ExportFormatBase::SelectableCompatible {
|
|
public:
|
|
SampleRateState (ExportFormatBase::SampleRate rate, std::string name)
|
|
: rate (rate) { set_name (name); }
|
|
ExportFormatBase::SampleRate rate;
|
|
};
|
|
typedef std::shared_ptr<SampleRateState> SampleRatePtr;
|
|
typedef std::weak_ptr<SampleRateState> WeakSampleRatePtr;
|
|
typedef std::list<SampleRatePtr> SampleRateList;
|
|
|
|
public:
|
|
|
|
explicit ExportFormatManager (ExportFormatSpecPtr specification);
|
|
~ExportFormatManager ();
|
|
|
|
/* Signals */
|
|
|
|
PBD::Signal1<void,bool> CompleteChanged;
|
|
PBD::Signal0<void> DescriptionChanged;
|
|
|
|
/* Access to lists */
|
|
|
|
CompatList const & get_compatibilities () { return compatibilities; }
|
|
QualityList const & get_qualities () { return qualities; }
|
|
FormatList const & get_formats () { return formats; }
|
|
SampleRateList const & get_sample_rates () { return sample_rates; }
|
|
|
|
/* Non interactive selections */
|
|
|
|
void set_name (std::string name);
|
|
|
|
void select_with_cue (bool);
|
|
void select_with_toc (bool);
|
|
void select_with_mp4chaps (bool);
|
|
void select_upload (bool);
|
|
void set_command (std::string);
|
|
void select_src_quality (ExportFormatBase::SRCQuality value);
|
|
void select_codec_quality (int);
|
|
void select_trim_beginning (bool value);
|
|
void select_silence_beginning (AnyTime const & time);
|
|
void select_trim_end (bool value);
|
|
void select_silence_end (AnyTime const & time);
|
|
void select_normalize (bool value);
|
|
void select_normalize_loudness (bool value);
|
|
void select_tp_limiter (bool value);
|
|
void select_normalize_dbfs (float value);
|
|
void select_normalize_lufs (float value);
|
|
void select_normalize_dbtp (float value);
|
|
void select_tagging (bool tag);
|
|
void select_demo_noise_level (float value);
|
|
void select_demo_noise_duration (int value);
|
|
void select_demo_noise_interval (int value);
|
|
|
|
private:
|
|
|
|
void init_compatibilities ();
|
|
void init_qualities ();
|
|
void init_formats ();
|
|
void init_sample_rates ();
|
|
|
|
void add_compatibility (ExportFormatCompatibilityPtr ptr);
|
|
void add_quality (QualityPtr ptr);
|
|
void add_format (ExportFormatPtr ptr);
|
|
void add_sample_rate (SampleRatePtr ptr);
|
|
|
|
/* Connected to signals */
|
|
|
|
void change_compatibility_selection (bool select, WeakExportFormatCompatibilityPtr const & compat);
|
|
void change_quality_selection (bool select, WeakQualityPtr const & quality);
|
|
void change_format_selection (bool select, WeakExportFormatPtr const & format);
|
|
void change_sample_rate_selection (bool select, WeakSampleRatePtr const & rate);
|
|
|
|
void change_sample_format_selection (bool select, WeakSampleFormatPtr const & format);
|
|
void change_dither_type_selection (bool select, WeakDitherTypePtr const & type);
|
|
|
|
/* Do actual selection */
|
|
|
|
void select_compatibility (WeakExportFormatCompatibilityPtr const & compat);
|
|
void select_quality (QualityPtr const & quality);
|
|
void select_format (ExportFormatPtr const & format);
|
|
void select_sample_rate (SampleRatePtr const & rate);
|
|
|
|
void select_sample_format (SampleFormatPtr const & format);
|
|
void select_dither_type (DitherTypePtr const & type);
|
|
|
|
bool pending_selection_change;
|
|
void selection_changed ();
|
|
void check_for_description_change ();
|
|
|
|
/* Formats and compatibilities */
|
|
|
|
QualityPtr get_selected_quality ();
|
|
ExportFormatPtr get_selected_format ();
|
|
SampleRatePtr get_selected_sample_rate ();
|
|
|
|
SampleFormatPtr get_selected_sample_format ();
|
|
|
|
ExportFormatBasePtr get_compatibility_intersection ();
|
|
|
|
ExportFormatBasePtr universal_set;
|
|
ExportFormatSpecPtr current_selection;
|
|
|
|
CompatList compatibilities;
|
|
QualityList qualities;
|
|
FormatList formats;
|
|
SampleRateList sample_rates;
|
|
|
|
std::string prev_description;
|
|
|
|
};
|
|
|
|
} // namespace ARDOUR
|
|
|
|
#endif /* __ardour_export_format_manager_h__ */
|