+ if (len != ECINEMA_KDM_KEY_LENGTH && len != (ECINEMA_KDM_KEY_LENGTH + ECINEMA_KDM_NOT_VALID_BEFORE_LENGTH + ECINEMA_KDM_NOT_VALID_AFTER_LENGTH)) {
+ throw KDMError (
+ "Unexpected data block size in ECinema KDM.",
+ String::compose("Size was %1; expected %2 or %3", ECINEMA_KDM_KEY_LENGTH, ECINEMA_KDM_KEY_LENGTH + ECINEMA_KDM_NOT_VALID_BEFORE_LENGTH + ECINEMA_KDM_NOT_VALID_AFTER_LENGTH)
+ );
+ }
+
+ _content_key = dcp::Key (value + ECINEMA_KDM_KEY, ECINEMA_KDM_KEY_LENGTH);
+ if (len > ECINEMA_KDM_KEY_LENGTH) {
+ uint8_t* p = value + ECINEMA_KDM_NOT_VALID_BEFORE;
+ string b;
+ for (int i = 0; i < ECINEMA_KDM_NOT_VALID_BEFORE_LENGTH; ++i) {
+ b += *p++;
+ }
+ _not_valid_before = dcp::LocalTime (b);
+ string a;
+ for (int i = 0; i < ECINEMA_KDM_NOT_VALID_AFTER_LENGTH; ++i) {
+ a += *p++;
+ }
+ _not_valid_after = dcp::LocalTime (a);
+ }