This is an automated email from the ASF dual-hosted git repository.

nick pushed a commit to branch branch_1x
in repository https://gitbox.apache.org/repos/asf/tika.git


The following commit(s) were added to refs/heads/branch_1x by this push:
     new b0242ee  Backport to 1.x - TIKA-3310 Check if MP4 file's compatible 
brands match any of the expected values, from Peter Kronenberg
b0242ee is described below

commit b0242ee617857fe85db2ba5ce186f6c9965b67bd
Author: Nick Burch <n...@gagravarr.org>
AuthorDate: Sun Mar 14 20:53:38 2021 +0000

    Backport to 1.x - TIKA-3310 Check if MP4 file's compatible brands match any 
of the expected values, from Peter Kronenberg
---
 .../java/org/apache/tika/parser/mp4/MP4Parser.java | 26 ++++++++++++++++------
 1 file changed, 19 insertions(+), 7 deletions(-)

diff --git 
a/tika-parsers/src/main/java/org/apache/tika/parser/mp4/MP4Parser.java 
b/tika-parsers/src/main/java/org/apache/tika/parser/mp4/MP4Parser.java
index 933c53c..f06e556 100644
--- a/tika-parsers/src/main/java/org/apache/tika/parser/mp4/MP4Parser.java
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/mp4/MP4Parser.java
@@ -70,6 +70,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Set;
 
 /**
@@ -132,14 +133,25 @@ public class MP4Parser extends AbstractParser {
             // Grab the file type box
             FileTypeBox fileType = getOrNull(isoFile, FileTypeBox.class);
             if (fileType != null) {
-                // Identify the type
-                MediaType type = MediaType.application("mp4");
-                for (Map.Entry<MediaType, List<String>> e : 
typesMap.entrySet()) {
-                    if (e.getValue().contains(fileType.getMajorBrand())) {
-                        type = e.getKey();
-                        break;
-                    }
+                // Identify the type based on the major brand
+                Optional<MediaType> typeHolder = typesMap.entrySet()
+                        .stream()
+                        .filter(e -> 
e.getValue().contains(fileType.getMajorBrand()))
+                        .findFirst()
+                        .map(Map.Entry::getKey);
+
+                if (!typeHolder.isPresent()) {
+                    // If no match for major brand, see if any of the 
compatible brands match
+                    typeHolder = typesMap.entrySet()
+                            .stream()
+                            .filter(e -> e.getValue()
+                                    .stream()
+                                    
.anyMatch(fileType.getCompatibleBrands()::contains))
+                            .findFirst()
+                            .map(Map.Entry::getKey);
                 }
+
+                MediaType type = 
typeHolder.orElse(MediaType.application("mp4"));
                 metadata.set(Metadata.CONTENT_TYPE, type.toString());
 
                 if (type.getType().equals("audio")) {

Reply via email to