summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjhurst <jhurst@cinecert.com>2019-11-30 08:27:39 -0800
committerjhurst <jhurst@cinecert.com>2019-11-30 08:27:39 -0800
commitea1f0d2be28bf833d792a8dd66c94e1d0b0525bd (patch)
treeb41e7ad78cec1869ac22da3eb83e76fe44a89883 /src
parentfbb01f302c8fda1f58d27715d4e5e90815d83725 (diff)
Finished implementation of J2KExtendedCapabilities
Diffstat (limited to 'src')
-rwxr-xr-xsrc/MXFTypes.cpp65
-rwxr-xr-xsrc/MXFTypes.h25
2 files changed, 72 insertions, 18 deletions
diff --git a/src/MXFTypes.cpp b/src/MXFTypes.cpp
index a98a4d2..30e36b9 100755
--- a/src/MXFTypes.cpp
+++ b/src/MXFTypes.cpp
@@ -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
//
diff --git a/src/MXFTypes.h b/src/MXFTypes.h
index 0c79e8c..3220108 100755
--- a/src/MXFTypes.h
+++ b/src/MXFTypes.h
@@ -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