From 12fa04dffdd232e9b0efd699dd7e90fd5bdafaed Mon Sep 17 00:00:00 2001 From: Oswald de Bruin Date: Wed, 22 May 2013 15:58:31 +0200 Subject: [PATCH] Making DTSC2MP4 conversion --- src/Makefile.am | 2 ++ src/converters/dtsc2mp4.cpp | 65 ++++++++++++++++++++++++++++++++++--- 2 files changed, 62 insertions(+), 5 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index 21476191..1b45145d 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -30,6 +30,7 @@ bin_PROGRAMS+=MistDTSCFix bin_PROGRAMS+=MistDTSCMerge bin_PROGRAMS+=MistDTSC2TS bin_PROGRAMS+=MistDTSC2OGG +bin_PROGRAMS+=MistDTSC2MP4 bin_PROGRAMS+=MistSRT2DTSC bin_PROGRAMS+=MistOGG2DTSC bin_PROGRAMS+=MistAnalyserRTMP @@ -70,6 +71,7 @@ MistDTSCFix_SOURCES=converters/dtscfix.cpp MistDTSCMerge_SOURCES=converters/dtscmerge.cpp MistDTSC2TS_SOURCES=converters/dtsc2ts.cpp MistSRT2DTSC_SOURCES=converters/srt2dtsc.cpp +MistDTSC2MP4_SOURCES=converters/dtsc2mp4.cpp #analysers directory (MistAnalyser*) MistAnalyserRTMP_SOURCES=analysers/rtmp_analyser.cpp diff --git a/src/converters/dtsc2mp4.cpp b/src/converters/dtsc2mp4.cpp index f1a03b08..2d116bf6 100644 --- a/src/converters/dtsc2mp4.cpp +++ b/src/converters/dtsc2mp4.cpp @@ -10,7 +10,9 @@ #include #include #include +#include #include //DTSC support +#include //MP4 support #include ///\brief Holds everything unique to converters. @@ -19,15 +21,68 @@ namespace Converters { ///\brief Converts DTSC from file to MP4 on stdout. ///\return The return code for the converter. int DTSC2MP4(Util::Config & conf){ - DTSC::File input(conf.getString("filename"); + DTSC::File input(conf.getString("filename")); + std::cerr << input.getMeta()["tracks"]["video0"].size() << std::endl; //ftyp box - //pdin box + MP4::FTYP ftypBox; + std::cout << std::string(ftypBox.asBox(),ftypBox.boxedSize()); //moov box - //moof box - //mfra box + MP4::MOOV moovBox; + MP4::MVHD mvhdBox; + moovBox.setContent(mvhdBox, 0); + + //start arbitrary + int boxOffset = 1; + for (JSON::ObjIter it = input.getMeta()["tracks"].ObjBegin(); it != input.getMeta()["tracks"].ObjEnd(); it++){ + MP4::TRAK trakBox; + MP4::TKHD tkhdBox; + std::cerr << it->second["trackid"].asInt() << std::endl; + tkhdBox.setTrackID(it->second["trackid"].asInt()); + + if (it->second.isMember("width")){ + tkhdBox.setWidth(it->second["width"].asInt() << 16); + } + if (it->second.isMember("height")){ + tkhdBox.setHeight(it->second["height"].asInt() << 16); + } + trakBox.setContent(tkhdBox, 0); + + MP4::MDIA mdiaBox; + MP4::MDHD mdhdBox; + mdiaBox.setContent(mdhdBox, 0); + + MP4::HDLR hdlrBox; + mdiaBox.setContent(hdlrBox, 1); + MP4::MINF minfBox; + MP4::DINF dinfBox; + MP4::DREF drefBox; + dinfBox.setContent(drefBox,0); + minfBox.setContent(dinfBox,0); + + MP4::STBL stblBox; + MP4::STSD stsdBox; + stblBox.setContent(stsdBox,0); + + MP4::STSS stssBox; + stblBox.setContent(stssBox,1); + + MP4::STSC stscBox; + stblBox.setContent(stscBox,2); + + MP4::STCO stcoBox; + stblBox.setContent(stcoBox,3); + minfBox.setContent(stblBox,1); + mdiaBox.setContent(minfBox, 2); + trakBox.setContent(mdiaBox, 1); + moovBox.setContent(trakBox, boxOffset); + boxOffset++; + } + //end arbitrary + //std::cout << input.getMeta()["audio"].toPrettyString() << std::endl; + std::cout << std::string(moovBox.asBox(),moovBox.boxedSize()); //mdat box alot return 0; - } //FLV2DTSC + } //DTSC2MP4 } //Converter namespace