Update audiographer GPL boilerplate and (C) from git log
[ardour.git] / libs / audiographer / audiographer / sndfile / sndfile_writer.h
index 57ad968dc5f20b1037a6be0f90bf49de988b13db..b106eba6a8efdb7fa67fd96b745ff6862d3c8020 100644 (file)
@@ -27,7 +27,7 @@ class SndfileWriter
   , public FlagDebuggable<>
 {
   public:
-       SndfileWriter (std::string const & path, int format, ChannelCount channels, framecnt_t samplerate, boost::shared_ptr<BroadcastInfo> broadcast_info)
+       SndfileWriter (std::string const & path, int format, ChannelCount channels, samplecnt_t samplerate, boost::shared_ptr<BroadcastInfo> broadcast_info)
          : SndfileHandle (path, Write, format, channels, samplerate)
          , path (path)
        {
@@ -40,19 +40,13 @@ class SndfileWriter
 
        virtual ~SndfileWriter () {}
 
-       SndfileWriter (SndfileWriter const & other)
-               : SndfileHandle (other)
-       {
-               init();
-       }
-
        using SndfileHandle::operator=;
 
-       framecnt_t get_frames_written() const { return frames_written; }
-       void       reset_frames_written_count() { frames_written = 0; }
+       samplecnt_t get_samples_written() const { return samples_written; }
+       void       reset_samples_written_count() { samples_written = 0; }
 
        /// Writes data to file
-       void process (ProcessContext<T> const & c)
+       virtual void process (ProcessContext<T> const & c)
        {
                check_flags (*this, c);
 
@@ -62,10 +56,10 @@ class SndfileWriter
                                % c.channels() % channels()));
                }
 
-               framecnt_t const written = write (c.data(), c.frames());
-               frames_written += written;
+               samplecnt_t const written = write (c.data(), c.samples());
+               samples_written += written;
 
-               if (throw_level (ThrowProcess) && written != c.frames()) {
+               if (throw_level (ThrowProcess) && written != c.samples()) {
                        throw Exception (*this, boost::str (boost::format
                                ("Could not write data to output file (%1%)")
                                % strError()));
@@ -88,15 +82,22 @@ class SndfileWriter
                init();
        }
 
-       void init()
+       virtual void init()
        {
-               frames_written = 0;
+               if (SF_ERR_NO_ERROR != SndfileHandle::error ()) {
+                       throw Exception (*this, boost::str (boost::format
+                                               ("Could create output file (%1%)") % path));
+               }
+               samples_written = 0;
                add_supported_flag (ProcessContext<T>::EndOfInput);
        }
 
   protected:
        std::string path;
-       framecnt_t frames_written;
+       samplecnt_t samples_written;
+
+       private:
+       SndfileWriter (SndfileWriter const & other) {}
 };
 
 } // namespace