/*
* myLib - https://github.com/taktod/myLib
* Copyright (c) 2014 ttProject. All rights reserved.
*
* Licensed under The MIT license.
*/
package com.ttProject.container.mp4.stsd;
import org.apache.log4j.Logger;
import com.ttProject.container.mp4.Mp4Atom;
import com.ttProject.container.mp4.stsd.record.Avcc;
import com.ttProject.container.mp4.stsd.record.Esds;
import com.ttProject.nio.channels.IReadChannel;
import com.ttProject.unit.ISelector;
import com.ttProject.unit.IUnit;
import com.ttProject.unit.extra.BitLoader;
import com.ttProject.unit.extra.bit.Bit32;
import com.ttProject.util.IntUtil;
/**
* stsdが保持しているatomの内部データ解析
* @author taktod
*/
public class StsdAtomSelector implements ISelector {
/** ロガー */
private Logger logger = Logger.getLogger(StsdAtomSelector.class);
@Override
public IUnit select(IReadChannel channel) throws Exception {
Bit32 size = new Bit32();
Bit32 name = new Bit32();
BitLoader loader = new BitLoader(channel);
loader.load(size, name);
logger.info(IntUtil.makeHexString(name.get()));
String nameString = IntUtil.makeHexString(name.get());
Mp4Atom atom = null;
// .mp3もつくっておく必要あるかも?
if("mp4a".equals(nameString)) {
atom = new Mp4a(size, name);
}
else if("avc1".equals(nameString)) {
atom = new Avc1(size, name);
}
else if("avcC".equals(nameString)) {
atom = new Avcc(size, name);
}
else if("esds".equals(nameString)) {
atom = new Esds(size, name);
}
else {
throw new Exception("unknwon mp4Atom found.:" + nameString);
}
atom.minimumLoad(channel);
return atom;
}
}