Commit a bunch of portability fixes (64- vs. 32-bit types).
[asdcplib.git] / src / AS_DCP_JP2K.cpp
index 40e6a8295d7bd4066a3ff1afa968bd2c6fcd9b6c..39dceedd72b4e681f93bdfe39f8108911e0dc62d 100755 (executable)
@@ -32,7 +32,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #include "AS_DCP_internal.h"
 
 using namespace ASDCP::JP2K;
-
+using Kumu::GenRandomValue;
 
 //------------------------------------------------------------------------------------------
 
@@ -84,7 +84,8 @@ ASDCP::JP2K::PictureDescriptorDump(const PictureDescriptor& PDesc, FILE* stream)
   fprintf(stream, "    ImageComponents:\n");
   fprintf(stream, "  bits  h-sep v-sep\n");
 
-  for ( ui32_t i = 0; i < PDesc.Csize; i++ )
+  ui32_t i;
+  for ( i = 0; i < PDesc.Csize; i++ )
     {
       fprintf(stream, "  %4d  %5d %5d\n",
              PDesc.ImageComponents[i].Ssize + 1, // See ISO 15444-1, Table A11, for the origin of '+1'
@@ -106,7 +107,7 @@ ASDCP::JP2K::PictureDescriptorDump(const PictureDescriptor& PDesc, FILE* stream)
   fprintf(stream, "     Transformation: %hd\n", PDesc.CodingStyleDefault.SPcod.Transformation);
 
 
-  ui32_t precinct_set_size = 0, i;
+  ui32_t precinct_set_size = 0;
 
   for ( i = 0; PDesc.CodingStyleDefault.SPcod.PrecinctSize[i] != 0 && i < MaxPrecincts; i++ )
     precinct_set_size++;
@@ -159,7 +160,8 @@ lh__Reader::MD_to_JP2K_PDesc(JP2K::PictureDescriptor& PDesc)
   MXF::RGBAEssenceDescriptor* PDescObj = (MXF::RGBAEssenceDescriptor*)m_EssenceDescriptor;
 
   PDesc.EditRate           = m_EditRate;
-  PDesc.ContainerDuration  = PDescObj->ContainerDuration;
+  assert(PDescObj->ContainerDuration <= 0xFFFFFFFFL);
+  PDesc.ContainerDuration  = (ui32_t) PDescObj->ContainerDuration;
   PDesc.StoredWidth        = PDescObj->StoredWidth;
   PDesc.StoredHeight       = PDescObj->StoredHeight;
   PDesc.AspectRatio        = PDescObj->AspectRatio;
@@ -225,7 +227,7 @@ lh__Reader::OpenRead(const char* filename, EssenceType_t type)
 
       if ( ObjectList.empty() )
        {
-         DefaultLogSink().Error("MXF Metadata contains no Track Sets\n");
+         DefaultLogSink().Error("MXF Metadata contains no Track Sets.\n");
          return RESULT_FORMAT;
        }
 
@@ -235,16 +237,23 @@ lh__Reader::OpenRead(const char* filename, EssenceType_t type)
        {
          if ( m_EditRate != m_EssenceDescriptor->SampleRate )
            {
-             DefaultLogSink().Error("EditRate and SampleRate do not match (%.03f, %.03f)\n",
+             DefaultLogSink().Error("EditRate and SampleRate do not match (%.03f, %.03f).\n",
                                     m_EditRate.Quotient(), m_EssenceDescriptor->SampleRate.Quotient());
-             return RESULT_SFORMAT;
+             
+             if ( m_EditRate == EditRate_24 && m_EssenceDescriptor->SampleRate == EditRate_48 )
+               {
+                 DefaultLogSink().Error("File may contain JPEG Interop stereoscopic images.\n");
+                 return RESULT_SFORMAT;
+               }
+
+             return RESULT_FORMAT;
            }
        }
       else if ( type == ASDCP::ESS_JPEG_2000_S )
        {
          if ( ! ( m_EditRate == EditRate_24 && m_EssenceDescriptor->SampleRate == EditRate_48 ) )
            {
-             DefaultLogSink().Error("EditRate and SampleRate not correct for 24/48 stereoscopic essence\n");
+             DefaultLogSink().Error("EditRate and SampleRate not correct for 24/48 stereoscopic essence.\n");
              return RESULT_FORMAT;
            }
        }
@@ -904,10 +913,7 @@ ASDCP::JP2K::MXFSWriter::OpenWrite(const char* filename, const WriterInfo& Info,
     }
 
   if ( PDesc.StoredWidth > 2048 )
-    {
-      DefaultLogSink().Error("Stereoscopic wrapping requires 2K image content.\n");
-      return RESULT_FORMAT;
-    }
+    DefaultLogSink().Warn("Wrapping non-standard 4K stereoscopic content. I hope you know what you are doing!\n");
 
   m_Writer->m_Info = Info;