ardour
export_format_specification.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2008 Paul Davis
3  Author: Sakari Bergen
4 
5  This program is free software; you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation; either version 2 of the License, or
8  (at your option) any later version.
9 
10  This program is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU General Public License for more details.
14 
15  You should have received a copy of the GNU General Public License
16  along with this program; if not, write to the Free Software
17  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 
19 */
20 
21 #ifndef __ardour_export_format_specification_h__
22 #define __ardour_export_format_specification_h__
23 
24 #include <string>
25 
26 #include "pbd/uuid.h"
27 
29 #include "ardour/types.h"
31 
32 class XMLNode;
33 
34 namespace ARDOUR
35 {
36 
37 class ExportFormat;
38 class ExportFormatCompatibility;
39 class Session;
40 
42 
43  private:
44 
45  /* Time struct for keeping time formats as close as possible to what was requested */
46 
47  struct Time : public AnyTime {
48  Time (Session & session) : AnyTime (), session (session) {}
49  Time & operator= (AnyTime const & other);
50 
51  framecnt_t get_frames_at (framepos_t position, framecnt_t target_rate) const;
52 
53  /* Serialization */
54 
55  XMLNode & get_state ();
56  int set_state (const XMLNode & node);
57 
58  private:
60  };
61 
62  private:
63  friend class ExportElementFactory;
64  explicit ExportFormatSpecification (Session & s);
65  ExportFormatSpecification (Session & s, XMLNode const & state);
66 
67  public:
68  ExportFormatSpecification (ExportFormatSpecification const & other, bool modify_name = true);
70 
71  /* compatibility */
72 
73  bool is_compatible_with (ExportFormatCompatibility const & compatibility) const;
74  bool is_complete () const;
75 
76  /* Modifying functions */
77 
78  void set_format (boost::shared_ptr<ExportFormat> format);
79 
80  void set_name (std::string const & name) { _name = name; }
81 
82  void set_type (Type type) { _type = type; }
83  void set_format_id (FormatId value) { format_ids.clear(); format_ids.insert (value); }
84  void set_endianness (Endianness value) { endiannesses.clear(); endiannesses.insert (value); }
85  void set_sample_format (SampleFormat value) { sample_formats.clear(); sample_formats.insert (value); }
86  void set_sample_rate (SampleRate value) { sample_rates.clear(); sample_rates.insert (value); }
87  void set_quality (Quality value) { qualities.clear(); qualities.insert (value); }
88 
89  void set_dither_type (DitherType value) { _dither_type = value; }
90  void set_src_quality (SRCQuality value) { _src_quality = value; }
91  void set_trim_beginning (bool value) { _trim_beginning = value; }
92  void set_trim_end (bool value) { _trim_end = value; }
93  void set_normalize (bool value) { _normalize = value; }
94  void set_normalize_target (float value) { _normalize_target = value; }
95 
96  void set_tag (bool tag_it) { _tag = tag_it; }
97  void set_with_cue (bool yn) { _with_cue = yn; }
98  void set_with_toc (bool yn) { _with_toc = yn; }
99  void set_with_mp4chaps (bool yn) { _with_mp4chaps = yn; }
100  void set_soundcloud_upload (bool yn) { _soundcloud_upload = yn; }
101  void set_command (std::string command) { _command = command; }
102 
103  void set_silence_beginning (AnyTime const & value) { _silence_beginning = value; }
104  void set_silence_end (AnyTime const & value) { _silence_end = value; }
105 
106  /* Accessing functions */
107 
108  PBD::UUID const & id () { return _id; }
109  std::string const & name () const { return _name; }
110  std::string description (bool include_name = true);
111 
112  bool has_broadcast_info () const { return _has_broadcast_info; }
113  uint32_t channel_limit () const { return _channel_limit; }
114  std::string format_name () const { return _format_name; }
115 
116  Type type () const { return _type; }
117  FormatId format_id () const { return *format_ids.begin(); }
118  Endianness endianness () const { return *endiannesses.begin(); }
119  SampleFormat sample_format () const { return *sample_formats.begin(); }
120  SampleRate sample_rate () const { return *sample_rates.begin(); }
121  Quality quality () const { return *qualities.begin(); }
122 
123  DitherType dither_type () const { return _dither_type; }
124  SRCQuality src_quality () const { return _src_quality; }
125  bool trim_beginning () const { return _trim_beginning; }
126  bool trim_end () const { return _trim_end; }
127  bool normalize () const { return _normalize; }
128  float normalize_target () const { return _normalize_target; }
129  bool with_toc() const { return _with_toc; }
130  bool with_cue() const { return _with_cue; }
131  bool with_mp4chaps() const { return _with_mp4chaps; }
132 
133  bool soundcloud_upload() const { return _soundcloud_upload; }
134  std::string command() const { return _command; }
135 
136  bool tag () const { return _tag && supports_tagging; }
137 
139  { return _silence_beginning.get_frames_at (position, samplerate); }
141  { return _silence_end.get_frames_at (position, samplerate); }
142 
143  AnyTime silence_beginning_time () const { return _silence_beginning; }
144  AnyTime silence_end_time () const { return _silence_end; }
145 
146  /* Serialization */
147 
148  XMLNode & get_state ();
149  int set_state (const XMLNode & root);
150 
151 
152  private:
153 
155 
156  /* The variables below do not have setters (usually set via set_format) */
157 
158  std::string _format_name;
162  uint32_t _channel_limit;
163 
164  /* The variables below have getters and setters */
165 
166  std::string _name;
168 
169  Type _type;
170  DitherType _dither_type;
171  SRCQuality _src_quality;
172 
173  bool _tag;
174 
177  bool _trim_end;
179 
182  bool _with_toc;
183  bool _with_cue;
186  std::string _command;
187 
188  /* serialization helpers */
189 
190  void add_option (XMLNode * node, std::string const & name, std::string const & value);
191  std::string get_option (XMLNode const * node, std::string const & name);
192 
193 };
194 
195 } // namespace ARDOUR
196 
197 #endif /* __ardour_export_format_specification_h__ */
framecnt_t silence_end_at(framepos_t position, framecnt_t samplerate) const
void set_name(std::string const &name)
int64_t framecnt_t
Definition: types.h:76
Definition: amp.h:29
int64_t framepos_t
Definition: types.h:66
#define LIBARDOUR_API
const char * name
void set_silence_beginning(AnyTime const &value)
Definition: xml++.h:95
framecnt_t silence_beginning_at(framepos_t position, framecnt_t samplerate) const
LIBARDOUR_API PBD::PropertyDescriptor< framepos_t > position
Definition: region.cc:65
Allows adding to all sets. A format should be able to test if it is compatible with this...
Definition: uuid.h:32