Merge writer-thread with original which was time-cleanup.
[dcpomatic.git] / src / lib / dcp_video_frame.cc
index f84fa8a3f1be39053b4bb77c75a7f2e1938ca789..1c408270e46ae6b4e34c027740e760897ede819a 100644 (file)
@@ -61,14 +61,15 @@ using std::stringstream;
 using std::ofstream;
 using std::cout;
 using boost::shared_ptr;
+using libdcp::Size;
 
 /** Construct a DCP video frame.
  *  @param input Input image.
  *  @param out Required size of output, in pixels (including any padding).
  *  @param s Scaler to use.
  *  @param p Number of pixels of padding either side of the image.
- *  @param f Index of the frame within the Film.
- *  @param fps Frames per second of the Film.
+ *  @param f Index of the frame within the DCP's intrinsic duration.
+ *  @param fps Frames per second of the Film's source.
  *  @param pp FFmpeg post-processing string to use.
  *  @param clut Colour look-up table to use (see Config::colour_lut_index ())
  *  @param bw J2K bandwidth to use (see Config::j2k_bandwidth ())
@@ -77,7 +78,7 @@ using boost::shared_ptr;
 DCPVideoFrame::DCPVideoFrame (
        shared_ptr<const Image> yuv, shared_ptr<Subtitle> sub,
        Size out, int p, int subtitle_offset, float subtitle_scale,
-       Scaler const * s, SourceFrame f, float fps, string pp, int clut, int bw, Log* l
+       Scaler const * s, int f, float fps, string pp, int clut, int bw, Log* l
        )
        : _input (yuv)
        , _subtitle (sub)
@@ -87,9 +88,9 @@ DCPVideoFrame::DCPVideoFrame (
        , _subtitle_scale (subtitle_scale)
        , _scaler (s)
        , _frame (f)
-       , _frames_per_second (dcp_frame_rate(fps).frames_per_second)
+       , _frames_per_second (DCPFrameRate(fps).frames_per_second)
        , _post_process (pp)
-       , _colour_lut_index (clut)
+       , _colour_lut (clut)
        , _j2k_bandwidth (bw)
        , _log (l)
        , _image (0)
@@ -189,22 +190,22 @@ DCPVideoFrame::encode_locally ()
                for (int x = 0; x < _out_size.width; ++x) {
 
                        /* In gamma LUT (converting 8-bit input to 12-bit) */
-                       s.r = lut_in[_colour_lut_index][*p++ << 4];
-                       s.g = lut_in[_colour_lut_index][*p++ << 4];
-                       s.b = lut_in[_colour_lut_index][*p++ << 4];
+                       s.r = lut_in[_colour_lut][*p++ << 4];
+                       s.g = lut_in[_colour_lut][*p++ << 4];
+                       s.b = lut_in[_colour_lut][*p++ << 4];
                        
                        /* RGB to XYZ Matrix */
-                       d.x = ((s.r * color_matrix[_colour_lut_index][0][0]) +
-                              (s.g * color_matrix[_colour_lut_index][0][1]) +
-                              (s.b * color_matrix[_colour_lut_index][0][2]));
+                       d.x = ((s.r * color_matrix[_colour_lut][0][0]) +
+                              (s.g * color_matrix[_colour_lut][0][1]) +
+                              (s.b * color_matrix[_colour_lut][0][2]));
                        
-                       d.y = ((s.r * color_matrix[_colour_lut_index][1][0]) +
-                              (s.g * color_matrix[_colour_lut_index][1][1]) +
-                              (s.b * color_matrix[_colour_lut_index][1][2]));
+                       d.y = ((s.r * color_matrix[_colour_lut][1][0]) +
+                              (s.g * color_matrix[_colour_lut][1][1]) +
+                              (s.b * color_matrix[_colour_lut][1][2]));
                        
-                       d.z = ((s.r * color_matrix[_colour_lut_index][2][0]) +
-                              (s.g * color_matrix[_colour_lut_index][2][1]) +
-                              (s.b * color_matrix[_colour_lut_index][2][2]));
+                       d.z = ((s.r * color_matrix[_colour_lut][2][0]) +
+                              (s.g * color_matrix[_colour_lut][2][1]) +
+                              (s.b * color_matrix[_colour_lut][2][2]));
                        
                        /* DCI companding */
                        d.x = d.x * DCI_COEFFICENT * (DCI_LUT_SIZE - 1);
@@ -335,8 +336,8 @@ DCPVideoFrame::encode_remotely (ServerDescription const * serv)
                s << "post_process " << _post_process << "\n";
        }
        
-       s << "colour_lut " << Config::instance()->colour_lut_index () << "\n"
-         << "j2k_bandwidth " << Config::instance()->j2k_bandwidth () << "\n";
+       s << "colour_lut " << _colour_lut << "\n"
+         << "j2k_bandwidth " << _j2k_bandwidth << "\n";
 
        if (_subtitle) {
                s << "subtitle_x " << _subtitle->position().x << "\n"
@@ -386,12 +387,12 @@ EncodedData::~EncodedData ()
 
 /** Write this data to a J2K file.
  *  @param opt Options.
- *  @param frame Frame index.
+ *  @param frame DCP Frame index.
  */
 void
-EncodedData::write (shared_ptr<const EncodeOptions> opt, SourceFrame frame)
+EncodedData::write (shared_ptr<const Film> film, int frame)
 {
-       string const tmp_j2k = opt->frame_out_path (frame, true);
+       string const tmp_j2k = film->frame_out_path (frame, true);
 
        FILE* f = fopen (tmp_j2k.c_str (), "wb");
        
@@ -402,13 +403,13 @@ EncodedData::write (shared_ptr<const EncodeOptions> opt, SourceFrame frame)
        fwrite (_data, 1, _size, f);
        fclose (f);
 
-       string const real_j2k = opt->frame_out_path (frame, false);
+       string const real_j2k = film->frame_out_path (frame, false);
 
        /* Rename the file from foo.j2c.tmp to foo.j2c now that it is complete */
        boost::filesystem::rename (tmp_j2k, real_j2k);
 
        /* Write a file containing the hash */
-       string const hash = opt->hash_out_path (frame, false);
+       string const hash = film->hash_out_path (frame, false);
        ofstream h (hash.c_str());
        h << md5_digest (_data, _size) << "\n";
        h.close ();