Finished implementation of J2KExtendedCapabilities
authorjhurst <jhurst@cinecert.com>
Sat, 30 Nov 2019 16:27:39 +0000 (08:27 -0800)
committerjhurst <jhurst@cinecert.com>
Sat, 30 Nov 2019 16:27:39 +0000 (08:27 -0800)
src/MXFTypes.cpp
src/MXFTypes.h

index a98a4d2fd701f42c4eb17d6d3156df56000b5f0f..30e36b9ba442cababd2b7fa9c380ba88119b0556 100755 (executable)
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2005-2016, John Hurst
+Copyright (c) 2005-2019, John Hurst
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
@@ -774,6 +774,69 @@ ASDCP::MXF::Raw::EncodeString(char* str_buf, ui32_t buf_len) const
   return str_buf;
 }
 
+
+//
+bool
+ASDCP::MXF::J2KExtendedCapabilities::Archive(Kumu::MemIOWriter* Writer) const {
+  if ( ! Writer->WriteUi8(Pcap) )
+    {
+      return false;
+    }
+
+  for ( int i = 0; i < JP2K::MaxCapabilities; ++i )
+    {
+      if ( ! Writer->WriteUi16BE(Ccapi[i]) )
+        {
+          return false;
+        }
+    }
+
+  return true;
+}
+
+//
+bool
+ASDCP::MXF::J2KExtendedCapabilities::Unarchive(Kumu::MemIOReader* Reader) {
+  if ( ! Reader->ReadUi8(&Pcap) )
+    {
+      return false;
+    }
+
+  for ( int i = 0; i < JP2K::MaxCapabilities; ++i )
+    {
+      if ( ! Reader->ReadUi16BE(&Ccapi[i]) )
+        {
+          return false;
+        }
+    }
+
+  return true;
+}
+
+//
+const char*
+ASDCP::MXF::J2KExtendedCapabilities::EncodeString(char* str_buf, ui32_t buf_len) const
+{
+  const int str_len = ( sizeof(ui16_t) + 1 ) * JP2K::MaxCapabilities;
+
+  if ( Pcap != 0 && buf_len > str_len )
+    {
+      for ( int i = 0; i < JP2K::MaxCapabilities; ++i )
+        {
+         snprintf(str_buf+(i*3), 4, "%02hx.", Ccapi[i]);
+        }
+
+      str_buf[str_len-1] = 0;
+    }
+  else
+    {
+      str_buf[0] = 0;
+    }
+
+  return str_buf;
+}
+
+
 //
 // end MXFTypes.cpp
 //
index 0c79e8c14537c01c80097490320bfe1000f7d609..322010826f6ff5b708b3eda8f38a4ccdf1da71c1 100755 (executable)
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2005-2016, John Hurst
+Copyright (c) 2005-2019, John Hurst
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
@@ -33,6 +33,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #define _MXFTYPES_H_
 
 #include "KLV.h"
+#include "AS_DCP.h"
 #include <list>
 #include <vector>
 #include <set>
@@ -688,29 +689,19 @@ namespace ASDCP
          const char* EncodeString(char* str_buf, ui32_t buf_len) const;
        };
 
+      //
       class J2KExtendedCapabilities : public Kumu::IArchive
         {
         public:
-         i8_t Pcap;
-         i8_t Ccapi[16]; // this is certainly wrong, need the spec
+         ui8_t Pcap; // TODO: is this the right type?
+         ui16_t Ccapi[JP2K::MaxCapabilities];
        
          bool HasValue() const { return true; }
          ui32_t ArchiveLength() const { return 0; }
 
-         bool Archive(Kumu::MemIOWriter* Writer) const {
-           return true;
-         }
-
-         bool Unarchive(Kumu::MemIOReader* Reader) {
-           return true;
-         }
-
-         const char* EncodeString(char* str_buf, ui32_t buf_len) const
-         {
-           str_buf[0] = 0;
-           return str_buf;
-         }
-
+         bool Archive(Kumu::MemIOWriter* Writer) const;
+         bool Unarchive(Kumu::MemIOReader* Reader);
+         const char* EncodeString(char* str_buf, ui32_t buf_len) const;
       };
 
     } // namespace MXF