Fix problems with FFmpeg files that have all-zero stream IDs.
[dcpomatic.git] / src / lib / writer.cc
index 5386efd9d200b0cadd734ba7d643c876fe4fbbbb..60b2a47ab13b265fe1f5ca288ef576912db0ea12 100644 (file)
 #include "audio_mapping.h"
 #include "config.h"
 #include "job.h"
+#include "cross.h"
 
 #include "i18n.h"
 
 using std::make_pair;
 using std::pair;
 using std::string;
-using std::ifstream;
 using std::list;
 using std::cout;
 using boost::shared_ptr;
@@ -68,6 +68,7 @@ Writer::Writer (shared_ptr<const Film> f, weak_ptr<Job> j)
        boost::filesystem::remove_all (_film->dir (_film->dcp_name ()));
 
        shared_ptr<Job> job = _job.lock ();
+       assert (job);
 
        job->sub (_("Checking existing image data"));
        check_existing_picture_mxf ();
@@ -140,8 +141,9 @@ Writer::fake_write (int frame, Eyes eyes)
 {
        boost::mutex::scoped_lock lock (_mutex);
 
-       ifstream ifi (_film->info_path (frame, eyes).string().c_str());
+       FILE* ifi = fopen_boost (_film->info_path (frame, eyes), "r");
        libdcp::FrameInfo info (ifi);
+       fclose (ifi);
        
        QueueItem qi;
        qi.type = QueueItem::FAKE;
@@ -429,8 +431,14 @@ bool
 Writer::check_existing_picture_mxf_frame (FILE* mxf, int f, Eyes eyes)
 {
        /* Read the frame info as written */
-       ifstream ifi (_film->info_path (f, eyes).string().c_str());
+       FILE* ifi = fopen_boost (_film->info_path (f, eyes), "r");
+       if (!ifi) {
+               _film->log()->log (String::compose ("Existing frame %1 has no info file", f));
+               return false;
+       }
+       
        libdcp::FrameInfo info (ifi);
+       fclose (ifi);
        if (info.size == 0) {
                _film->log()->log (String::compose ("Existing frame %1 has no info file", f));
                return false;