/*
* myLib - https://github.com/taktod/myLib
* Copyright (c) 2014 ttProject. All rights reserved.
*
* Licensed under The MIT license.
*/
package com.ttProject.container.mkv.test;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import org.apache.log4j.Logger;
import org.junit.Test;
import com.ttProject.container.mkv.MkvTag;
import com.ttProject.container.mkv.type.DateUTC;
import com.ttProject.container.mkv.type.DocType;
import com.ttProject.container.mkv.type.DocTypeReadVersion;
import com.ttProject.container.mkv.type.DocTypeVersion;
import com.ttProject.container.mkv.type.Duration;
import com.ttProject.container.mkv.type.EBML;
import com.ttProject.container.mkv.type.MuxingApp;
import com.ttProject.container.mkv.type.ReferenceBlock;
import com.ttProject.container.mkv.type.SamplingFrequency;
import com.ttProject.container.mkv.type.SeekID;
import com.ttProject.container.mkv.type.Segment;
import com.ttProject.container.mkv.type.SimpleBlock;
import com.ttProject.container.mkv.type.Void;
import com.ttProject.frame.aac.AacFrame;
import com.ttProject.util.HexUtil;
/**
* test for to create each tag.
* @author taktod
*/
public class EachTagTest {
/** logger */
private Logger logger = Logger.getLogger(EachTagTest.class);
/**
* to make infinite segment element.
* @throws Exception
*/
@Test
public void InfiniteEbmlTagTest() throws Exception {
logger.info("InfiniteEbmlTagTest");
Segment segment = new Segment();
segment.setInfinite(true);
logger.info(HexUtil.toHex(segment.getData(), true));
logger.info("size:" + segment.getSize());
}
/**
* VoidTag
* @throws Exception
*/
@Test
public void VoidTest() throws Exception {
logger.info("VoidTest");
Void voidTag = new Void();
voidTag.setTagSize(15);
logger.info(HexUtil.toHex(voidTag.getData(), true));
logger.info("size:" + voidTag.getSize());
}
/**
* MkvBinaryTag
* @throws Exception
*/
@Test
public void MkvBinaryTest() throws Exception {
logger.info("MkvBinaryTest");
SeekID seekId = new SeekID();
seekId.setValue(HexUtil.makeBuffer("1549A966"));
logger.info(HexUtil.toHex(seekId.getData(), true));
logger.info("size:" + seekId.getSize());
// 53 AB 84 14 39 A9 66
}
/**
* MkvDateTag
* @throws Exception
*/
@Test
public void MkvDateTest() throws Exception {
logger.info("MkvDateTest");
DateUTC dateUTC = new DateUTC();
Date d = new SimpleDateFormat("d M yyyy HH:mm:ss z", Locale.JAPAN).parse("02 06 2008 16:20:31 JST");
dateUTC.setValue(d);
logger.info(dateUTC.toString());
logger.info(HexUtil.toHex(dateUTC.getData(), true));
logger.info("size:" + dateUTC.getSize());
// 44 61 88 03 AF FA 97 5A 4A B6 00
}
/**
* MkvFloatTag
* @throws Exception
*/
@Test
public void MkvFloatTest() throws Exception {
logger.info("MkvFloatTest");
SamplingFrequency samplingFrequency = new SamplingFrequency();
samplingFrequency.setValue(44100.0f);
logger.info(HexUtil.toHex(samplingFrequency.getData(), true));
logger.info("size:" + samplingFrequency.getSize());
// B5 84 47 2C 44 00
logger.info("duration test");
Duration duration = new Duration();
duration.setValue(1D);
logger.info(HexUtil.toHex(duration.getData(), true));
duration.setValue(1F);
logger.info(HexUtil.toHex(duration.getData(), true));
Void voidTag = new Void();
voidTag.setTagSize(9);
logger.info(HexUtil.toHex(voidTag.getData(), true));
}
/**
* MkvMasterTag
* @throws Exception
*/
@Test
public void MkvMasterTest() throws Exception {
logger.info("MkvMasterTest");
EBML ebml = new EBML();
logger.info(ebml);
DocType docType = new DocType();
docType.setValue("matroska");
ebml.addChild(docType);
DocTypeVersion docTypeVersion = new DocTypeVersion();
docTypeVersion.setValue(1);
ebml.addChild(docTypeVersion);
DocTypeReadVersion docTypeReadVersion = new DocTypeReadVersion();
docTypeReadVersion.setValue(1);
ebml.addChild(docTypeReadVersion);
ebml.getData();
logger.info(HexUtil.toHex(ebml.getData(), true));
for(MkvTag tag : ebml.getChildList()) {
logger.info(HexUtil.toHex(tag.getData(), true));
}
logger.info("size:" + ebml.getSize());
// 1A 45 DF A3 93 42 82 88 6D 61 74 72 6F 73 6B 61 42 87 81 01 42 85 81 01
}
/**
* MkvSignedIntTag
* negative value will cause trouble.
* @throws Exception
*/
@Test
public void MkvSignedIntTest() throws Exception {
logger.info("MkvSignedIntTest");
ReferenceBlock referenceBlock = new ReferenceBlock();
referenceBlock.setValue(5);
logger.info(HexUtil.toHex(referenceBlock.getData(), true));
logger.info("size:" + referenceBlock.getSize());
// FB 81 05(this test value is not come from actual data.)
}
/**
* MkvStringTag
* @throws Exception
*/
@Test
public void MkvStringTest() throws Exception {
logger.info("MkvStringTest");
DocType docType = new DocType();
docType.setValue("matroska");
logger.info(HexUtil.toHex(docType.getData(), true));
logger.info("size:" + docType.getSize());
// 42 82 88 6D 61 74 72 6F 73 6B 61
}
/**
* MkvUnsignedIntTag
* @throws Exception
*/
@Test
public void MkvUnsignedIntTest() throws Exception {
logger.info("MkvUnsignedIntTest");
DocTypeVersion docTypeVersion = new DocTypeVersion();
docTypeVersion.setValue(1);
logger.info(HexUtil.toHex(docTypeVersion.getData(), true));
logger.info("size:" + docTypeVersion.getSize());
// 42 87 81 01
}
/**
* MkvUtf8Tag
* @throws Exception
*/
@Test
public void MkvUtf8Test() throws Exception {
logger.info("MkvUtf8Test");
MuxingApp muxingApp = new MuxingApp();
muxingApp.setValue("libebml v0.7.7 + libmatroska v0.8.1");
logger.info(HexUtil.toHex(muxingApp.getData(), true));
logger.info("size:" + muxingApp.getSize());
// 4D 80 A3 6C 69 62 65 62 6D 6C 20 76 30 2E 37 2E 37 20 2B 20 6C 69 62 6D 61 74 72 6F 73 6B 61 20 76 30 2E 38 2E 31
}
/**
* SimpleBlock
* @throws Exception
*/
@Test
public void SimpleBlockTest() throws Exception {
logger.info("simpleBlockTest");
SimpleBlock simpleBlock = new SimpleBlock();
AacFrame frame = AacFrame.getMutedFrame(44100, 2, 0);
frame.setPts(1000);
frame.setTimebase(44100);
simpleBlock.addFrame(1, frame, 0);
logger.info(simpleBlock);
logger.info(HexUtil.toHex(simpleBlock.getData(), true));
}
}