#include <KM_xml.h>
#include "AS_DCP_internal.h"
#include "JP2K.h"
+#include "ACES.h"
#include "MPEG.h"
#include "Wav.h"
+#include "KM_util.h"
#include <iostream>
#include <iomanip>
}
else if ( TestHeader.OperationalPattern == UL(m_Dict->ul(MDD_OP1a)) )
{
- if ( ASDCP_SUCCESS(TestHeader.GetMDObjectByType(OBJ_TYPE_ARGS(JPEG2000PictureSubDescriptor))) )
- {
- type = ESS_AS02_JPEG_2000;
- }
- else if ( ASDCP_SUCCESS(TestHeader.GetMDObjectByType(OBJ_TYPE_ARGS(WaveAudioDescriptor), &md_object)) )
- {
- assert(md_object);
- if ( static_cast<ASDCP::MXF::WaveAudioDescriptor*>(md_object)->AudioSamplingRate == SampleRate_96k )
- {
- type = ESS_AS02_PCM_24b_96k;
- }
- else
- {
- type = ESS_AS02_PCM_24b_48k;
- }
- }
- else if ( ASDCP_SUCCESS(TestHeader.GetMDObjectByType(OBJ_TYPE_ARGS(TimedTextDescriptor))) )
- {
- type = ESS_AS02_TIMED_TEXT;
- }
- else if ( ASDCP_SUCCESS(TestHeader.GetMDObjectByType(OBJ_TYPE_ARGS(DCDataDescriptor))) )
+ // ST 2065-5 Picture Descriptor does not have a mandatory SubDescriptor, check EssenceContainer instead
+ if (ASDCP_SUCCESS(TestHeader.GetMDObjectByType(OBJ_TYPE_ARGS(RGBAEssenceDescriptor))) )
+ {
+ MXF::RGBAEssenceDescriptor *rgba_descriptor = 0;
+ char buf[64];
+
+ if ASDCP_SUCCESS(TestHeader.GetMDObjectByType(m_Dict->ul(MDD_RGBAEssenceDescriptor), reinterpret_cast<MXF::InterchangeObject**>(&rgba_descriptor)))
{
- type = ESS_DCDATA_UNKNOWN;
+ if (rgba_descriptor->EssenceContainer == m_Dict->ul(MDD_MXFGCFrameWrappedACESPictures))
+ type = ESS_AS02_ACES;
}
+ }
+ if (type == ESS_UNKNOWN)
+ {
+
+ if ( ASDCP_SUCCESS(TestHeader.GetMDObjectByType(OBJ_TYPE_ARGS(JPEG2000PictureSubDescriptor))) )
+ {
+ type = ESS_AS02_JPEG_2000;
+ }
+ else if ( ASDCP_SUCCESS(TestHeader.GetMDObjectByType(OBJ_TYPE_ARGS(WaveAudioDescriptor), &md_object)) )
+ {
+ assert(md_object);
+ if ( static_cast<ASDCP::MXF::WaveAudioDescriptor*>(md_object)->AudioSamplingRate == SampleRate_96k )
+ {
+ type = ESS_AS02_PCM_24b_96k;
+ }
+ else
+ {
+ type = ESS_AS02_PCM_24b_48k;
+ }
+ }
+ else if ( ASDCP_SUCCESS(TestHeader.GetMDObjectByType(OBJ_TYPE_ARGS(TimedTextDescriptor))) )
+ {
+ type = ESS_AS02_TIMED_TEXT;
+ }
+ else if ( ASDCP_SUCCESS(TestHeader.GetMDObjectByType(OBJ_TYPE_ARGS(PIMFDynamicMetadataDescriptor))) )
+ {
+ type = ESS_DCDATA_UNKNOWN;
+ }
+ else if ( ASDCP_SUCCESS(TestHeader.GetMDObjectByType(OBJ_TYPE_ARGS(ISXDDataEssenceDescriptor))) )
+ {
+ type = ESS_AS02_ISXD;
+ }
+ else if ( ASDCP_SUCCESS(TestHeader.GetMDObjectByType(OBJ_TYPE_ARGS(ACESPictureSubDescriptor))) )
+ {
+ type = ESS_AS02_ACES;
+ }
+ }
}
else
{
{
type = ESS_JPEG_2000;
}
+ else if(memcmp(FB.RoData(), AS_02::ACES::Magic, sizeof(AS_02::ACES::Magic)) == 0)
+ {
+ type = ESS_AS02_ACES;
+ }
else if ( std::string((const char*)FB.RoData() + 8, 4) == "WAVE" )
{
if ( std::string((const char*)FB.RoData(), 4) == "RIFF" )
{
type = ESS_JPEG_2000;
}
+ else if(memcmp(FB.RoData(), AS_02::ACES::Magic, sizeof(AS_02::ACES::Magic)) == 0)
+ {
+ type = ESS_AS02_ACES;
+ }
else if ( ASDCP_SUCCESS(WavHeader.ReadFromBuffer(FB.RoData(), read_count, &data_offset)) )
{
switch ( WavHeader.samplespersec )
HMAC->Update(FB.RoData(), FB.Size() - HMAC_SIZE);
HMAC->Finalize();
- return HMAC->TestHMACValue(p);
+ Result_t result = RESULT_OK;
+ result = HMAC->TestHMACValue(p);
+
+ if (KM_FAILURE(result))
+ {
+ Result_t r = RESULT_OK;
+ char hmac_str[HMAC_SIZE*10];
+ char found_str[HMAC_SIZE*10];
+ byte_t hmac_buf[HMAC_SIZE];
+
+
+ Kumu::bin2hex(p, HMAC_SIZE, found_str, HMAC_SIZE*10);
+
+ r = HMAC->GetHMACValue(hmac_buf);
+ if ( KM_SUCCESS( r ) )
+ {
+ Kumu::bin2hex(hmac_buf, HMAC_SIZE, hmac_str, HMAC_SIZE*10);
+ }
+ else
+ {
+ snprintf(hmac_str, HMAC_SIZE*10, " - read error - ");
+ }
+
+ DefaultLogSink().Error("IntegrityPack failure: HMAC is %s, expecting %s.\n", found_str, hmac_str);
+ }
+
+ return result;
}
//