diff --git a/src/main/java/gov/nasa/pds/tools/util/EncodingMimeMapping.java b/src/main/java/gov/nasa/pds/tools/util/EncodingMimeMapping.java index 7af4f609e..f8f784046 100644 --- a/src/main/java/gov/nasa/pds/tools/util/EncodingMimeMapping.java +++ b/src/main/java/gov/nasa/pds/tools/util/EncodingMimeMapping.java @@ -9,6 +9,7 @@ public enum EncodingMimeMapping { GIF(Arrays.asList("gif")), J2C(Arrays.asList("j2c", "jp2", "mj2", "mjp2")), JPEG(Arrays.asList("jpg", "jpeg")), + M4A(Arrays.asList("m4a")), MP4(Arrays.asList("mp4")), NEF(Arrays.asList("nef")), PDF(Arrays.asList("pdf")), @@ -34,6 +35,7 @@ public static EncodingMimeMapping find (String encoding) throws IllegalArgumentE if (encoding.equalsIgnoreCase("JP2")) return J2C; if (encoding.equalsIgnoreCase("JPEG")) return JPEG; if (encoding.equalsIgnoreCase("MMM ODR Stream")) return DAT; + if (encoding.equalsIgnoreCase("M4A/AAC")) return M4A; if (encoding.equalsIgnoreCase("MP4/H.264")) return MP4; if (encoding.equalsIgnoreCase("MP4/H.264/AAC")) return MP4; if (encoding.equalsIgnoreCase("MSSS Camera Mini Header")) return DAT; diff --git a/src/main/java/gov/nasa/pds/tools/validate/ProblemType.java b/src/main/java/gov/nasa/pds/tools/validate/ProblemType.java index 4155f961d..0ce1c196e 100644 --- a/src/main/java/gov/nasa/pds/tools/validate/ProblemType.java +++ b/src/main/java/gov/nasa/pds/tools/validate/ProblemType.java @@ -252,6 +252,7 @@ public enum ProblemType { NON_MP4_FILE("warning.file.not_mp4_mimetype"), NON_WAV_FILE("warning.file.not_wav_mimetype"), + CONTENT_VALIDATION_UNSUPPORTED("warning.validation.content_validation_not_yet_supported"), NON_REGISTERED_PRODUCT("warning.product_not_registered"), diff --git a/src/main/java/gov/nasa/pds/tools/validate/rule/pds4/FileReferenceValidationRule.java b/src/main/java/gov/nasa/pds/tools/validate/rule/pds4/FileReferenceValidationRule.java index 1660e0e33..a9481a21b 100644 --- a/src/main/java/gov/nasa/pds/tools/validate/rule/pds4/FileReferenceValidationRule.java +++ b/src/main/java/gov/nasa/pds/tools/validate/rule/pds4/FileReferenceValidationRule.java @@ -493,7 +493,15 @@ private boolean validateFileAreaDefinitionAndContent(String fileName, TinyNodeIm } else if (doctype.equalsIgnoreCase("MP4/H.264")){ new AudioVideo(this.getListener(), target, urlRef).checkMetadata (false, true); } else if (doctype.equalsIgnoreCase("M4A/AAC")){ - new AudioVideo(this.getListener(), target, urlRef).checkMetadata (true, false); + // Content validation for M4A/AAC is not yet fully implemented. + // Consult PDS4 experts to determine how to validate these products. + this.getListener().addProblem(new ValidationProblem( + new ProblemDefinition(ExceptionType.WARNING, + ProblemType.CONTENT_VALIDATION_UNSUPPORTED, + "Content validation for encoding type 'M4A/AAC' is not yet supported by this version of validate. " + + "Please consult PDS4 experts for guidance on validating M4A/AAC audio products: " + + urlRef.toString()), + target)); } else if (doctype.equalsIgnoreCase("WAV")) { new AudioVideo(this.getListener(), target, urlRef).checkWavHeader(); } else if (!doctype.equalsIgnoreCase("UTF-8 Text") diff --git a/src/test/resources/features/4.2.x.feature b/src/test/resources/features/4.2.x.feature index a2303f1e8..a8206af31 100644 --- a/src/test/resources/features/4.2.x.feature +++ b/src/test/resources/features/4.2.x.feature @@ -12,4 +12,7 @@ Feature: 4.2.x | 1601 | 1 | "github1601" | "-R pds4.bundle --skip-context-validation -t {datasrc}/bundle_test_1601.xml" | "summary:totalErrors=1,summary:referentialIntegrity:failed=1,summary:messageTypes:error.integrity.member_not_found=1" | | 1601 | 2 | "github1601" | "-R pds4.bundle --skip-context-validation --skip-strict-collection-membership -t {datasrc}/bundle_test_1601.xml" | "summary:totalWarnings=1,summary:messageTypes:warning.integrity.member_not_found=1" | +# github1635: M4A/AAC should be a recognized encoding type; content validation not yet supported → WARNING not ERROR +| 1635 | 1 | "github1635" | "--skip-context-validation -t {datasrc}/audio_m4a.xml" | "summary:totalWarnings=1,summary:messageTypes:warning.validation.content_validation_not_yet_supported=1" | + #end diff --git a/src/test/resources/github1635/audio_m4a.xml b/src/test/resources/github1635/audio_m4a.xml new file mode 100644 index 000000000..c95fc6244 --- /dev/null +++ b/src/test/resources/github1635/audio_m4a.xml @@ -0,0 +1,62 @@ + + + + + + + urn:nasa:pds:audio_example:data:sample_m4a_audio + 1.0 + Sample M4A/AAC Audio File + 1.20.0.0 + Product_Observational + + + + + 2024-01-01Z + 2024-01-01Z + + + Test Mission + Mission + + urn:nasa:pds:context:investigation:mission.mars2020 + data_to_investigation + + + + + Test Instrument + Instrument + + urn:nasa:pds:context:instrument:mars2020.camera + is_instrument + + + + + Mars + Planet + + urn:nasa:pds:context:target:planet.mars + data_to_target + + + + + + + sample.m4a + 2024-01-01T00:00:00 + + + sample_audio + 0 + M4A/AAC + Sample M4A audio file + + + diff --git a/src/test/resources/github1635/sample.m4a b/src/test/resources/github1635/sample.m4a new file mode 100644 index 000000000..16295020f Binary files /dev/null and b/src/test/resources/github1635/sample.m4a differ