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