/* * Copyright 2008 CoreMedia AG, Hamburg * * Licensed under the Apache License, Version 2.0 (the License); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an AS IS BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.coremedia.drm.packager.isoparser; import junit.framework.TestCase; import org.mp4parser.IsoFile; import org.mp4parser.support.BoxComparator; import org.mp4parser.tools.ByteBufferByteChannel; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.nio.channels.Channels; /** * Tests ISO Roundtrip. */ public class RoundTripTest extends TestCase { String defaultTestFileDir; @Override protected void setUp() throws Exception { super.setUp(); defaultTestFileDir = this.getClass().getProtectionDomain().getCodeSource().getLocation().getFile(); /* Logger.getLogger("").setLevel(Level.ALL); Handler[] handlers = Logger.getLogger("").getHandlers(); for (Handler handler : handlers) { handler.setLevel(Level.ALL); }*/ } /* public void testRoundDeleteMe() throws Exception { testRoundTrip_1("/suckerpunch-distantplanet_h1080p.mov"); }*/ public void testRoundTrip_TinyExamples_Old() throws Exception { testRoundTrip_1(defaultTestFileDir + "/Tiny Sample - OLD.mp4"); } public void testRoundTrip_TinyExamples_Metaxed() throws Exception { testRoundTrip_1(defaultTestFileDir + "/Tiny Sample - NEW - Metaxed.mp4"); } public void testRoundTrip_TinyExamples_Untouched() throws Exception { testRoundTrip_1(defaultTestFileDir + "/Tiny Sample - NEW - Untouched.mp4"); } public void testRoundTrip_1a() throws Exception { testRoundTrip_1(defaultTestFileDir + "/multiTrack.3gp"); } public void testRoundTrip_1b() throws Exception { testRoundTrip_1(defaultTestFileDir + "/MOV00006.3gp"); } public void testRoundTrip_1c() throws Exception { testRoundTrip_1(defaultTestFileDir + "/Beethoven - Bagatelle op.119 no.11 i.m4a"); } public void testRoundTrip_1d() throws Exception { testRoundTrip_1(defaultTestFileDir + "/test.m4p"); } public void testRoundTrip_1e() throws Exception { testRoundTrip_1(defaultTestFileDir + "/test-pod.m4a"); } public void testRoundTrip_1(String originalFile) throws Exception { long start1 = System.currentTimeMillis(); long start2 = System.currentTimeMillis(); IsoFile isoFile = new IsoFile(new FileInputStream(originalFile).getChannel()); long start3 = System.currentTimeMillis(); long start4 = System.currentTimeMillis(); Walk.through(isoFile); long start5 = System.currentTimeMillis(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); isoFile.getBox(Channels.newChannel(baos)); long start6 = System.currentTimeMillis(); /* System.err.println("Preparing tmp copy took: " + (start2 - start1) + "ms"); System.err.println("Parsing took : " + (start3 - start2) + "ms"); System.err.println("Writing took : " + (start6 - start3) + "ms"); System.err.println("Walking took : " + (start5 - start4) + "ms");*/ IsoFile copyViaIsoFileReparsed = new IsoFile(new ByteBufferByteChannel(baos.toByteArray())); BoxComparator.check(isoFile, copyViaIsoFileReparsed, "moov[0]/mvhd[0]", "moov[0]/trak[0]/tkhd[0]", "moov[0]/trak[0]/mdia[0]/mdhd[0]"); isoFile.close(); copyViaIsoFileReparsed.close(); // as windows cannot delete file when something is memory mapped and the garbage collector // doesn't necessarily free the Buffers quickly enough we cannot delete the file here (we could but only for linux) } }