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));
         


Reply via email to