You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tika.apache.org by ni...@apache.org on 2015/01/27 18:49:26 UTC

svn commit: r1655100 - in /tika/trunk/tika-parsers/src: main/java/org/apache/tika/parser/mp4/MP4Parser.java test/java/org/apache/tika/parser/mp4/MP4ParserTest.java

Author: nick
Date: Tue Jan 27 17:49:26 2015
New Revision: 1655100

URL: http://svn.apache.org/r1655100
Log:
Use a locale-consistent DecimalFormat to set the mp4 duration, avoiding rounding issues TIKA-1530

Modified:
    tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/mp4/MP4Parser.java
    tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/mp4/MP4ParserTest.java

Modified: tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/mp4/MP4Parser.java
URL: http://svn.apache.org/viewvc/tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/mp4/MP4Parser.java?rev=1655100&r1=1655099&r2=1655100&view=diff
==============================================================================
--- tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/mp4/MP4Parser.java (original)
+++ tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/mp4/MP4Parser.java Tue Jan 27 17:49:26 2015
@@ -18,10 +18,13 @@ package org.apache.tika.parser.mp4;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 
@@ -78,6 +81,12 @@ import com.googlecode.mp4parser.boxes.ap
 public class MP4Parser extends AbstractParser {
     /** Serial version UID */
     private static final long serialVersionUID = 84011216792285L;
+    /** TODO Replace this with a 2dp Duration Property Converter */
+    private static final DecimalFormat DURATION_FORMAT = 
+            (DecimalFormat)NumberFormat.getNumberInstance(Locale.ROOT); 
+    static {
+        DURATION_FORMAT.applyPattern("0.0#");
+    }
     
     // Ensure this stays in Sync with the entries in tika-mimetypes.xml
     private static final Map<MediaType,List<String>> typesMap = new HashMap<MediaType, List<String>>();
@@ -164,8 +173,7 @@ public class MP4Parser extends AbstractP
 
                // Get the duration
                double durationSeconds = ((double)mHeader.getDuration()) / mHeader.getTimescale();
-               metadata.set(XMPDM.DURATION, durationSeconds);
-               // TODO Use this
+               metadata.set(XMPDM.DURATION, DURATION_FORMAT.format(durationSeconds));
 
                // The timescale is normally the sampling rate
                metadata.set(XMPDM.AUDIO_SAMPLE_RATE, (int)mHeader.getTimescale());

Modified: tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/mp4/MP4ParserTest.java
URL: http://svn.apache.org/viewvc/tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/mp4/MP4ParserTest.java?rev=1655100&r1=1655099&r2=1655100&view=diff
==============================================================================
--- tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/mp4/MP4ParserTest.java (original)
+++ tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/mp4/MP4ParserTest.java Tue Jan 27 17:49:26 2015
@@ -90,8 +90,7 @@ public class MP4ParserTest {
         assertEquals("44100", metadata.get(XMPDM.AUDIO_SAMPLE_RATE));
         assertEquals("Stereo", metadata.get(XMPDM.AUDIO_CHANNEL_TYPE));
         assertEquals("M4A", metadata.get(XMPDM.AUDIO_COMPRESSOR));
-        // Only compare two decimals to avoid floating point comparison error.
-        assertEquals("0.06", metadata.get(XMPDM.DURATION).substring(0, 4));
+        assertEquals("0.07", metadata.get(XMPDM.DURATION));
         
         assertEquals("iTunes 10.5.3.3", metadata.get(XMP.CREATOR_TOOL));