Some comments.
[libdcp.git] / src / picture_asset.h
index 58dd1dfd216d17700b723fd98abff5b3983f6b3c..f2c4bb34d3adfbc0c9d5c6491f5083672c127e3f 100644 (file)
  *  @brief An asset made up of JPEG2000 files
  */
 
-#include "asset.h"
+#include <openjpeg.h>
+#include "mxf_asset.h"
 
 namespace libdcp
 {
 
+class PictureFrame;    
+
 /** @brief An asset made up of JPEG2000 files */
-class PictureAsset : public Asset
+class PictureAsset : public MXFAsset
 {
 public:
        /** Construct a PictureAsset, generating the MXF from the JPEG2000 files.
         *  This may take some time; progress is indicated by emission of the Progress signal.
         *  @param files Pathnames of JPEG2000 files, in frame order.
-        *  @param mxf_path Pathname of MXF file to create.
+        *  @param directory Directory in which to create MXF file.
+        *  @param mxf_name Name of MXF file to create.
         *  @param progress Signal to inform of progress.
         *  @param fps Frames per second.
         *  @param length Length in frames.
@@ -42,7 +46,8 @@ public:
         */
        PictureAsset (
                std::vector<std::string> const & files,
-               std::string mxf_path,
+               std::string directory,
+               std::string mxf_name,
                sigc::signal1<void, float>* progress,
                int fps,
                int length,
@@ -52,8 +57,9 @@ public:
 
        /** Construct a PictureAsset, generating the MXF from the JPEG2000 files.
         *  This may take some time; progress is indicated by emission of the Progress signal.
-        *  @param files Pathnames of JPEG2000 files, in frame order.
-        *  @param mxf_path Pathname of MXF file to create.
+        *  @param get_path Functor which returns a JPEG2000 file path for a given frame (frames counted from 0).
+        *  @param directory Directory in which to create MXF file.
+        *  @param mxf_name Name of MXF file to create.
         *  @param progress Signal to inform of progress.
         *  @param fps Frames per second.
         *  @param length Length in frames.
@@ -62,22 +68,38 @@ public:
         */
        PictureAsset (
                sigc::slot<std::string, int> get_path,
-               std::string mxf_path,
+               std::string directory,
+               std::string mxf_name,
                sigc::signal1<void, float>* progress,
                int fps,
                int length,
                int width,
                int height
                );
+
+       PictureAsset (std::string directory, std::string mxf_name, int fps, int length);
        
        /** Write details of this asset to a CPL stream.
         *  @param s Stream.
         */
        void write_to_cpl (std::ostream& s) const;
 
+       std::list<std::string> equals (boost::shared_ptr<const Asset> other, EqualityOptions opt) const;
+
+       boost::shared_ptr<const PictureFrame> get_frame (int n) const;
+
+       int width () const {
+               return _width;
+       }
+
+       int height () const {
+               return _height;
+       }
+       
 private:
        std::string path_from_list (int f, std::vector<std::string> const & files) const;
        void construct (sigc::slot<std::string, int>);
+       opj_image_t* decompress_j2k (uint8_t* data, int64_t size) const;
        
        /** picture width in pixels */
        int _width;