This commit is contained in:
Oswald de Bruin 2013-06-25 16:15:01 +02:00 committed by Erik Zandvliet
parent 3f97951954
commit b9a0861c12

View file

@ -38,17 +38,11 @@ namespace Converters {
//moov box //moov box
MP4::MOOV moovBox; MP4::MOOV moovBox;
MP4::MVHD mvhdBox; MP4::MVHD mvhdBox;
//todo: set movie header box
moovBox.setContent(mvhdBox, 0); moovBox.setContent(mvhdBox, 0);
//start arbitrary track addition //start arbitrary track addition
int boxOffset = 1; int boxOffset = 1;
input.getMeta()["tracks"]["audio0"] = input.getMeta()["audio"];
input.getMeta()["tracks"]["audio0"]["type"] = "audio";
input.getMeta()["tracks"]["audio0"]["trackid"] = 1;
input.getMeta()["tracks"]["video0"] = input.getMeta()["video"];
input.getMeta()["tracks"]["video0"]["keylen"] = input.getMeta()["keylen"];
input.getMeta()["tracks"]["video0"]["trackid"] = 2;
input.getMeta()["tracks"]["video0"]["type"] = "video";
for (JSON::ObjIter it = input.getMeta()["tracks"].ObjBegin(); it != input.getMeta()["tracks"].ObjEnd(); it++){ for (JSON::ObjIter it = input.getMeta()["tracks"].ObjBegin(); it != input.getMeta()["tracks"].ObjEnd(); it++){
MP4::TRAK trakBox; MP4::TRAK trakBox;
MP4::TKHD tkhdBox; MP4::TKHD tkhdBox;
@ -63,19 +57,22 @@ namespace Converters {
MP4::MDIA mdiaBox; MP4::MDIA mdiaBox;
MP4::MDHD mdhdBox; MP4::MDHD mdhdBox;
// todo: MDHD content
mdiaBox.setContent(mdhdBox, 0); mdiaBox.setContent(mdhdBox, 0);
MP4::HDLR hdlrBox; MP4::HDLR hdlrBox;
// todo: HDLR content
mdiaBox.setContent(hdlrBox, 1); mdiaBox.setContent(hdlrBox, 1);
MP4::MINF minfBox; MP4::MINF minfBox;
MP4::DINF dinfBox; MP4::DINF dinfBox;
MP4::DREF drefBox; MP4::DREF drefBox;
// todo: DREF content
dinfBox.setContent(drefBox,0); dinfBox.setContent(drefBox,0);
minfBox.setContent(dinfBox,0); minfBox.setContent(dinfBox,0);
MP4::STBL stblBox; MP4::STBL stblBox;
MP4::STSD stsdBox; MP4::STSD stsdBox;
/*std::string tmpStr = it->second["type"].asString(); std::string tmpStr = it->second["type"].asString();
if (tmpStr == "video"){//boxname = codec if (tmpStr == "video"){//boxname = codec
MP4::VisualSampleEntry vse; MP4::VisualSampleEntry vse;
std::string tmpStr2 = it->second["codec"]; std::string tmpStr2 = it->second["codec"];
@ -89,13 +86,13 @@ namespace Converters {
MP4::AudioSampleEntry ase; MP4::AudioSampleEntry ase;
std::string tmpStr2 = it->second["codec"]; std::string tmpStr2 = it->second["codec"];
if (tmpStr2 == "AAC"){ if (tmpStr2 == "AAC"){
ase.setCodec("aac "); ase.setCodec("mp4a");
} }
ase.setSampleRate(it->second["rate"].asInt()); ase.setSampleRate(it->second["rate"].asInt());
ase.setChannelCount(it->second["channels"].asInt()); ase.setChannelCount(it->second["channels"].asInt());
ase.setSampleSize(it->second["length"].asInt()); ase.setSampleSize(it->second["length"].asInt());
stsdBox.setEntry(ase,0); stsdBox.setEntry(ase,0);
}*/ }
stblBox.setContent(stsdBox,0); stblBox.setContent(stsdBox,0);
MP4::STTS sttsBox; MP4::STTS sttsBox;
@ -108,26 +105,27 @@ namespace Converters {
stblBox.setContent(sttsBox,1); stblBox.setContent(sttsBox,1);
MP4::STSC stscBox; MP4::STSC stscBox;
for (int i = 0; i < it->second["keylen"].size(); i++){
for (int i = 0; i < it->second["keys"].size(); i++){
MP4::STSCEntry newEntry; MP4::STSCEntry newEntry;
newEntry.firstChunk = i; newEntry.firstChunk = i;//["keys
newEntry.samplesPerChunk = 1; newEntry.samplesPerChunk = 1;//["keys"]["parts"].size
newEntry.sampleDescriptionIndex = i; newEntry.sampleDescriptionIndex = i;
stscBox.setSTSCEntry(newEntry, i); stscBox.setSTSCEntry(newEntry, i);
} }
stblBox.setContent(stscBox,2); stblBox.setContent(stscBox,2);
MP4::STSZ stszBox; MP4::STSZ stszBox;
/// \todo calculate byte position of DTSCkeyframes in MP4Sample /// \todo calculate byte position of DTSCkeyframes in MP4Sample
// in it->second["keys"]["parts"]
stszBox.setSampleSize(0); stszBox.setSampleSize(0);
for (int i = 0; i < it->second["keylen"].size(); i++){ for (int i = 0; i < it->second["keys"].size(); i++){
stszBox.setEntrySize(0, i); stszBox.setEntrySize(0, i);
} }
stblBox.setContent(stszBox,3); stblBox.setContent(stszBox,3);
MP4::STCO stcoBox; MP4::STCO stcoBox;
for (int i = 0; i < it->second["keylen"].size(); i++){ for (int i = 0; i < it->second["keys"].size(); i++){
stcoBox.setChunkOffset(0, i); stcoBox.setChunkOffset(0, i);
} }
stblBox.setContent(stcoBox,4); stblBox.setContent(stcoBox,4);
@ -146,17 +144,22 @@ namespace Converters {
//for(input.seekNext(); input.getJSON(); input.seekNext()) //for(input.seekNext(); input.getJSON(); input.seekNext())
//cout << input.getJSON["data"].asString() //cout << input.getJSON["data"].asString()
//audio
// ToPack.append(TS::GetAudioHeader(Strm.lastData().size(), Strm.metadata["audio"]["init"].asString()));
// ToPack.append(Strm.lastData());
printf("%c%c%c%cmdat", 0x00,0x00,0x01,0x00); printf("%c%c%c%cmdat", 0x00,0x00,0x01,0x00);
//std::cout << "\200\000\000\010mdat"; //std::cout << "\200\000\000\010mdat";
for(input.seekNext(); input.getJSON(); input.seekNext()){ std::set<int> selector;
if(input.getJSON()["datatype"] == "video" /*|| input.getJSON()["datatype"] == "audio"*/){ for (JSON::ObjIter trackIt = meta["tracks"].ObjBegin(); trackIt != meta["tracks"].ObjEnd(); trackIt++){
std::cout << input.getJSON()["data"].asString(); selector.insert(trackIt->second["trackid"].asInt());
}
} }
input.selectTracks(selector);
input.seek_time(0);
input.seekNext();
while (input.getJSON()){
//blaat
input.seekNext();
}
return 0; return 0;
} //DTSC2MP4 } //DTSC2MP4