Untested merge of master.
[dcpomatic.git] / src / lib / processor.h
index e99ff2d4dd2cde6c45421dccfb0f8fe7b1b023b5..7b7735faafa139a43b60f69f1796387edf79e413 100644 (file)
@@ -1,5 +1,28 @@
-#ifndef DVDOMATIC_PROCESSOR_H
-#define DVDOMATIC_PROCESSOR_H
+/*
+    Copyright (C) 2012 Carl Hetherington <cth@carlh.net>
+
+    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., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+/** @file  src/processor.h
+ *  @brief Parent class for classes which accept and then emit video or audio data.
+ */
+
+#ifndef DCPOMATIC_PROCESSOR_H
+#define DCPOMATIC_PROCESSOR_H
 
 #include "video_source.h"
 #include "video_sink.h"
 
 class Log;
 
+/** @class Processor
+ *  @brief Base class for processors.
+ */
 class Processor
 {
 public:
-       Processor (Log* log)
+       /** Construct a Processor.
+        *  @param log Log to use.
+        */
+       Processor (boost::shared_ptr<Log> log)
                : _log (log)
        {}
-       
-       virtual void process_begin () {}
+
+       virtual ~Processor() {}
+
+       /** Will be called at the end of a processing run */
        virtual void process_end () {}
 
 protected:
-       Log* _log;
+       boost::shared_ptr<Log> _log; ///< log to write to
 };
 
+/** @class AudioVideoProcessor
+ *  @brief A processor which handles both video and audio data.
+ */
 class AudioVideoProcessor : public Processor, public VideoSource, public VideoSink, public AudioSource, public AudioSink
 {
 public:
-       AudioVideoProcessor (Log* log)
+       /** Construct an AudioVideoProcessor.
+        *  @param log Log to write to.
+        */
+       AudioVideoProcessor (boost::shared_ptr<Log> log)
                : Processor (log)
        {}
 };
 
+class TimedAudioVideoProcessor : public Processor, public TimedVideoSource, public TimedVideoSink, public TimedAudioSource, public TimedAudioSink
+{
+public:
+       TimedAudioVideoProcessor (boost::shared_ptr<Log> log)
+               : Processor (log)
+       {}
+};
+                               
+
+/** @class AudioProcessor
+ *  @brief A processor which handles just audio data.
+ */
 class AudioProcessor : public Processor, public AudioSource, public AudioSink
 {
 public:
-       AudioProcessor (Log* log)
+       /** Construct an AudioProcessor.
+        *  @param log Log to write to.
+        */
+       AudioProcessor (boost::shared_ptr<Log> log)
+               : Processor (log)
+       {}
+};
+
+/** @class VideoProcessor
+ *  @brief A processor which handles just video data.
+ */
+class VideoProcessor : public Processor, public VideoSource, public VideoSink
+{
+public:
+       /** Construct an VideoProcessor.
+        *  @param log Log to write to.
+        */
+       VideoProcessor (boost::shared_ptr<Log> log)
                : Processor (log)
        {}
 };
 
+class TimedVideoProcessor : public Processor, public TimedVideoSource, public TimedVideoSink
+{
+public:
+       TimedVideoProcessor (boost::shared_ptr<Log> log)
+               : Processor (log)
+       {}
+};     
+
 #endif