Update filter graph to new API.
[dcpomatic.git] / src / lib / image.h
index 95e0de9dc2baa09b84d8edcb319e01e90fb25aa6..00768ee028e5bdcb551f6f1aa2f516e026e7c70c 100644 (file)
@@ -65,13 +65,15 @@ public:
        virtual int * stride () const = 0;
 
        /** @return Size of the image, in pixels */
-       virtual Size size () const = 0;
+       virtual libdcp::Size size () const = 0;
+
+       virtual bool aligned () const = 0;
 
        int components () const;
        int lines (int) const;
 
-       boost::shared_ptr<Image> scale_and_convert_to_rgb (Size out_size, int padding, Scaler const * scaler, bool aligned) const;
-       boost::shared_ptr<Image> scale (Size, Scaler const *, bool aligned) const;
+       boost::shared_ptr<Image> scale_and_convert_to_rgb (libdcp::Size out_size, int padding, Scaler const * scaler, bool aligned) const;
+       boost::shared_ptr<Image> scale (libdcp::Size, Scaler const *, bool aligned) const;
        boost::shared_ptr<Image> post_process (std::string, bool aligned) const;
        void alpha_blend (boost::shared_ptr<const Image> image, Position pos);
        boost::shared_ptr<Image> crop (Crop c, bool aligned) const;
@@ -89,30 +91,35 @@ protected:
        virtual void swap (Image &);
        float bytes_per_pixel (int) const;
 
-private:       
+private:
+       void yuv_16_black (uint16_t);
+       static uint16_t swap_16 (uint16_t);
+       
        AVPixelFormat _pixel_format; ///< FFmpeg's way of describing the pixel format of this Image
 };
 
-/** @class FilterBufferImage
- *  @brief An Image that is held in an AVFilterBufferRef.
+/** @class FrameImage
+ *  @brief An Image that is held in an AVFrame.
  */
-class FilterBufferImage : public Image
+class FrameImage : public Image
 {
 public:
-       FilterBufferImage (AVPixelFormat, AVFilterBufferRef *);
-       ~FilterBufferImage ();
+       FrameImage (AVFrame *);
+       ~FrameImage ();
 
        uint8_t ** data () const;
        int * line_size () const;
        int * stride () const;
-       Size size () const;
+       libdcp::Size size () const;
+       bool aligned () const;
 
 private:
        /* Not allowed */
-       FilterBufferImage (FilterBufferImage const &);
-       FilterBufferImage& operator= (FilterBufferImage const &);
+       FrameImage (FrameImage const &);
+       FrameImage& operator= (FrameImage const &);
        
-       AVFilterBufferRef* _buffer;
+       AVFrame* _frame;
+       int* _line_size;
 };
 
 /** @class SimpleImage
@@ -121,22 +128,24 @@ private:
 class SimpleImage : public Image
 {
 public:
-       SimpleImage (AVPixelFormat, Size, bool);
+       SimpleImage (AVPixelFormat, libdcp::Size, bool);
        SimpleImage (SimpleImage const &);
+       SimpleImage (boost::shared_ptr<const Image>);
        SimpleImage& operator= (SimpleImage const &);
        ~SimpleImage ();
 
        uint8_t ** data () const;
        int * line_size () const;
        int * stride () const;
-       Size size () const;
+       libdcp::Size size () const;
+       bool aligned () const;
 
 protected:
        void allocate ();
        void swap (SimpleImage &);
        
 private:
-       Size _size; ///< size in pixels
+       libdcp::Size _size; ///< size in pixels
        uint8_t** _data; ///< array of pointers to components
        int* _line_size; ///< array of sizes of the data in each line, in pixels (without any alignment padding bytes)
        int* _stride; ///< array of strides for each line (including any alignment padding bytes)