OSDN Git Service

add tstools.
authorgn64_jp <gn64_jp@4e526526-5e11-4fc0-8910-f8fd03428081>
Sat, 26 Dec 2009 13:51:02 +0000 (13:51 +0000)
committergn64_jp <gn64_jp@4e526526-5e11-4fc0-8910-f8fd03428081>
Sat, 26 Dec 2009 13:51:02 +0000 (13:51 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/rec10@367 4e526526-5e11-4fc0-8910-f8fd03428081

127 files changed:
tstools/BonTsDemux/BonTsDemux.exe [new file with mode: 0755]
tstools/BonTsDemux/BonTsDemux.txt [new file with mode: 0755]
tstools/BonTsDemux/cap_sts_sea.ini [new file with mode: 0755]
tstools/BonTsDemux/ffmpeg.exe [new file with mode: 0755]
tstools/DtsEdit/DtsEdit.exe [new file with mode: 0644]
tstools/DtsEdit/License.txt [new file with mode: 0644]
tstools/DtsEdit/gpl.txt [new file with mode: 0644]
tstools/DtsEdit/readme.txt [new file with mode: 0644]
tstools/DtsEdit/src/DtsEdit.cpp [new file with mode: 0644]
tstools/DtsEdit/src/DtsEdit.sln [new file with mode: 0644]
tstools/DtsEdit/src/DtsEdit.vcproj [new file with mode: 0644]
tstools/DtsEdit/src/EditMain.cpp [new file with mode: 0644]
tstools/DtsEdit/src/EditMain.h [new file with mode: 0644]
tstools/DtsEdit/src/Help.cpp [new file with mode: 0644]
tstools/DtsEdit/src/Help.h [new file with mode: 0644]
tstools/DtsEdit/src/common.cpp [new file with mode: 0644]
tstools/DtsEdit/src/common.h [new file with mode: 0644]
tstools/DtsEdit/src/debug.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/avparse.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/base_coding.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/bifs.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/bifsengine.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/bitstream.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/color.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/compositor.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/config_file.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/constants.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/crypt.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/download.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/esi.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/events.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/ietf.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/internal/avilib.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/internal/bifs_dev.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/internal/bifs_tables.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/internal/camera.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/internal/compositor_dev.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/internal/config.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/internal/config_static.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/internal/crypt_dev.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/internal/ietf_dev.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/internal/isomedia_dev.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/internal/laser_dev.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/internal/media_dev.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/internal/mesh.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/internal/odf_dev.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/internal/ogg.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/internal/scenegraph_dev.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/internal/swf_dev.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/internal/terminal_dev.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/internal/vobsub.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/ismacryp.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/iso639.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/isomedia.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/laser.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/libgpac_static.lib [new file with mode: 0644]
tstools/DtsEdit/src/gpac/libgpac_static_msvcr.lib [new file with mode: 0644]
tstools/DtsEdit/src/gpac/list.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/math.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/media_tools.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/mediaobject.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/module.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/modules/audio_out.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/modules/codec.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/modules/font.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/modules/ipmp.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/modules/js_usr.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/modules/raster2d.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/modules/service.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/modules/term_ext.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/modules/video_out.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/mpeg4_odf.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/mpegts.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/network.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/nodes_mpeg4.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/nodes_svg.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/nodes_x3d.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/nodes_xbl.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/options.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/path2d.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/scene_manager.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/scenegraph.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/scenegraph_svg.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/scenegraph_vrml.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/setup.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/svg_types.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/sync_layer.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/term_info.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/terminal.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/thread.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/token.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/tools.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/user.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/utf.h [new file with mode: 0644]
tstools/DtsEdit/src/gpac/xml.h [new file with mode: 0644]
tstools/DtsEdit/src/stdafx.cpp [new file with mode: 0644]
tstools/DtsEdit/src/stdafx.h [new file with mode: 0644]
tstools/DtsEdit/src/stdint.h [new file with mode: 0644]
tstools/DtsEdit/ディレイカット.bat [new file with mode: 0644]
tstools/Makefile [new file with mode: 0755]
tstools/cfr2tc/cfr2tc-README.txt [new file with mode: 0644]
tstools/cfr2tc/cfr2tc.exe [new file with mode: 0644]
tstools/cfr2tc/cfr2tc/cfr2tc.cpp [new file with mode: 0644]
tstools/cfr2tc/cfr2tc/cfr2tc.rc [new file with mode: 0644]
tstools/cfr2tc/cfr2tc/cfr2tc.sln [new file with mode: 0644]
tstools/cfr2tc/cfr2tc/cfr2tc.vcproj [new file with mode: 0644]
tstools/cfr2tc/cfr2tc/resource.h [new file with mode: 0644]
tstools/cfr2tc/gpl.txt [new file with mode: 0644]
tstools/epgdump/Makefile [new file with mode: 0755]
tstools/epgdump/aribstr.c [new file with mode: 0755]
tstools/epgdump/aribstr.h [new file with mode: 0755]
tstools/epgdump/eit.c [new file with mode: 0755]
tstools/epgdump/eit.h [new file with mode: 0755]
tstools/epgdump/epgdump.c [new file with mode: 0755]
tstools/epgdump/epgdump_segfault_fix_patch(last).txt [new file with mode: 0755]
tstools/epgdump/patch2ch [new file with mode: 0755]
tstools/epgdump/patch_r2 [new file with mode: 0755]
tstools/epgdump/readme.txt [new file with mode: 0755]
tstools/epgdump/sdt.c [new file with mode: 0755]
tstools/epgdump/sdt.h [new file with mode: 0755]
tstools/epgdump/ts.c [new file with mode: 0755]
tstools/epgdump/ts.h [new file with mode: 0755]
tstools/epgdump/ts_ctl.h [new file with mode: 0755]
tstools/epgdump/util.c [new file with mode: 0755]
tstools/epgdump/util.h [new file with mode: 0755]
tstools/epgdump/xmldata.c [new file with mode: 0755]
tstools/jTsSplitter/jTsSplitter.jar [new file with mode: 0644]

diff --git a/tstools/BonTsDemux/BonTsDemux.exe b/tstools/BonTsDemux/BonTsDemux.exe
new file mode 100755 (executable)
index 0000000..8ea97f4
Binary files /dev/null and b/tstools/BonTsDemux/BonTsDemux.exe differ
diff --git a/tstools/BonTsDemux/BonTsDemux.txt b/tstools/BonTsDemux/BonTsDemux.txt
new file mode 100755 (executable)
index 0000000..0f47538
--- /dev/null
@@ -0,0 +1,270 @@
+BonTsDemux mod 10k5 (modified by kt)\r
+\r
+LxbEvo.FpE\8e\81\82É\82æ\82é BonTsDemux mod 10 \82ð\89ü\91¢\82µ\82½\82à\82Ì\81B\r
+\r
+AAC \82Ì Demux \82ð\83o\83b\83`\8f\88\97\9d\82Å\82«\82é\83\\83t\83g\82ª\8c©\93\96\82½\82ç\82È\82©\82Á\82½\82½\82ß\82É\8dì\90¬\81B\r
+\r
+\81\9b\95Ï\8dX\93_\r
+\81EAAC \82Ì Demux \8b@\94\\82ð\95\9c\8a\88\81B\r
+  AAC Demux \8e\9e\82É\82Í\81A\83t\83@\83C\83\8b\96¼\82É\92x\89\84\8e\9e\8aÔ\82ð\93ü\82ê\82é\82æ\82¤\82É\95Ï\8dX\81B\r
+  \81iDGIndex \82È\82Ç\82Æ\93¯\82\8c`\8e®\81B\81j\r
+\r
+\81E\89¹\90º\82Ì\92x\89\84\8e\9e\8aÔ\82ð\95â\90³\82Å\82«\82é\82æ\82¤\82É\95Ï\8dX\81B\r
+  \83R\83}\83\93\83h\83\89\83C\83\93\82Å\82Í -delay nnn \82Å\8ew\92è\89Â\94\\81B\81innn \82Í\81Ams\92P\88Ê\82Ì\90®\90\94\81j\r
+\r
+\81ERF64\83T\83|\81[\83g\81AVideo Frame\95â\8a®\82Ì\90Ý\92è\82ð\83t\83@\83C\83\8b\82²\82Æ\82É\8bL\89¯\82·\82é\82æ\82¤\82É\95Ï\8dX\81B\r
+  D&D \82Å\83t\83@\83C\83\8b\82ð\93o\98^\82·\82é\8fê\8d\87\82Í\81A\91¼\82Ì\83I\83v\83V\83\87\83\93\82Æ\93¯\97l\82É\81A\90æ\82É\8aó\96]\82Ì\90Ý\92è\82ð\r
+  \91I\82ñ\82Å\82¨\82¢\82½\8fó\91Ô\82Å D&D \82·\82é\82±\82Æ\81B\r
+\r
+\81E\83X\83N\83\89\83\93\83u\83\8b\89ð\8f\9c\82ð\8ds\82í\82È\82¢\83I\83v\83V\83\87\83\93\82ð\92Ç\89Á\81B\r
+  \83R\83}\83\93\83h\83\89\83C\83\93\82Å\82Í -nd \82Å\8ew\92è\89Â\94\\81B\r
+  \81i\83X\83N\83\89\83\93\83u\83\8b\89ð\8f\9c\8dÏ\82Ý\83t\83@\83C\83\8b\82Ì\8f\88\97\9d\8d\82\91¬\89»\97p\81j\r
+\r
+\81E\91\80\8dì\90«\8cü\8fã\82Ì\82½\82ß\81A\88ê\95\94\82Ì\83{\83^\83\93\93\99\82É\83A\83N\83Z\83X\83L\81[\82ð\92Ç\89Á\81B\r
+\r
+\81E\82»\82Ì\91¼\82Ì\8d×\82©\82¢\95Ï\8dX\82Í\89º\8bL\82Ì\97\9a\97ð\82ð\8eQ\8fÆ\82Ì\82±\82Æ\81B\r
+\r
+\r
+\81\9b\83r\83\8b\83h\82É\95K\97v\82È\8aÂ\8b«/\83\89\83C\83u\83\89\83\8a\r
+\81EMicrosoft Visual Studio 2003 \88È\8fã\r
+\81EFAAD 2.6.1\r
+  http://www.audiocoding.com/downloads.html\r
+  \81i\83R\83\93\83p\83C\83\8b\82µ\82Ä\82Å\82«\82½\83\8a\83\8a\81[\83X\94Å libfaad.lib \82ð BonTsDemux.vcproj \82È\82Ç\82Æ\r
+    \93¯\82\8aK\91w\82É\92u\82­\82±\82Æ\81B\82Ü\82½\81A\83f\83o\83b\83O\94Å\82Ì\83\89\83C\83u\83\89\83\8a\82Í libfaadd.lib \82É\83\8a\83l\81[\83\80\r
+    \82µ\82Ä\93¯\82\8aK\91w\82É\92u\82­\82±\82Æ\81B\81j\r
+\r
+\81\9b\97\9a\97ð\r
+2009/01/10  mod 10k5\r
+\81E\91\80\8dì\90«\8cü\8fã\82Ì\82½\82ß\81A\88ê\95\94\82Ì\83{\83^\83\93\93\99\82É\83A\83N\83Z\83X\83L\81[\82ð\92Ç\89Á\81B\r
+\81EMFC \82ð\83X\83^\83e\83B\83b\83N\83\8a\83\93\83N\82·\82é\82æ\82¤\82É\95Ï\8dX\81B\81i\83\89\83\93\83^\83C\83\80\83\89\83C\83u\83\89\83\8a\82Í\95s\97v\82É\81B\81j\r
+\r
+2008/09/13  mod 10k4\r
+\81E\83X\83N\83\89\83\93\83u\83\8b\89ð\8f\9c\82ð\8ds\82í\82È\82¢\83I\83v\83V\83\87\83\93\82ð\92Ç\89Á\81B\r
+\81E\90Ý\92è\82ð\95Ï\8dX\82µ\82Ä\82¢\82È\82¢\82É\82à\8aÖ\82í\82ç\82¸\81A\95Ï\8a·\8aJ\8en\8e\9e\82É\83o\83b\83`\83\8a\83X\83g\82É\92Ç\89Á\93o\98^\82³\82ê\82é\r
+  \8fê\8d\87\82ª\82 \82Á\82½\82Ì\82ð\8fC\90³\81B\r
+\r
+2008/09/10  mod 10k3\r
+\81E\83\89\83\93\83^\83C\83\80\83\89\83C\83u\83\89\83\8a\82ª\95s\91«\82µ\82Ä\82¢\82½\82Ì\82Å\92Ç\89Á\81B\81i\92\86\90g\82Ì\95Ï\8dX\82Í\96³\82µ\81B\81j\r
+\r
+2008/09/07  mod 10k3\r
+\81Emod 10k2 \82Å\81A\89¹\90º\82Ì\92x\89\84\8e\9e\8aÔ\82Ì\95â\90³\82ª\8cø\82¢\82Ä\82¢\82È\82©\82Á\82½\82Ì\82ð\8fC\90³\81B\r
+  \82È\82¨\81A\95â\90³\92l\82É\82 \82Ü\82è\91å\82«\82È\92l\81i\90\94\95b\88È\8fã\81H\81j\82ð\93ü\82ê\82é\82Æ\93®\8dì\82ª\82¨\82©\82µ\82­\82È\82é\82©\82à\r
+  \92m\82ê\82È\82¢\82Ì\82Å\92\8d\88Ó\81B\r
+\r
+2008/09/07  mod 10k2\r
+\81E\8f\88\97\9d\82ª\8fI\97¹\82µ\82½\82ç\83E\83B\83\93\83h\83E\82ð\93_\96Å\82³\82¹\82é\82æ\82¤\82É\95Ï\8dX\81B\r
+\81ERF64\83T\83|\81[\83g\81AVideo Frame\95â\8a®\82Ì\90Ý\92è\82ð\83t\83@\83C\83\8b\82²\82Æ\82É\95Û\91\82·\82é\82æ\82¤\82É\95Ï\8dX\81B\r
+\81E\89¹\90º\82Ì\92x\89\84\8e\9e\8aÔ\82ð\95â\90³\82Å\82«\82é\82æ\82¤\82É\95Ï\8dX\81B\r
+\81E\83^\83u\83I\81[\83_\81[\82ª\82ß\82¿\82á\82­\82¿\82á\82¾\82Á\82½\82Ì\82ð\8fC\90³\81B\r
+\81E\83\89\83\93\83^\83C\83\80\83\89\83C\83u\83\89\83\8a\82ð\93¯\8d«\81B\r
+\r
+2008/08/25  mod 10k1\r
+\81Emod 10 \82ð\89ü\91¢\81B\r
+\81EAAC \82Ì Demux \8b@\94\\82ð\95\9c\8a\88\81B\r
+  AAC Demux \8e\9e\82É\82Í\81A\83t\83@\83C\83\8b\96¼\82É\92x\89\84\8e\9e\8aÔ\82ð\93ü\82ê\82é\82æ\82¤\82É\95Ï\8dX\81B\r
+  \81iDGIndex \82È\82Ç\82Æ\93¯\82\8c`\8e®\81B\81j\r
+\81EWin2k\81iWinXP \82Å\83r\83W\83\85\83A\83\8b\83X\83^\83C\83\8b off \82Ì\8fê\8d\87\82à\81H\81j\82Å\81A\83h\83\8d\83b\83v\83_\83E\83\93\r
+  \83R\83\93\83{\83{\83b\83N\83X\82ª 1\8ds\82µ\82©\95\\8e¦\82³\82ê\82È\82¢\82Ì\82ð\8fC\90³\81B\r
+\81E\83o\83b\83`\83\8a\83X\83g\82Ì\95\\8e¦\95\9d\82ð\8ag\91å\81B\r
+\81E\83t\83@\83C\83\8b\83I\81[\83v\83\93\83_\83C\83A\83\8d\83O\82Ì\83T\83C\83Y\82ð\89Â\95Ï\82É\90Ý\92è\81B\r
+\81E\82»\82Ì\91¼\81AVS2003 \82Å\83R\83\93\83p\83C\83\8b\82Å\82«\82é\82æ\82¤\82É\82·\82é\82½\82ß\82Ì\83\\81[\83X\8fã\82Ì\8fC\90³\82È\82Ç\81B\r
+\r
+\r
+\r
+----------------------------------------------------------------------------\r
+BonTsDemux mod 10 readme\r
+----------------------------------------------------------------------------\r
+\r
+BonTsDemux mod 10 (modified by LxbEvo.FpE)\r
+\r
+TS\83t\83@\83C\83\8b\82ð\81A\92¼\90Ú\95Ê\83t\83@\83C\83\8b\82É\95Ï\8a·\82·\82é\81B\r
+\r
+BonTsDemux\82Å\81AWAV\95Ï\8a·\8e\9e\82ÉVideo Frame\82ÆAudio PTS\82ð\8eg\82Á\82Ä\89¹\90º\82ð \82¸\82ê\82È\82¢\82æ\82¤\82É\95â\8a®\r
+ffmpeg\82É\92¼\90Ú\82Í\82¢\82Ä\82Ý\82é\r
+\r
+\r
+\90Ý\92è\8d\80\96Ú\82Ì\90à\96¾\r
+\r
+       \81ERF64\83T\83|\81[\83g\r
+       \r
+               true \8e\9e 4GB \83I\81[\83o\81[\8e\9e RIFF\8b­\90§ \r
+               false \8e\9e 4GB \83I\81[\83o\81[\8e\9e RF64\81i\8d¡\82Ü\82Å\92Ê\82è\82Ì\93®\8dì\81\r
+\r
+       \81EVideo Frame\95â\8a®\r
+\r
+               \81ETS\83\\81[\83X\82Å\89¹\90º\82Ì\82Ý\82Ì\8bó\8aÔ\82ª\82 \82é\r
+               \81Ebiterr\93\99\82Å\81A\83r\83f\83I or \89¹\90º\83t\83\8c\81[\83\80\82Ì\8c\87\97\8e\82ª\82 \82é\r
+               \8fã\8bL\82ª\82 \82Ä\82Í\82Ü\82éTS\83\\81[\83X\82Å\89¹\82¸\82ê\82ª\94­\90\82·\82é\8fê\8d\87\81A\82±\82ê\82É\83`\83F\83b\83N\82ð\93ü\82ê\82é\82Æ\89ü\91P\82·\82é\82©\82à\81B\r
+               \81¦\82½\82¾\82µ\81A\8c»\8fó\82Å\82Í29.97fps\8c\88\82ß\82¤\82¿\82È\82Ì\82Å\81A\82»\82ê\88È\8aO\82Ì\83\\81[\83X\82¾\82Æ\8bt\82É\82¸\82ê\82Ä\82µ\82Ü\82¢\82Ü\82·\81B\r
+\r
+\r
+FFMPEG\8eg\97p\8e\9e\82Ì\92\8d\88Ó\8e\96\8d\80\r
+       \81E\8b­\90§5.1ch\8fo\97Í\82¾\82Æ\82Ù\82Æ\82ñ\82Ç\82Ì\83P\81[\83X\82Å\83G\83\89\81[\82É\82È\82è\82Ü\82·\81B\r
+       \81Elocalhost:1234\82ðBonTsDemux\91¤\82Å\8eg\97p\82µ\82Ü\82·\81B\r
+       \81E\93ü\97Í(-i)\81A\8fo\97Í\83t\83@\83C\83\8b\82Ì\8ew\92è\82Í\82µ\82È\82¢\82Å\82­\82¾\82³\82¢\81B\r
+\r
+\r
+\83R\83}\83\93\83h\83\89\83C\83\93\82©\82ç\82Ì\8cÄ\82Ñ\8fo\82µ\8ed\97l\r
+       \97á: bontsdemux -i "test.ts" -o "test" -encode "Demux(m2v)" -start -quit\r
+\r
+       \83R\83}\83\93\83h\8eí\97Þ\r
+       -i [\83t\83@\83C\83\8b\96¼]         \93ü\97Í\83t\83@\83C\83\8b(ts)\82Ì\90Ý\92è\r
+       -o [\83t\83@\83C\83\8b\96¼]         \8fo\97Í\83t\83@\83C\83\8b\82Ì\90Ý\92è\81B\8ag\92£\8eq\82Í\8e©\93®\82Å\95t\82­\8ed\97l\82È\82Ì\82Å\81A\82Â\82¯\82È\82¢\82±\82Æ\82ð\90\84\8f§\r
+       -srv [\83T\81[\83r\83X\94Ô\8d\86]     \83T\81[\83r\83X\94Ô\8d\86\82Ì\91I\91ð(10\90i\90\94\92l)\r
+       -es [0-2]                       \89¹\90ºES\82Ì\91I\91ð(0:\83T\81[\83r\83X\82É\88Ë\91¶ 1-2:2-3\94Ô\96Ú\82É\91\8dÝ\82·\82é\89¹\90º(\82È\82¢\8fê\8d\87\82Í0\82Æ\93¯\82\90U\82é\95\91\82¢\82ð\82·\82é)\r
+       -encode [\8eí\97Þ]          [\8eí\97Þ]\97á\81F      \8ew\92è\82È\82µ        \81cDemux(m2v+wav)\r
+                                                                       Demux(wav)      \81c\89¹\90º\82Ì\82Ý\r
+                                                                       Demux(m2v)      \81c\89f\91\9c\82Ì\82Ý\r
+                                                                       MPG2PS          \81cMPG2PS\8c`\8e®\82Å\8fo\97Í(cap_sts_sea.ini\82Å\82Ì\90Ý\92è\8d\80\96Ú)\r
+                                                                       WMV8            \81cWMV8(cap_sts_sea.ini\82Å\82Ì\90Ý\92è\8d\80\96Ú)\r
+                                                                        \81F\r
+       -sound [\95û\8e®(0-4)]      0:Stereo(\8eå+\95\9b)\r
+                                               1:\8eå\89¹\90º\r
+                                               2:\95\9b\89¹\90º\r
+                                               3:\8b­\90§5.1ch\r
+                                               4:\8b­\90§5.1ch(Split)\r
+       -rf64                           wav RF64\83T\83|\81[\83g\r
+       -vf                                     Video Frame\95â\8a®\97L\8cø\r
+       -start                          \8e©\93®\82Å\8aJ\8en\r
+       -quit                           \8e©\93®\82Å\8fI\97¹\r
+\r
+----------------------------------------------------------------------------------------\r
+mod 10\r
+       qE.77T.ink\8e\81\82ÌWavWriter \82Ì RIFF \8b­\90§\91Î\89\9e\94Å\r
+       Video Frame\95â\8a® \82ð\81A\83I\83v\83V\83\87\83\93\88µ\82¢\82É\95Ï\8dX\r
+\r
+mod 9.1\r
+       \95\9b\89¹\90º\82ª\91I\91ð\82Å\82«\82Ä\82¢\82È\82©\82Á\82½\95s\8bï\8d\87\82ð\8fC\90³\r
+\r
+mod 9\r
+       \83R\83}\83\93\83h\83\89\83C\83\93\83I\83v\83V\83\87\83\93\82É\91Î\89\9e\r
+       \89¹\90º\8fo\97Í\95û\8e®\82Å\81A\8eå\89¹\90º,\95\9b\89¹\90º\82Ì\91I\91ð\82ª\8fo\97\88\82È\82©\82Á\82½\95s\8bï\8d\87\82ð\8fC\90³(mod 8\82Å\82Ì\83G\83\93\83o\83O)\r
+       \83t\83@\83C\83\8b\96¼\82ª\92·\82·\82¬\82é\82Æ\81AD&D\8e\9e\82É\97\8e\82¿\82Ä\82¢\82½\95s\8bï\8d\87\82ð\8fC\90³\r
+       RF64\8fo\97Í\82ð\91I\91ð\89Â\94\\82É\82µ\82½\r
+       cap_sts_sea.ini\83t\83@\83C\83\8b\82Å\81A\8ag\92£\8eq\82Ì\8ew\92è\82ð\89Â\94\\82Æ\82µ\82½\r
+       \r
+mod 8\r
+       5.1ch\8fo\97Í\8e\9e\82Ì\83`\83\83\83\93\83l\83\8b\83A\83T\83C\83\93\83o\83O\8fC\90³\r
+       qE.77T.ink\8e\81\82ÌRF64\83t\83H\81[\83}\83b\83g\91Î\89\9e\r
+               \81¨4GB \82ð\92´\82¦\82é\82Æ\8e©\93®\93I\82É RF64 \83t\83H\81[\83}\83b\83g\82É\82È\82é\81B\r
+               \81¨5.1ch Split\83\82\81[\83h\r
+                       \81E\83`\83\83\83\93\83l\83\8b\96\88\82É 1ch Wav \8f\91\82«\8fo\82µ\83N\83\89\83X\81B\r
+                       \81E\93n\82³\82ê\82½\83t\83@\83C\83\8b\96¼\82É\91Î\82µ\82Ä\81A\83`\83\83\83\93\83l\83\8b\82Ì\83T\83t\83B\83b\83N\83X\82ð\95t\82¯\82Ä\8fo\97Í\82·\82é\81B\r
+                       \81E4GB \82ð\92´\82¦\82é\82Æ\8e©\93®\93I\82É RF64 \83t\83H\81[\83}\83b\83g\82É\82È\82é\81B\r
+\r
+mod 7\r
+       File\8fo\97Í\8e\9e\82É\81AGOP\82Ì\83T\83C\83Y\82ª\91å\82«\82¢\82Æ\8f\91\82«\82±\82Ý\83G\83\89\81[\82ð\82¨\82±\82µ\82Ä\82¢\82½\95s\8bï\8d\87\82ð\8fC\90³\r
+       ffmpeg\82ª\88Ù\8fí\8fI\97¹\82µ\82½\82Æ\82«\82É\83n\83\93\83O\83A\83b\83v\82µ\82Ä\82¢\82½\82Ì\82ð\8fC\90³\r
+       demux\8e\9e\82É\89¹\90º\95â\90³\82ð\8ds\82Á\82½\8dÛ\81A\88Ù\8fí\8fI\97¹\82·\82é\95s\8bï\8d\87\82ð\8fC\90³\r
+       \82»\82Ì\91¼\81A\8d×\82©\82¢\82Æ\82±\82ë\82ð\8fC\90³\r
+       \r
+mod 6b2\r
+       Meru\8e\81\82Ì\83T\81[\83r\83X\91I\91ð\82ð\91g\82Ý\8d\9e\82Ý(\93®\8dì\82 \82Ü\82è\8c©\82ê\82Ä\82¢\82È\82¢\81B)\r
+       PTS\82Ì\82È\82¢\83p\83P\83b\83g\82ª\82«\82½\82Æ\82«\82É\81A\8b­\90§\8fI\97¹\82·\82é\95s\8bï\8d\87\82ð\8fC\90³\r
+       \83r\83f\83I\8fo\97Í\83t\83@\83C\83\8b\82Ì\83G\83f\83B\83b\83g\83{\83b\83N\83X\82É\81A\8ag\92£\8eq\82ð\95\\8e¦\82µ\82È\82¢\82æ\82¤\82É\8fC\90³\r
+       \8ag\92£\8eq\82ðm2v,wav,mpg,mp4,avi\82©\82ç\8e©\93®\82Å\91I\91ð\82·\82é\8b@\94\\r
+\r
+mod 6b\r
+       5.1 DownMix\82Ì\8cW\90\94\8aÔ\88á\82¢\82ð\8fC\90³\r
+       qE.77T.ink\8e\81\82Ì\8b­\90§5.1ch\8fo\97Í\82ð\91g\82Ý\8d\9e\82Ý(TS\83\\81[\83X\82ª\82È\82¢\82½\82ß\81A\93®\8dì\96¢\8c\9f\8fØ)\r
+       Audio ES \91I\91ð\8b@\94\\92Ç\89Á\r
+       \83o\83b\83`\8f\88\97\9d\8b@\94\\92Ç\89Á\r
+       D&D\8b@\94\\92Ç\89Á\r
+       \89¹\90º\91I\91ð(\8eå\81A\95\9b\89¹)\92Ç\89Á\r
+       WAV\8fo\97Í\82Ì\82Ý\81AM2V\8fo\97Í\82Ì\82Ý\91I\91ð\8b@\94\\92Ç\89Á\r
+       \89¹\82¸\82ê\95â\90³\8fC\90³(\83X\83g\83\8a\81[\83\80\93r\92\86\82Å\82à\81A200ms\88È\8fã\8bó\94\92\82ª\82 \82é\8fê\8d\87\82ÍNULL\82Å\88ê\8bC\82É\96\84\82ß\82Ä\82Ý\82é)\r
+\r
+mod 5\r
+       ffmpeg\82É\92¼\90Ú\82Í\82¢\82Ä\82Ý\82é\83e\83X\83g\r
+       ffmpeg\82Ö\82Ì\83p\83\89\83\81\81[\83^\82Í\81Acap_sts_sea.ini\82Å\92\80\8e\9f\95Ï\8dX\82µ\82Ä\82­\82¾\82³\82¢\81B\r
+               \81¨\93ü\97Í(-i)\81A\8fo\97Í\83t\83@\83C\83\8b\82Ì\8ew\92è\82Í\82µ\82È\82¢\82Å\82­\82¾\82³\82¢\81B\r
+               \81¨2-pass\82Í\8fo\97\88\82Ü\82¹\82ñ(\8ed\97l)\81B\r
+               \81¨\95t\91®\82Ìffmpeg.exe\82Í\81A rev.12910 Pentium4\8dÅ\93K\89»\94Å\82Å\82·\81B(\93ü\8eè\8c³\81Fhttp://blog.k-tai-douga.com/)\r
+       \82Ü\82½\81A\8d¡\89ñ\82Ì\83o\81[\83W\83\87\83\93\82æ\82è\81Awav\93f\82«\8fo\82µ\90ê\97p\82É\82È\82Á\82Ä\82¢\82Ü\82·\81B(\89¹\90º\82Í\8b­\90§2ch\90ê\97p)\r
+\r
+mod 4\r
+       mod 3\82Å\83R\83~\83b\83g\83~\83X\82ª\82 \82Á\82½\82Ì\82Å\8fC\90³\r
+       \81{\91½\8f­\89ü\97Ç\r
+\r
+mod 3\r
+       \93r\92\86\82Å\83`\83\83\83\93\83l\83\8b\82ð\95Ï\82¦\82Ä\82à\81A\82 \82é\92ö\93x\93¯\8aú\82Å\82«\82é\82æ\82¤\82É\82µ\82½(\8e\84\82Ì\8eÀ\97Í\82Å\82Í\81A\82±\82ê\82ª\8cÀ\8aE)\r
+       \83G\83\89\81[\82Å\94j\8aü\82·\82é\82µ\82©\82È\82¢\89¹\90º\83t\83\8c\81[\83\80\82ª\82 \82Á\82½\8fê\8d\87\81A\88È\91O\82Ì\83I\81[\83f\83B\83I\83T\83C\83Y\95ª0\8fo\97Í\82·\82é\82æ\82¤\82É\82µ\82Ä\82Ý\82½\81B\r
+       (\8cø\89Ê\82Í\82 \82Á\82½\82ç\82¢\82¢\82È\92ö\93x)\r
+\r
+\r
+\r
+----------------------------------------------------------------------------\r
+original readme\r
+----------------------------------------------------------------------------\r
+\r
+\r
+\81| BonTsDemux Ver.1.10 \81|\r
+\r
+\r
+\82P\81D\8aT\97v\r
+\81@\81@\81EBon\83V\83\8a\81[\83Y\82ÌMPEG2-TS\8f\88\97\9d\83G\83\93\83W\83\93\81uBonTsEngine\81v\82ð\8eg\97p\82µ\82½\83T\83\93\83v\83\8b\83v\83\8d\83O\83\89\83\80\82Å\82·\81B\r
+\81@\81@\81ETS\83t\83@\83C\83\8b\82©\82ç\89f\91\9c(m2v)\82Æ\89¹\90º(aac/wav)\82ð\95ª\97£\82µ\82Ä\83t\83@\83C\83\8b\82É\8fo\97Í\82µ\82Ü\82·\81B\r
+\81@\81@\81EB-CAS\83J\81[\83h\82ª\90Ú\91±\82³\82ê\82Ä\82¢\82é\8fê\8d\87\82Í\83X\83N\83\89\83\93\83u\83\8b\82³\82ê\82½TS\83t\83@\83C\83\8b\82Ì\93Ç\82Ý\8d\9e\82Ý\82ª\89Â\94\\82Å\82·\81B\r
+\81@\81@\81E\83}\83\8b\83`\83`\83\83\83\93\83l\83\8b\82Ì\8fê\8d\87\82ÍPAT\82Å\8dÅ\8f\89\82Ì\83T\81[\83r\83X\82É\91®\82·\82é\83X\83g\83\8a\81[\83\80\82ª\95ª\97£\82³\82ê\82Ü\82·\81B\r
+\81@\81@\81EAAC\83f\83R\81[\83h\82ð\8eg\97p\82·\82é\8fê\8d\87\82Í\8fí\82É2ch\82É\83_\83E\83\93\83R\83\93\83o\81[\83g/\83A\83b\83v\83R\83\93\83o\81[\83g\82³\82ê\82Ü\82·\81B\r
+\r
+\81@\81@\81¦\96{\83\\83t\83g\83E\83F\83A\82Ì\93®\8dì\82É\82Í\81uMicrosoft Visual C++ 2005 SP1 \8dÄ\94Ð\95z\89Â\94\\83p\83b\83P\81[\83W\81v\82ª\95K\97v\82Å\82·\81B\r
+\81@\81@\81@\81@http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=200b2fd9-ae1a-4a14-984d-389c36f85647\r
+\r
+\r
+\82Q\81D\92\8d\88Ó\8e\96\8d\80\r
+\81@\81@\81EB-CAS\83J\81[\83h\82ð\8b\96\89Â\82³\82ê\82½\8b@\8aí\88È\8aO\82Å\8eg\97p\82·\82é\82±\82Æ\82ÍB-CAS\83J\81[\83h\82Ì\8c_\96ñ\96ñ\8a¼\82É\92ï\90G\82·\82é\89Â\94\\90«\82ª\82 \82é\r
+\81@\81@\81@\82½\82ß\81A\96{\83\\83t\83g\83E\83F\83A\82Í\8e©\8cÈ\82Ì\90Ó\94C\82É\82¨\82¢\82Ä\8eg\97p\82µ\82Ä\89º\82³\82¢\81B\r
+\81@\81@\81E\96{\83\\83t\83g\83E\83F\83A\82Í\89º\8bL\81u\8cö\8aJ\8bK\8ai\81v\82Ì\8bZ\8fp\8fî\95ñ\82É\8aî\82Ã\82«\81u\90³\8bK\82Ì\8eè\96@\81v\82ð\97p\82¢\82é\82æ\82¤\8eÀ\91\95\82³\82ê\82Ä\82¢\82Ü\82·\81B\r
+\81@\81@\81@\8f\83\90\88\82É\8bZ\8fp\93I\82È\8c\9f\8fØ\82ð\96Ú\93I\82Æ\82µ\82½\83T\83\93\83v\83\8b\83v\83\8d\83O\83\89\83\80\82Å\82 \82è\81A\91æ\8eO\8eÒ\82Ì\92m\93I\8dà\8eY\8c \82ð\90N\8aQ\82·\82é\89Â\94\\90«\82Ì\r
+\81@\81@\81@\82 \82é\96Ú\93I\82É\8eg\97p\82³\82ê\82é\82±\82Æ\82ð\8dì\8eÒ\82Í\88ê\90Ø\88Ó\90}\82µ\82Ä\82¨\82ç\82¸\81A\82Ü\82½\82±\82ê\82ç\82Ì\8ds\88×\82ð\8bÖ\8e~\82µ\82Ü\82·\81B\r
+\81@\81@\81E\96{\83\\83t\83g\83E\83F\83A\82Í\90³\8bK\82É\83\89\83C\83Z\83\93\83X\82³\82ê\82½B-CAS\83J\81[\83h\82ð\97p\82¢\82é\82±\82Æ\82É\82æ\82è\95\9c\8d\86\82ð\8ds\82¢\82Ü\82·\81B\r
+\81@\81@\81E\96{\83\\83t\83g\83E\83F\83A\92P\91Ì\82Å\82Í\82¢\82©\82È\82é\92\98\8dì\95¨\82Ì\8bZ\8fp\93I\95Û\8cì\8eè\92i\82à\89ñ\94ð\82·\82é\82±\82Æ\82Í\82Å\82«\82Ü\82¹\82ñ\81B\r
+\81@\81@\81E\96{\83\\83t\83g\83E\83F\83A\82Í\81u\83t\83\8a\81[\83\\83t\83g\81v\82Å\82·\81B\r
+\81@\81@\81E\96{\83\\83t\83g\83E\83F\83A\82ÍARIB\8bK\8ai\82É\93K\8d\87\82·\82é\82±\82Æ\82ð\95Û\8fá\82µ\82Ä\82¨\82ç\82¸\81A\82¢\82©\82È\82é\8eí\95Ê\82Ì\90»\95i\82É\82à\8aY\93\96\82µ\82Ü\82¹\82ñ\81B\r
+\81@\81@\81E\96{\83\\83t\83g\83E\83F\83A\82ð\8eg\97p\82µ\82½\8c\8b\89Ê\94­\90\82µ\82½\82¢\82©\82È\82é\91¹\8aQ\82à\8dì\8eÒ\82Í\90Ó\94C\82ð\95\89\82¤\82±\82Æ\82Í\82Å\82«\82Ü\82¹\82ñ\81B\r
+\81@\81@\81E\96{\83T\83\93\83v\83\8b\83v\83\8d\83O\83\89\83\80\82Ì\83\\81[\83X\83R\81[\83h\82Ì\8eæ\82è\88µ\82¢\82ÍGPL\82É\8f]\82¤\82±\82Æ\82Æ\82µ\82Ü\82·\81B\r
+\r
+\81@\81@\82±\82ê\82ç\82É\93¯\88Ó\92¸\82¯\82é\8fê\8d\87\82É\82Ì\82Ý\81A\96{\83\\83t\83g\83E\83F\83A\82Ì\8eg\97p\82ð\8b\96\89Â\92v\82µ\82Ü\82·\81B\r
+\r
+\r
+\82R\81D\83\89\83C\83Z\83\93\83X\82É\82Â\82¢\82Ä\r
+\81@\81@\81E\96{\83p\83b\83P\81[\83W\82É\8aÜ\82Ü\82ê\82é\91S\82Ä\82Ì\83\\81[\83X\83R\81[\83h\81A\83o\83C\83i\83\8a\82É\82Â\82¢\82Ä\92\98\8dì\8c \82Í\88ê\90Ø\8eå\92£\82µ\82Ü\82¹\82ñ\81B\r
+\81@\81@\81E\83I\83\8a\83W\83i\83\8b\82Ì\82Ü\82Ü\96\94\82Í\89ü\95Ï\82µ\81A\8ae\8e©\82Ì\83\\83t\83g\83E\83F\83A\82É\8e©\97R\82É\93Y\95t\81A\91g\82Ý\8d\9e\82Þ\82±\82Æ\82ª\82Å\82«\82Ü\82·\81B\r
+\81@\81@\81E\92A\82µGPL\82É\8f]\82¤\82±\82Æ\82ð\97v\8b\81\82µ\82Ü\82·\82Ì\82Å\82±\82ê\82ç\82ð\8ds\82¤\8fê\8d\87\82Í\83\\81[\83X\83R\81[\83h\82Ì\8aJ\8e¦\82ª\95K\90{\82Æ\82È\82è\82Ü\82·\81B\r
+\81@\81@\81E\82±\82Ì\82Æ\82«\96{\83\\83t\83g\83E\83F\83A\82Ì\92\98\8dì\8c \95\\8e¦\82ð\8ds\82¤\82©\82Ç\82¤\82©\82Í\94C\88Ó\82Å\82·\81B\r
+\81@\81@\81E\96{\83\\83t\83g\83E\83F\83A\82ÍFAAD2\82Ì\83\89\83C\83u\83\89\83\8a\94Å\83o\83C\83i\83\8a\82ð\8eg\97p\82µ\82Ä\82¢\82Ü\82·\81B\r
+\r
+\81@\81@\81@"Code from FAAD2 is copyright (c) Nero AG, www.nero.com"\r
+\r
+\81@\81@\81E\83r\83\8b\83h\82É\95K\97v\82È\8aÂ\8b«\r
+\81@\81@\81@- Microsoft Visual Studio 2005 \88È\8fã\81@\81¦MFC\82ª\95K\97v\r
+\81@\81@\81@- Microsoft Windows SDK v6.0 \88È\8fã\r
+\r
+\r
+\82S\81D\8eQ\8dl\95\8c£\r
+\81@\81@\81EARIB STD-B10\r
+\81@\81@\81EARIB STD-B24\r
+\81@\81@\81EARIB STD-B25\r
+\81@\81@\81EARIB STD-B32\r
+\81@\81@\81EISO/IEC 11172-3\r
+\81@\81@\81EISO/IEC 13818-1\r
+\81@\81@\81EISO/IEC 13818-2\r
+\81@\81@\81EISO/IEC 13818-7\r
+\r
+\81@\81@\81E\82Ü\82é\82à\90»\8dì\8f\8a\81uARIB STD-B25 \8ed\97l\8am\94F\83e\83X\83g\83v\83\8d\83O\83\89\83\80\81v\r
+\81@\81@\81EMeru\8e\81\81uBonTsEngine\89ü\91¢\94Å\81v\r
+\81@\81@\81EMeru\8e\81\81uCapUSB M-Edition\81v\r
+\81@\81@\81E\8dì\8eÒ\95s\96¾\81uMpeg2-TS\82Ì\83X\83g\83\8a\81[\83\80\82©\82ç\83f\81[\83^\95ú\91\97\8fî\95ñ\82ð\92\8a\8fo\82·\82é\83e\83X\83g\81v\r
+\81@\81@\81EMicrosoft DirectX 9.0\81uPSI \83p\81[\83T\81\83t\83B\83\8b\83\83T\83\93\83v\83\8b\81v\r
+\r
+\r
+\82T\81D\83T\83|\81[\83g\81A\98A\97\8d\90æ\r
+\81@\81@\81@\98A\97\8d\90æ\81@\81@\81F\81@\8ag\92£\83c\81[\83\8b\92\86\82Ì\90l\81@\81@nakanohito@2sen.dip.jp\r
+\81@\81@\81@\8cö\8e®\83T\83C\83g\81F\81@http://2sen.dip.jp/friio/\r
+\r
+\82U\81D\8dX\90V\97\9a\97ð\r
+\81@Ver.1.10 \81E\89f\91\9c\82Æ\89¹\90º\82Ì\8aJ\8en\88Ê\92u\82ð\93¯\8aú\82³\82¹\82é\8b@\94\\82ð\92Ç\89Á\81B\r
+\81@\81@\81@\81@\81\81E\89¹\90º\8fo\97Í\83t\83@\83C\83\8b\96¼\82ª\94½\89f\82³\82ê\82È\82©\82Á\82½\95s\8bï\8d\87\8fC\90³\81B\r
+\r
+\81@Ver.1.00 \81E\8f\89\89ñ\83\8a\83\8a\81[\83X\r
diff --git a/tstools/BonTsDemux/cap_sts_sea.ini b/tstools/BonTsDemux/cap_sts_sea.ini
new file mode 100755 (executable)
index 0000000..a73ec86
--- /dev/null
@@ -0,0 +1,18 @@
+[FFMPEG_SETTING]\r
+\r
+\r
+MPEG2PS                =-f dvd -vcodec copy -aspect 16:9 -acodec libmp3lame -ar 48000 -ab 192k -vol 256 -y\r
+MPEG2PS_EXT    =mpg\r
+\r
+MPEG2PS_AC3 =-f dvd -vcodec copy -aspect 16:9 -acodec ac3 -ar 48000 -ab 448k -vol 256 -y
+MPEG2PS_AC3_EXT = mpg
+MPEG2PS_MP2 =-f dvd -vcodec copy -aspect 16:9 -acodec mp2 -ar 48000 -ab 384k -vol 256 -y
+MPEG2PS_MP2_EXT = mpg
+DVD_1h =-target ntsc-dvd -b 8000k -aspect 16:9 -acodec ac3 -ar 48000 -ab 192k -vol 256 -y
+DVD_1h_EXT = mpg
+DVD_2h =-target ntsc-dvd -b 4600k -aspect 16:9 -acodec ac3 -ar 48000 -ab 192k -vol 256 -y
+DVD_2h_EXT = mpg
+DVD_3h =-target ntsc-dvd -b 3050k -aspect 16:9 -acodec ac3 -ar 48000 -ab 192k -vol 256 -y
+DVD_3h_EXT = mpg
+DVD_4h =-target ntsc-dvd -b 2200k -aspect 16:9 -acodec ac3 -ar 48000 -ab 192k -vol 256 -y
+DVD_4h_EXT = mpg\r
diff --git a/tstools/BonTsDemux/ffmpeg.exe b/tstools/BonTsDemux/ffmpeg.exe
new file mode 100755 (executable)
index 0000000..a8b45c1
Binary files /dev/null and b/tstools/BonTsDemux/ffmpeg.exe differ
diff --git a/tstools/DtsEdit/DtsEdit.exe b/tstools/DtsEdit/DtsEdit.exe
new file mode 100644 (file)
index 0000000..9b0dff8
Binary files /dev/null and b/tstools/DtsEdit/DtsEdit.exe differ
diff --git a/tstools/DtsEdit/License.txt b/tstools/DtsEdit/License.txt
new file mode 100644 (file)
index 0000000..17bdbc0
--- /dev/null
@@ -0,0 +1,18 @@
+\96{\83A\81[\83J\83C\83u\82É\8aÜ\82Ü\82ê\82é\83\\83t\83g\83E\83F\83A\82ÍGPL\82Ì\8c³\8cö\8aJ\82³\82ê\82Ä\82¢\82Ü\82·\81B\r
+\94z\95z\8aÈ\88Õ\89»\82Ì\82½\82ß\83\\81[\83X\82Í\93Y\95t\82µ\82Ä\82¢\82Ü\82¹\82ñ\82ª\81A\82Ç\82È\82½\82Å\82à\83\\81[\83X\82Ì\r
+\93ü\8eè\82Í\89Â\94\\82Å\82·\81B\r
+\82²\97v\96]\82Ì\8dÛ\82É\82Í\81A\94z\95z\83T\83C\83g\82Ì\8cf\8e¦\94Â\81E\82à\82µ\82­\82Í\83\81\81[\83\8b\82É\82Ä\82²\98A\97\8d\r
+\82­\82¾\82³\82¢\81B\r
+\r
+\8f®\81A\82²\8aó\96]\82Ì\94z\95z\94}\91Ì\82É\82æ\82Á\82Ä\82Í\8eè\90\94\97¿\82ð\92¸\82­\8fê\8d\87\82à\82²\82´\82¢\82Ü\82·\82ª\81A\r
+Http\8co\97R\82Å\82 \82ê\82Î\96³\97¿\82Å\82·\81B\r
+\91Î\89\9e\82Ü\82Å\82É1\8fT\8aÔ\92ö\93x\82Ì\8e\9e\8aÔ\82ð\92¸\82­\8fê\8d\87\82ª\82 \82è\82Ü\82·\81B\r
+\83\81\81[\83\8b\82ð\91\97\90M\82µ\82½\82Ì\82É\94½\89\9e\82ª\82È\82¢\8fê\8d\87\82Í\81A\83X\83p\83\80\83t\83B\83\8b\83^\82É\82æ\82Á\82Ä\r
+\8dí\8f\9c\82³\82ê\82Ä\82µ\82Ü\82Á\82½\89Â\94\\90«\82à\82 \82è\82Ü\82·\82Ì\82Å\81A\8cf\8e¦\94Â\82Ü\82Å\82²\98A\97\8d\82­\82¾\82³\82¢\81B\r
+\r
+\94z\95z\83T\83C\83g\r
+http://seraphy.fam.cx/~seraphy\r
+http://seraphy.luna.ddns.vc/~seraphy\r
+\r
+\98A\97\8d\90æ\r
+seraphy@seraphy.fam.cx\r
diff --git a/tstools/DtsEdit/gpl.txt b/tstools/DtsEdit/gpl.txt
new file mode 100644 (file)
index 0000000..94a9ed0
--- /dev/null
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/tstools/DtsEdit/readme.txt b/tstools/DtsEdit/readme.txt
new file mode 100644 (file)
index 0000000..1e9f0a5
--- /dev/null
@@ -0,0 +1,130 @@
+\r
+*****************************************************************************\r
+*\r
+* DtsEdit.exe\r
+*\r
+*****************************************************************************\r
+\81y\8aT\97v\81z\r
+\81EMP4(AVC)\83R\83\93\83e\83i\82É\91Î\82µ\82Ä\81A\83^\83C\83\80\83R\81[\83h\82Ì\93ü\8fo\97Í\82ð\8ds\82¢\82Ü\82·\81B\r
+\81E\91Î\89\9e\82µ\82Ä\82¢\82é timecode format \82Í\81Av1\81Av2\82É\82È\82è\82Ü\82·\81B\r
+\r
+\r
+\81y\8eg\82¢\95û\81z\r
+Usage: DtsEdit <option> <mp4 file>\r
+\r
+option list\r
+        -tc <file name>       : \93ü\97Í\82·\82éTimeCode\83t\83@\83C\83\8b\82ð\8ew\92è\82µ\82Ü\82·\81B\r
+                                -tc\82ª\8ew\92è\82³\82ê\82½\8fê\8d\87\82Í\81ATimeCode\82ð\8ew\92è\82ÌMP4\83t\83@\83C\83\8b\82É\96\84\82ß\8d\9e\82Ý\82Ü\82·\81B\r
+                                \8ew\92è\82³\82ê\82È\82©\82Á\82½\8fê\8d\87\82Í\81AMP4\83t\83@\83C\83\8b\82©\82çTimeCode\82ð\92\8a\8fo\82µ\82Ü\82·\81B\r
+        -tv <1|2>             : \93ü\8fo\97Í\82·\82éTimeCode\83t\83@\83C\83\8b\82Ì\83o\81[\83W\83\87\83\93\82ð\8ew\92è\82µ\82Ü\82·\81B\83f\83t\83H\83\8b\83g\82Í2\82Å\82·\81B\r
+        -s <time scale>       : timeScale\82ð\8ew\92è\82µ\82Ü\82·\81B\r
+                                \96¢\8ew\92è\82Ì\8fê\8d\87\82Í\81A\93ü\97Í\82³\82ê\82½timecode format\82É\82æ\82Á\82Ä\8e©\93®\8cv\8eZ\82³\82ê\82Ü\82·\81B\r
+        -mlt <multiple>       : timeScale\82Ì\8e©\93®\8cv\8eZ\82É\8eg\97p\82µ\82Ü\82·\81B\r
+                                \83f\83t\83H\83\8b\83g\92l\82Í4.0\94{\82Å\82·\81BtimeScale\82ð\92¼\90Ú\8ew\92è\82µ\82½\8fê\8d\87\82Í\81A\93à\95\94\82Ì\8cv\8eZ\8c\8b\89Ê\82Å\8fã\8f\91\82«\82³\82ê\82Ü\82·\81B\r
+        -r <time rate>        : \8dÅ\8f¬timeRate\82ð\8ew\92è\82µ\82Ü\82·\81B\r
+                                \96¢\8ew\92è\82Ì\8fê\8d\87\82Í\81A\93ü\97Í\82³\82ê\82½MP4\83t\83@\83C\83\8b\82É\8f]\82¢\82Ü\82·\81B\r
+        -no-dc                : \8f\89\8aú\83f\83B\83\8c\83C\83J\83b\83g\82ð\96³\8cø\82É\82µ\82Ü\82·\81B\r
+        -df <count>           : \8f\89\8aú\83f\83B\83\8c\83C\82ð\95t\97^\82·\82é\8fê\8d\87\82Ì\81A\83f\83B\83\8c\83C\83t\83\8c\81[\83\80\90\94\82ð\8ew\92è\82µ\82Ü\82·\81B\r
+                                \96¢\8ew\92è\82Ì\8fê\8d\87\82Í\81A\93ü\97Í\82³\82ê\82½MP4\83t\83@\83C\83\8b\82©\82ç\8e©\93®\8cv\8eZ\82µ\82Ü\82·\81B\r
+                                \8dÄ\90\8e\9e\8aÔ\82Ì\92Z\82¢\93®\89æ\82Å\82Í\90³\8am\82É\8eæ\93¾\82Å\82«\82È\82¢\8fê\8d\87\82ª\82 \82è\82Ü\82·\81B\r
+        -o <output file>      : \8fo\97Í\83t\83@\83C\83\8b\82ð\8ew\92è\82µ\82Ü\82·\81B\r
+\r
+\r
+  \81 TimeCode\82ð\8fo\97Í\82·\82é\81B\r
+    \8aî\96{\93I\82É\83I\83v\83V\83\87\83\93\82Ì\8ew\92è\82Í\95s\97v\82Å\82·\81B\r
+    timecode format v1 \82ð\8fo\97Í\82µ\82½\82¢\8fê\8d\87\82Í\81A\83I\83v\83V\83\87\83\93\82É\81u-tv 1\81v\82ð\8ew\92è\82µ\82Ü\82·\81B\r
+\r
+  \81 TimeCode\82ð\93ü\97Í\82·\82é\81B\r
+    TimeScale\81ATimeRate\82ð\8e©\93®\94»\92è\82·\82é\82½\82ß\81A\83I\83v\83V\83\87\83\93\82ð\8ew\92è\82µ\82È\82­\82Ä\82à\93ü\97Í\82µ\82½TimeCode\82É\82 \82í\82¹\82Ä\93K\90Ø\82È\92l\82ª\90Ý\92è\82³\82ê\82Ü\82·\81B\r
+    TimeCode\93ü\97Í\82ÍVFR\89»\82ð\91O\92ñ\82É\82µ\82Ä\82¢\82Ü\82·\82Ì\82Å\81ATimeScale\82Í4\94{\90¸\93x\82Å\8cv\8eZ\82³\82ê\82Ü\82·\81B\r
+    \90¸\93x\82ð\95Ï\8dX\82µ\82½\82¢\8fê\8d\87\82Í\81A-mlt\83I\83v\83V\83\87\83\93\82ð\97\98\97p\82µ\82Ü\82·\81B\81i\8f­\90\94\8ew\92è\82ª\89Â\94\\82Å\82·\81j\r
+    \96Ú\93I\82ÌTimeScale\82ª\96¾\8am\82È\8fê\8d\87\82Í\81A-s\83I\83v\83V\83\87\83\93\82ð\97\98\97p\82µ\82Ü\82·\81B\82»\82Ì\82Æ\82«\81ATimeRate\82Í\93ü\97Í\8c³\82Ì\83t\83@\83C\83\8b\82É\8f]\82¢\82Ü\82·\82Ì\82Å\92\8d\88Ó\82ª\r
+    \95K\97v\82Å\82·\81B\r
+\r
+    \81¦TimeRate\82É\82Â\82¢\82Ä\81B\r
+      fps\82ð\95ª\90\94\82Å\95\\8c»\82µ\82½\8fê\8d\87\82Ì\95ª\95ê\82É\82 \82½\82è\82Ü\82·\81B\95W\8f\80NTSC\82Å\82 \82ê\82Î29.97fps\82Å\82·\82ª\81A\90³\8am\82É\82Í\82±\82Ì\82Æ\82«\82Ìfps\82Í\8fz\8aÂ\8f¬\90\94\82Å\82 \82è\81A\r
+      30000/1001\82Æ\95\\8bL\82µ\82Ü\82·\81B\r
+      \82±\82Ì\8fê\8d\87\81ATimeScale\82Í30000\81ATimeRate\82Í1001\82Æ\82È\82è\82Ü\82·\81B\r
+\r
+      \82à\82µ\94ñNTSC\83\\81[\83X\82ð\88µ\82¤\8fê\8d\87\82Í\8f\88\97\9d\8c\8b\89Ê\82Ì\95\\8e¦\82ð\8am\94F\82µ\82Ä\82­\82¾\82³\82¢\81B\r
+      \97á\82¦\82Î30fps\82Ì\93®\89æ\82Ì\8fê\8d\87\82Í\81ATimeRate\82Í1\82Å\82à\8d\\82¢\82Ü\82¹\82ñ\81B\81i\82»\82Ì\82Æ\82«\82ÌTimeScale\82Í120\82Æ\8e©\93®\8cv\8eZ\82³\82ê\82Ü\82·\81B\81j\r
+      \83f\83B\83\8c\83C\83t\83\8c\81[\83\80\82ª3\83t\83\8c\81[\83\80\88È\8fã\82 \82é\8fê\8d\87\82Í\81ATimeRate\82ª1\82Å\82Í\8f\89\8aú\83f\83B\83\8c\83C\83J\83b\83g\82É\8e¸\94s\82µ\82Ü\82·\81B\r
+      \82»\82Ì\8fê\8d\87\82ÍTimeRate\82ð10\82É\95Ï\8dX\82·\82é\82È\82Ç\82µ\82Ä\82­\82¾\82³\82¢\81B\r
+\r
+    \81¦\94{\90¸\93x\82É\82Â\82¢\82Ä\r
+      VFR\82ð\8eÀ\8c»\82·\82é\82É\82 \82½\82è\81ANTSC\82Ì\95\\8e¦\83^\83C\83~\83\93\83O\82ð\95ö\82³\82È\82¢\82æ\82¤\82É\82·\82é\82½\82ß\82ÉTimeScale\82ðn\94{\82µ\82Ü\82·\81B\r
+      \97á\82¦\82Î23.976fps\82Æ29.97fps\82Ì\8d¬\8d\87\83t\83\8c\81[\83\80\83\8c\81[\83g\82Å\82 \82Á\82½\8fê\8d\87\81A\82±\82ê\82ð\95ª\90\94\95\\8c»\82·\82é\82Æ24000/1001\81A30000/1001\82Æ\82È\82è\82Ü\82·\81B\r
+      \91å\82«\82¢\82Ù\82¤\82ÌTimeScale 30000\82É\82 \82í\82¹\82é\82Æ\81A24000/1001 => 30000/1251.25 \82Æ\82È\82Á\82Ä\82µ\82Ü\82¢\81A\95ª\8eq\82É\92[\90\94\82ª\94­\90\82µ\82Ä\82µ\82Ü\82¢\82Ü\82·\81B\r
+      \82»\82±\82Å\81A\91å\82«\82¢\82Ù\82¤\82ÌTimeScale\82ð4\94{\82É\82µ120000/5005\81A120000/4004\82Æ\90®\90\94\82Å\95\\82·\82±\82Æ\82Å\81A\95\\8e¦\83^\83C\83~\83\93\83O\82ð\95ö\82³\82¸\82É\83t\83\8c\81[\83\80\r
+      \83\8c\81[\83g\82Ì\8d¬\8d\87\82ð\8eÀ\8c»\82µ\82Ä\82¢\82Ü\82·\81B\r
+      \82³\82ç\82É59.94fps(60000/1001)\82ð\8d¬\8d\87\82·\82é\8fê\8d\87\82à\81A120000/2002\82Æ\95\\8c»\82Å\82«\82é\82Ì\82Å\82»\82Ì\82Ü\82Ü\8d¬\8d\87\82ª\89Â\94\\82Å\82·\81B\r
+      \81i\82½\82¾\82µ\81A\94{\90¸\93x\82Ì\83f\83t\83H\83\8b\83g\92l\82Í4\94{\82É\82È\82Á\82Ä\82¢\82Ü\82·\82Ì\82Å\81A\8fã\82Ì\97l\82ÈTimeCode\82ð\93ü\97Í\82µ\82½\8fê\8d\87\82Í\81A240000/10010\81A240000/8008\81A\r
+      240000/4004\82Æ\82¢\82¤\8cv\8eZ\8c\8b\89Ê\82É\82È\82è\82Ü\82·\81B\81j\r
+      TimeCode\82ªCFR\82É\82È\82Á\82Ä\82¢\82é\8fê\8d\87\82Í\81A\81u-mlt 1\81v\82Æ\82µ\82Ä\8f\88\97\9d\82µ\82Ä\82à\96â\91è\82 \82è\82Ü\82¹\82ñ\82ª\81A\8f\89\8aú\83f\83B\83\8c\83C\83J\83b\83g\82ð\8ds\82¤\82É\82 \82½\82è\88ê\92è\8fã\82Ì\r
+      TimeScale\95ª\89ð\94\\81iTimeRate\82Ì\91å\82«\82³\81j\82ª\95K\97v\82Å\82·\81B\r
+\r
+    \81¦\83f\83B\83\8c\83C\83t\83\8c\81[\83\80\90\94\82É\82Â\82¢\82Ä\r
+      \8c¾\82¢\8a·\82¦\82é\82Æ\81u\91O\95û\8eQ\8fÆ\83t\83\8c\81[\83\80\82Ì\98A\91±\90\94\81v\82É\82È\82è\82Ü\82·\81B\r
+      DtsEdit\82Å\82Í\81A\82±\82Ì\83t\83\8c\81[\83\80\90\94\82ðCTS\81iComposition Time Stamp\81j\82Ì\8f\87\8f\98\90«\82ð\83`\83F\83b\83N\82·\82é\82±\82Æ\82Å\8e©\93®\8eZ\8fo\82µ\82Ä\82¢\82Ü\82·\81B\r
+      \8f\\95ª\82È\92·\82³\82Ì\93®\89æ\82Å\82Í\82È\82¢\8fê\8d\87\81A\8e©\93®\8eZ\8fo\82ª\82¤\82Ü\82­\93®\8dì\82µ\82È\82¢\8fê\8d\87\82ª\82 \82è\82Ü\82·\81B\r
+      \8f®\81A\82±\82Ì\90\94\92l\82Í\8f\89\8aú\83f\83B\83\8c\83C\83J\83b\83g\82ð\96³\8cø\89»\82µ\82½\8fê\8d\87\82É\8eg\97p\82µ\82Ü\82·\81B\r
+      \8f\88\97\9d\8c\8b\89Ê\82É\95\\8e¦\82³\82ê\82é\81uDelay Frame\81v\82Ì\96\87\90\94\82ª\81A\93ü\97Í\8c³\83t\83@\83C\83\8b\82Ì\96{\97\88\82Ì\96\87\90\94\82Æ\88á\82¤\8fê\8d\87\82Í\81A-df\83I\83v\83V\83\87\83\93\82É\82Ä\92ù\90³\82µ\82Ä\82­\82¾\82³\82¢\81B\r
+\r
+\r
+\81y\92\8d\88Ó\8e\96\8d\80\81z\r
+\81E\83p\83\89\83\81\81[\83^\82Ì\94Í\88Í\83`\83F\83b\83N\82È\82Ç\82Í\8ds\82Á\82Ä\82¢\82È\82¢\82Ì\82Å\81A\82©\82È\82è\96³\92\83\82È\8ew\92è\82à\82Å\82«\82Ä\82µ\82Ü\82¢\82Ü\82·\81B\r
+\81E\82²\97\98\97p\82Í\8cv\89æ\93I\82É\81B\r
+\r
+\r
+\81y\8fC\90³\97\9a\97ð\81z\r
+    \81 20081009\r
+      \81E1fps\81`120fps\82ª\8d¬\8dÝ\82·\82é\82æ\82¤\82È\95Ï\91ÔVFR\82Å\82È\82¢\82©\82¬\82è\81A\8f\89\8aú\83f\83B\83\8c\83C\82Í\95½\8bÏfps\82©\82ç\8eZ\8fo\82µ\82Ä\82à\91å\8fä\95v\82»\82¤\r
+        \82È\82Ì\82Å\8fC\90³\81B\83_\83\81\82¾\82Á\82½\8fê\8d\87\82Í\83G\83\89\81[\82ð\95\\8e¦\82·\82é\82æ\82¤\82É\82µ\82½\81B\r
+        timecode format v2 \82ð\8eæ\82è\8d\9e\82Þ\82Æ\82«\81ATimeStamp\82ª\90®\90\94\82É\8aÛ\82ß\82ç\82ê\82Ä\82¢\82Ä\82à\81ATimeRate\82©\82ç\96{\97\88\82ÌTimeStamp\r
+        \82ð\95\9c\8c³\82Å\82«\82é\82æ\82¤\82É\82µ\82½\81B\r
+\r
+    \81 20081008\r
+      \81E -no-dc \82ð\8eg\97p\82µ\81A\90¸\93x\82ð4\94{\96¢\96\9e\82Åtimecode\82ð\8eæ\82è\8d\9e\82ñ\82¾\8fê\8d\87\81A\95t\97^\82·\82é\83f\83B\83\8c\83C\82ª\8f¬\82³\82·\82¬\82Ä\r
+        DTS\82Ì\89Â\95Ï\94Í\88Í\82ð\8b·\82ß\82Ä\82µ\82Ü\82¢\81ADTS\82ª\82¸\82ê\82é\82±\82Æ\82É\82æ\82è\8eÀ\8dÛ\82Ì\83t\83\8c\81[\83\80\82Ì\95\\8e¦\83^\83C\83~\83\93\83O\82Ü\82Å\82¸\82ê\82Ä\r
+        \82µ\82Ü\82¤\96â\91è\82ª\82 \82Á\82½\82½\82ß\8fC\90³\81B\r
+\r
+        \82±\82Ì\8fC\90³\82É\82æ\82è\81A\95t\97^\82·\82é\83f\83B\83\8c\83C\82Í\81u\83f\83B\83\8c\83C\83t\83\8c\81[\83\80\90\94 * TimeRate * \90¸\93x\81v\82©\82ç\81A\r
+        \81u\83f\83B\83\8c\83C\83t\83\8c\81[\83\80\90\94 * \8dÅ\8f¬fps\81v\82É\95Ï\82í\82è\82Ü\82µ\82½\81B\8bÉ\92[\82Éfps\82Ì\92á\82¢\95\94\95ª\82ª\82 \82éTimeCode\82ð\8eæ\82è\8d\9e\82Þ\82Æ\81A\r
+        \83f\83B\83\8c\83C\82ª\91å\82«\82­\82È\82é\82Ì\82Å\92\8d\88Ó\82µ\82Ä\82­\82¾\82³\82¢\81B\r
+        \81i\81¦\8f\89\8aú\83f\83B\83\8c\83C\83J\83b\83g\82ð\8eg\97p\82µ\82½\8fê\8d\87\82Í\81A\96â\91è\82 \82è\82Ü\82¹\82ñ\81B\81j\r
+\r
+    \81 20080614\r
+      \81EGPAC\82Ì\8dÅ\90V\89»\81B\r
+\r
+    \81 20080511\r
+      \81E\83g\83\89\83b\83N\95¡\90»\8e\9e\82É\81A\93ü\97Í\8c³\83t\83@\83C\83\8b\82Ìedit box\82ª\83R\83s\81[\82³\82ê\82é\82Ì\82Å\8dí\8f\9c\82·\82é\82æ\82¤\82É\8fC\90³\81B\r
+\r
+    \81 20080328\r
+      \81E\8f\89\8aú\83f\83B\83\8c\83C\83J\83b\83g\82ð\8ds\82í\82È\82¢\82Æ\82«\82Í\81Aedts\82ð\91}\93ü\82µ\82Ä\8f\89\8aú\83f\83B\83\8c\83C\82ð\91Å\82¿\8fÁ\82·\82æ\82¤\82É\82µ\82Ä\82Ý\82½\81B\r
+        \82Å\82à\81Aedts\82É\91Î\89\9e\82µ\82½splitter\81Aplayer\82ð\92m\82ç\82È\82¢\81c  QuickTime\82Í\91Î\89\9e\82µ\82Ä\82¢\82é\82Ì\82©\82È\81H\r
+        \8eè\8c³\82Å\8am\94F\82µ\82½\8cÀ\82è\82¾\82ÆVLC\82Í\91Î\89\9e\82µ\82Ä\82Ü\82µ\82½\81BGabest\82Í\83_\83\81\81BHaali\82Í\8c³\81X\83f\83B\83\8c\83C\83J\83b\83g\82·\82é\82Ì\82Å\r
+        \82»\82à\82»\82à\88Ó\96¡\82È\82µ\81B\r
+\r
+        \88ê\89\9emp4\82Æ\82µ\82Ä\82Í\81A\8f\89\8aú\83f\83B\83\8c\83C\83J\83b\83g\82ªhack\82Û\82¢\91Î\89\9e\82Å\81Aedts\96\84\82ß\8d\9e\82Ý\82ª\8bK\8ai\92Ê\82è\82Ì\89¤\93¹\81B\r
+        \82µ\82©\82µ\8c»\8fó\82Í\81Ahack\82Ì\95û\82ª\8cÝ\8a·\90«\82ª\8d\82\82¢\82Æ\82¢\82¤\94ß\82µ\82¢\8fó\8bµ\81B\r
+        \82È\82ñ\82Å\91Î\89\9e\82µ\82Ä\82¢\82È\82¢\83\\83t\83g\82ª\82 \82é\82Ì\82©\82Í\82¨\8e@\82µ\81c\r
+\r
+        \82È\82ñ\82Æ\81AHaali splitter\82Íedts\82ð\96³\8e\8b\82·\82é\82Ì\82Å\82Í\82È\82­\81A\8cë\94F\82µ\82Ä\8cë\93®\8dì\82µ\82Ü\82·\81B\r
+        \82È\82ñ\82¾\82©2\94N\91O\82Æ\82Ü\82é\82Å\8fó\8bµ\82ª\95Ï\82í\82Á\82Ä\82È\82¢\82í\82¯\82Å\82·\82Ë\81B\82Æ\82¢\82¤\82í\82¯\82Åedts\91Î\89\9e\82Í2\94N\8cã\82É\82à\82¤\88ê\89ñ\r
+        \83`\83\83\83\8c\83\93\83W\82µ\82Ü\82·\81B\r
+        \82±\82Ì\83o\81[\83W\83\87\83\93\82Í\82¨\91 \93ü\82è\81B\r
+\r
+    \81 20080327\r
+      \81ETimeScale\81ATimeRate\82Ì\8e©\93®\8cv\8eZ\8f\88\97\9d\82ð\8eÀ\91\95\81B\r
+        \82±\82ê\82É\94º\82¢\81A\83I\83v\83V\83\87\83\93\82ð\88ê\95\94\95Ï\8dX\81B\r
+\r
+    \81 20080314\r
+      \81E\82¢\82ë\82¢\82ë\8dl\82¦\82Ä\81Atimecode format v1 \82ÌAssume\82É\82Í\95½\8bÏ\82Å\82Í\82È\82­\8dÅ\91åfps\82ð\8fo\97Í\82·\82é\r
+        \82æ\82¤\82É\82µ\82Ä\82Ý\82½\81B\r
+        v1\93ü\97Í\8e\9e\82ÌtimeScale\82Í\81A\82±\82ÌAssume\82©\82ç\8cv\8eZ\82µ\82Ü\82·\81B\r
+\r
+    \81 20080313\r
+      \81E\97\\91z\88È\8fã\82É\81ADTSRepair\82ð timecode \82Ì\93ü\8fo\97Í\82É\8eg\82¤\90l\82ª\82¢\82½\82æ\82¤\82È\82Ì\82Å\81A\8b}ç¯\8dì\90¬\81B\r
+        DTSRepair\82Í\96¼\91O\82Ì\92Ê\82èDTS\82ðNTSC\83^\83C\83~\83\93\83O\82É\8b¸\90³\82·\82é\82½\82ß\82Ì\83\\83t\83g\82Å\82·\82Ì\82Å\81A\r
+        \91¼\82Ì\83^\83C\83~\83\93\83O\82ÌMP4\83t\83@\83C\83\8b\82É\8eg\97p\82·\82é\82Æ\81A\82©\82È\82è\82Ì\8am\97¦\82Å\83_\83\81\82É\82µ\82Ä\82µ\82Ü\82¢\82Ü\82·\81B\r
+\r
diff --git a/tstools/DtsEdit/src/DtsEdit.cpp b/tstools/DtsEdit/src/DtsEdit.cpp
new file mode 100644 (file)
index 0000000..e7682c3
--- /dev/null
@@ -0,0 +1,142 @@
+// DTSRepair.cpp : \83R\83\93\83\\81[\83\8b \83A\83v\83\8a\83P\81[\83V\83\87\83\93\82Ì\83G\83\93\83g\83\8a \83|\83C\83\93\83g\82ð\92è\8b`\82µ\82Ü\82·\81B\r
+//\r
+\r
+#include "stdafx.h"\r
+#include "Help.h"\r
+#include "EditMain.h"\r
+#include "windows.h"\r
+\r
+#define EXIST(s) (GetFileAttributes(s) != 0xFFFFFFFF)\r
+\r
+int main(int argc, char* argv[])\r
+{\r
+       int ret = -1;\r
+       T_EDIT_PARAM prm;\r
+\r
+       ZeroMemory(&prm, sizeof(T_EDIT_PARAM));\r
+\r
+       // \83R\83}\83\93\83h\83\89\83C\83\93\83`\83F\83b\83N\r
+       if (argc < 2){\r
+               Help();\r
+               return ret;\r
+       }\r
+\r
+       // \8f\89\8aú\92l\r
+       prm.i_mode = MODE_OUT;\r
+       prm.i_tcv = 2;\r
+       prm.i_timescale = 0;\r
+       prm.i_timerate = 0;\r
+       prm.f_scaleFct = 0;\r
+       prm.f_mlt = 4.0;\r
+       prm.i_delayFrame = -1;\r
+       prm.b_dc = TRUE;\r
+\r
+       for(int i=1; i<argc; i++){\r
+               char *name = argv[i];\r
+               char *value = NULL;\r
+               char *value2 = NULL;\r
+               if((i+1)<argc)\r
+                       value = argv[i+1];\r
+\r
+               if(0){}\r
+\r
+#define OPT(x) else if (!_stricmp(x, name))\r
+\r
+               // \83^\83C\83\80\83R\81[\83h\r
+               OPT("-tc"){\r
+                       if(!value || prm.p_tcfile) goto _ERROR_ARG;\r
+                       prm.p_tcfile = new char[strlen(value) + 1];\r
+                       strcpy(prm.p_tcfile, value);\r
+                       prm.i_mode = MODE_IN;\r
+                       i++;            \r
+               }\r
+\r
+               // \83^\83C\83\80\83R\81[\83h\r
+               OPT("-tv"){\r
+                       if(!value) goto _ERROR_ARG;\r
+                       prm.i_tcv = atoi(value);\r
+                       i++;\r
+               }\r
+\r
+               // \83^\83C\83\80\83X\83P\81[\83\8b\r
+               OPT("-s"){\r
+                       if(!value) goto _ERROR_ARG;\r
+                       prm.i_timescale = atol(value);\r
+                       i++;\r
+               }\r
+\r
+               // \94{\90\94\r
+               OPT("-mlt"){\r
+                       if(!value) goto _ERROR_ARG;\r
+                       prm.f_mlt = atof(value);\r
+                       i++;\r
+               }\r
+\r
+               // \8dÅ\8f¬\83^\83C\83\80\83\8c\81[\83g\r
+               OPT("-r"){\r
+                       if(!value) goto _ERROR_ARG;\r
+                       prm.i_timerate = atol(value);\r
+                       i++;\r
+               }\r
+\r
+               // \8f\89\8aú\83f\83B\83\8c\83C\83J\83b\83g\r
+               OPT("-no-dc"){\r
+                       prm.b_dc = FALSE;\r
+               }\r
+\r
+               // \83f\83B\83\8c\83C\83t\83\8c\81[\83\80\90\94\r
+               OPT("-df"){\r
+                       if(!value) goto _ERROR_ARG;\r
+                       prm.i_delayFrame = atol(value);\r
+                       i++;\r
+               }\r
+\r
+               // \8fo\97Í\83t\83@\83C\83\8b\96¼\r
+               OPT("-o"){\r
+                       if(!value || prm.p_outfile) goto _ERROR_ARG;\r
+                       prm.p_outfile = new char[strlen(value) + 1];\r
+                       strcpy(prm.p_outfile, value);\r
+                       i++;\r
+               }\r
+\r
+               // \93ü\97Í\83t\83@\83C\83\8b\r
+               else if(EXIST(name)){\r
+                       if(prm.p_infile) goto _ERROR_ARG;\r
+                       prm.p_infile = new char[strlen(name) + 1];\r
+                       strcpy(prm.p_infile, name);\r
+               }\r
+\r
+               else {\r
+_ERROR_ARG:\r
+                       Help();\r
+                       goto _ERROR_RET;\r
+               }\r
+       }\r
+\r
+       // \83`\83F\83b\83N\8f\88\97\9d\r
+       if(prm.i_mode == MODE_IN && !EXIST(prm.p_tcfile)){\r
+               Help();\r
+               goto _ERROR_RET;\r
+       }\r
+\r
+       if(!prm.p_outfile){\r
+               prm.p_outfile = new char[strlen(prm.p_infile) + 20];\r
+               strcpy(prm.p_outfile, prm.p_infile);\r
+\r
+               if(prm.i_mode == MODE_IN)\r
+                       strcat(prm.p_outfile, "_tc_input.mp4");\r
+               if(prm.i_mode == MODE_OUT)\r
+                       strcat(prm.p_outfile, "_timecode.txt");\r
+       }\r
+\r
+       // \83\81\83C\83\93\8f\88\97\9d\r
+       EditMain(&prm);\r
+       ret = 0;\r
+\r
+_ERROR_RET:\r
+       if(prm.p_tcfile)        delete [] prm.p_tcfile;\r
+       if(prm.p_outfile)       delete [] prm.p_outfile;\r
+       if(prm.p_infile)        delete [] prm.p_infile;\r
+       return ret;\r
+}\r
+\r
diff --git a/tstools/DtsEdit/src/DtsEdit.sln b/tstools/DtsEdit/src/DtsEdit.sln
new file mode 100644 (file)
index 0000000..3f5dd16
--- /dev/null
@@ -0,0 +1,20 @@
+\r
+Microsoft Visual Studio Solution File, Format Version 10.00\r
+# Visual Studio 2008\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DtsEdit", "DtsEdit.vcproj", "{29DD06A3-83FD-4C25-8783-D93D9C3C671F}"\r
+EndProject\r
+Global\r
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+               Debug|Win32 = Debug|Win32\r
+               Release|Win32 = Release|Win32\r
+       EndGlobalSection\r
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+               {29DD06A3-83FD-4C25-8783-D93D9C3C671F}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {29DD06A3-83FD-4C25-8783-D93D9C3C671F}.Debug|Win32.Build.0 = Debug|Win32\r
+               {29DD06A3-83FD-4C25-8783-D93D9C3C671F}.Release|Win32.ActiveCfg = Release|Win32\r
+               {29DD06A3-83FD-4C25-8783-D93D9C3C671F}.Release|Win32.Build.0 = Release|Win32\r
+       EndGlobalSection\r
+       GlobalSection(SolutionProperties) = preSolution\r
+               HideSolutionNode = FALSE\r
+       EndGlobalSection\r
+EndGlobal\r
diff --git a/tstools/DtsEdit/src/DtsEdit.vcproj b/tstools/DtsEdit/src/DtsEdit.vcproj
new file mode 100644 (file)
index 0000000..864281a
--- /dev/null
@@ -0,0 +1,242 @@
+<?xml version="1.0" encoding="shift_jis"?>\r
+<VisualStudioProject\r
+       ProjectType="Visual C++"\r
+       Version="9.00"\r
+       Name="DtsEdit"\r
+       ProjectGUID="{29DD06A3-83FD-4C25-8783-D93D9C3C671F}"\r
+       RootNamespace="DtsEdit"\r
+       Keyword="Win32Proj"\r
+       TargetFrameworkVersion="131072"\r
+       >\r
+       <Platforms>\r
+               <Platform\r
+                       Name="Win32"\r
+               />\r
+       </Platforms>\r
+       <ToolFiles>\r
+       </ToolFiles>\r
+       <Configurations>\r
+               <Configuration\r
+                       Name="Debug|Win32"\r
+                       OutputDirectory="$(SolutionDir)$(ConfigurationName)"\r
+                       IntermediateDirectory="$(ConfigurationName)"\r
+                       ConfigurationType="1"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="2"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               AdditionalIncludeDirectories="&quot;$(ProjectDir)&quot;"\r
+                               PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE"\r
+                               MinimalRebuild="true"\r
+                               BasicRuntimeChecks="3"\r
+                               RuntimeLibrary="1"\r
+                               UsePrecompiledHeader="0"\r
+                               WarningLevel="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               DebugInformationFormat="4"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="WinMM.lib uuid.lib"\r
+                               OutputFile="bin\$(ProjectName).exe"\r
+                               LinkIncremental="2"\r
+                               IgnoreDefaultLibraryNames="libcmt.lib"\r
+                               GenerateDebugInformation="true"\r
+                               SubSystem="1"\r
+                               RandomizedBaseAddress="1"\r
+                               DataExecutionPrevention="0"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Release|Win32"\r
+                       OutputDirectory="$(SolutionDir)$(ConfigurationName)"\r
+                       IntermediateDirectory="$(ConfigurationName)"\r
+                       ConfigurationType="1"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="2"\r
+                       WholeProgramOptimization="1"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="3"\r
+                               InlineFunctionExpansion="2"\r
+                               FavorSizeOrSpeed="1"\r
+                               AdditionalIncludeDirectories="&quot;$(ProjectDir)&quot;"\r
+                               PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE"\r
+                               UsePrecompiledHeader="0"\r
+                               WarningLevel="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="WinMM.lib uuid.lib"\r
+                               OutputFile="bin\$(ProjectName).exe"\r
+                               LinkIncremental="1"\r
+                               IgnoreDefaultLibraryNames=""\r
+                               SubSystem="1"\r
+                               OptimizeReferences="2"\r
+                               EnableCOMDATFolding="2"\r
+                               RandomizedBaseAddress="1"\r
+                               DataExecutionPrevention="0"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+       </Configurations>\r
+       <References>\r
+       </References>\r
+       <Files>\r
+               <Filter\r
+                       Name="\83\\81[\83\83t\83@\83C\83\8b"\r
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"\r
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"\r
+                       >\r
+                       <File\r
+                               RelativePath=".\common.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\DtsEdit.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\Help.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\EditMain.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\stdafx.cpp"\r
+                               >\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="\83w\83b\83_\81\83t\83@\83C\83\8b"\r
+                       Filter="h;hpp;hxx;hm;inl;inc;xsd"\r
+                       UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"\r
+                       >\r
+                       <File\r
+                               RelativePath=".\common.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\Help.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\EditMain.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\stdafx.h"\r
+                               >\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="\83\8a\83\\81[\83\83t\83@\83C\83\8b"\r
+                       Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"\r
+                       UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"\r
+                       >\r
+               </Filter>\r
+               <File\r
+                       RelativePath=".\gpac\libgpac_static.lib"\r
+                       >\r
+               </File>\r
+       </Files>\r
+       <Globals>\r
+       </Globals>\r
+</VisualStudioProject>\r
diff --git a/tstools/DtsEdit/src/EditMain.cpp b/tstools/DtsEdit/src/EditMain.cpp
new file mode 100644 (file)
index 0000000..3790de8
--- /dev/null
@@ -0,0 +1,281 @@
+#include <stdio.h>\r
+#include "stdafx.h"\r
+#include "Help.h"\r
+#include "EditMain.h"\r
+#include "debug.h"\r
+\r
+\r
+void EditMain(T_EDIT_PARAM *prm){\r
+\r
+       GF_Err          e;\r
+       T_MP4_INFO      mi;\r
+       T_TS_LIST       *ts             = NULL;\r
+       T_TS_LIST       *tsSort = NULL;\r
+\r
+       // \8f\89\8aú\89»\r
+       gf_sys_init();\r
+\r
+       ZeroMemory(&mi, sizeof(T_MP4_INFO));\r
+\r
+       // \83^\81[\83Q\83b\83g\83t\83@\83C\83\8b\82Ì\83I\81[\83v\83\93\r
+       mi.fp_in = gf_isom_open(prm->p_infile, GF_ISOM_OPEN_READ, NULL);\r
+       printf("\93ü\97Í\83t\83@\83C\83\8b... [%s]\n\n", prm->p_infile);\r
+\r
+       mi.i_trackCount = gf_isom_get_track_count(mi.fp_in);\r
+       \r
+       // \8ae\83g\83\89\83b\83N\82Ì\83t\83H\81[\83}\83b\83g\82ð\8eæ\93¾\r
+       u32 lst4CC[] = {GF_ISOM_BRAND_AVC1, GF_ISOM_BRAND_MP4V, GF_ISOM_BRAND_XVID};\r
+       SearchTrackOf4CC(&mi, lst4CC, 3);\r
+\r
+       // \96Ú\93I\82Ì\83g\83\89\83b\83N\82ª\8c©\82Â\82©\82ç\82È\82©\82Á\82½\8fê\8d\87\81B\r
+       if (mi.i_trackNo == NULL){\r
+               ErrorMessage(MSG_NO_4CC);\r
+               goto _ERROR_RET;\r
+       }\r
+\r
+       // \83T\83\93\83v\83\8b\90\94\82Ì\8eæ\93¾\r
+       mi.ui_sampleCount = gf_isom_get_sample_count(mi.fp_in, mi.i_trackNo);\r
+       if(mi.ui_sampleCount < 3){\r
+               ErrorMessage(MSG_NO_SAMPLE);\r
+               goto _ERROR_RET;\r
+       }\r
+\r
+       ts = new T_TS_LIST[mi.ui_sampleCount + 1];\r
+       ZeroMemory(ts, sizeof(T_TS_LIST) * mi.ui_sampleCount);\r
+\r
+       // \83T\83\93\83v\83\8b\8fî\95ñ\82ð\8eæ\93¾\82µ\81A\83f\83B\83\8c\83C\83t\83\8c\81[\83\80\94»\92è\81ECTS\8f\87\82É\95À\82Ñ\91Ö\82¦\r
+       printf("\83T\83\93\83v\83\8b\8fî\95ñ\8eæ\93¾\92\86...\n");\r
+       if(readTsFromFile(&mi, ts))\r
+               goto _ERROR_RET;\r
+\r
+       // \83s\83N\83`\83\83\95\\8e¦\8f\87\82Å\83\\81[\83g\r
+       tsSort = new T_TS_LIST[mi.ui_sampleCount + 1];\r
+       memcpy(tsSort, ts, sizeof(T_TS_LIST) * mi.ui_sampleCount);\r
+       qsort(tsSort, mi.ui_sampleCount, sizeof(T_TS_LIST), (int(*)(const void*, const void*))CompareTS_PTS);\r
+\r
+       // \8dÅ\8fI\83t\83\8c\81[\83\80\82ÌFPS\95â\8a®\r
+       u32 i = mi.ui_sampleCount;\r
+       tsSort[i].DTS                   = ts[i-1].DTS + (ts[i-1].DTS - ts[i-2].DTS);\r
+       tsSort[i].CTS_Offset    = 0;\r
+       tsSort[i].CTS                   = tsSort[i-1].CTS + (tsSort[i-1].CTS - tsSort[i-2].CTS);\r
+       tsSort[i].PTS                   = tsSort[i-1].PTS + (tsSort[i-1].PTS - tsSort[i-2].PTS);\r
+       tsSort[i].samples               = i+1;\r
+\r
+       // \83^\83C\83\80\83X\83P\81[\83\8b\82Ì\8eæ\93¾\r
+       mi.i_org_timescale = (int)gf_isom_get_media_timescale(mi.fp_in, mi.i_trackNo);\r
+\r
+       // \82±\82Ì\95Ó\82Å\83\82\81[\83h\95ª\8aò\r
+       if(prm->i_mode == MODE_IN){\r
+               // \83^\83C\83\80\83R\81[\83h\93ü\97Í\r
+\r
+               // \8dÅ\8f¬\83t\83\8c\81[\83\80\83\8c\81[\83g\8eæ\93¾\r
+               mi.i_org_timerate = getMinimumPTSDiff(&mi, tsSort);\r
+               if(prm->i_timerate <= 0) {\r
+                       int rate = gcd(mi.i_org_timescale, mi.i_org_timerate);\r
+                       prm->i_timerate = mi.i_org_timerate / rate;\r
+               }\r
+\r
+               // TimeCode V2 \82Ì\8eæ\82è\8d\9e\82Ý\r
+               if (prm->i_tcv == 1){\r
+                       if(readTimeCodeFromFileV1(&mi, tsSort, prm))\r
+                               goto _ERROR_RET;\r
+               } else if(prm->i_tcv == 2){\r
+                       if(readTimeCodeFromFile(&mi, tsSort, prm))\r
+                               goto _ERROR_RET;\r
+               } else {\r
+                       goto _ERROR_RET;\r
+               }\r
+\r
+               // \92x\89\84\83t\83\8c\81[\83\80\90\94\8eæ\93¾\r
+               if(prm->i_delayFrame < 0) {\r
+                       prm->i_delayFrame = getDelayFlame(&mi, ts);\r
+               }\r
+               mi.i_delayFrame = prm->i_delayFrame;\r
+               mi.i_initDelay = mi.i_delayFrame * (int)(getAveragePTSDiff(&mi, tsSort) / (double)prm->i_timerate + 0.5) * prm->i_timerate;\r
+\r
+               // \8c\8b\89Ê\82ð\83R\83s\81[\82µ\82Ä\83s\83N\83`\83\83\8f\87\82É\83\\81[\83g\r
+               memcpy(ts, tsSort, sizeof(T_TS_LIST) * mi.ui_sampleCount);\r
+               qsort(ts, mi.ui_sampleCount, sizeof(T_TS_LIST), (int(*)(const void*, const void*))CompareTS_Sample);\r
+\r
+\r
+               // \8fî\95ñ\82Ì\95\\8e¦\r
+               printf("\n");\r
+               printf("--- input ---\n");\r
+               printf("TimeScale       \81F%d\n", mi.i_org_timescale);\r
+               printf("TimeRate        \81F%d\n", mi.i_org_timerate);\r
+               printf("Sample Count    \81F%d\n", mi.ui_sampleCount);\r
+               printf("Delay Frame     \81F%d\n", mi.i_delayFrame);\r
+               printf("Delay Time      \81F%d\n", mi.i_initDelay);\r
+               printf("\n");\r
+               printf("--- output ---\n");\r
+               printf("TimeScale       \81F%d\n", prm->i_timescale);\r
+               printf("TimeRate        \81F%d\n", prm->i_timerate);\r
+               printf("Multiple        \81F%lf\n", prm->f_scaleFct);\r
+               printf("\n");\r
+               printf("\83t\83@\83C\83\8b\8fo\97Í\92\86... [%s]\n", prm->p_outfile);\r
+\r
+               u32 readDscIdx = 0;\r
+               u32 destTrack = 0;\r
+               mi.fp_out = gf_isom_open(prm->p_outfile, GF_ISOM_OPEN_WRITE, NULL);\r
+\r
+\r
+               // \8fo\97Í\8aJ\8en\r
+               for (int trackIdx=1; trackIdx<=mi.i_trackCount; trackIdx++){\r
+                       // \83g\83\89\83b\83N\82Ì\83R\83s\81[\r
+                       gf_isom_clone_track(mi.fp_in, trackIdx, mi.fp_out, true, &destTrack);\r
+                       // edts\82Ì\8dí\8f\9c\r
+                       gf_isom_remove_edit_segments(mi.fp_out, destTrack);\r
+\r
+                       if (trackIdx != mi.i_trackNo){\r
+                               u32 sampleCount = gf_isom_get_sample_count(mi.fp_in, trackIdx);\r
+                               for(u32 i=1; i<=sampleCount; i++){\r
+                                       printf("... %5.1f%%\r", (double)i/(double)sampleCount * 100.0);\r
+                                       GF_ISOSample *sample = gf_isom_get_sample(mi.fp_in, trackIdx, i, &readDscIdx);\r
+                                       e = gf_isom_add_sample(mi.fp_out, destTrack, readDscIdx, sample);\r
+                                       gf_isom_sample_del(&sample);\r
+                               }\r
+\r
+                       } else {\r
+                               // \83^\83C\83\80\83X\83P\81[\83\8b\90Ý\92è\r
+                               e = gf_isom_set_media_timescale(mi.fp_out, destTrack, (u32)prm->i_timescale);\r
+                               if(e)\r
+                                       printf("!!! \83^\83C\83\80\83X\83P\81[\83\8b\90Ý\92è\8e¸\94s : %d !!!\n", e);\r
+\r
+                               // DTS\82ð\90Ý\92è\82µ\8fo\97Í\r
+                               s64 before_dts = -1;\r
+                               int delta_time = int((prm->i_timerate * prm->f_scaleFct) / (mi.i_delayFrame*2));\r
+\r
+                               if(delta_time < 1 && prm->b_dc){\r
+                                       ErrorMessage(MSG_MORE_SMALL_TIMERATE);\r
+                                       break;\r
+                               }\r
+\r
+                               for(u32 i=0; i<mi.ui_sampleCount; i++){\r
+                                       printf("... %5.1f%%\r", (double)i/(double)mi.ui_sampleCount * 100.0);\r
+\r
+                                       s64 cts = 0;\r
+                                       s64 dts = 0;\r
+                                       int offset = 0;\r
+                                       int dts_delay = 0;\r
+                                       int cts_delay = 0;\r
+                                       int ts_diff = 0;\r
+\r
+                                       cts = ts[i].PTS;\r
+                                       if(!prm->b_dc){\r
+                                               dts_delay = 0;\r
+                                               cts_delay = mi.i_initDelay;\r
+                                       } else {\r
+                                               for(u32 k=MAX(0, i - mi.i_delayFrame); k<i; k++)\r
+                                                       ts_diff += (int)(tsSort[k + 1].PTS - tsSort[k].PTS);\r
+\r
+                                               dts_delay = MAX(mi.i_initDelay, ts_diff);\r
+                                               cts_delay = 0;\r
+                                       }\r
+\r
+                                       if(dts_delay < tsSort[i].PTS)\r
+                                               dts = tsSort[i].PTS - dts_delay;\r
+\r
+                                       // \91O\89ñ\82ÌDTS\82æ\82è\82à\92l\82Í\91å\82«\82­\82È\82¯\82ê\82Î\82È\82ç\82È\82¢\81B\r
+                                       if(dts <= before_dts)\r
+                                               dts = before_dts + delta_time;\r
+\r
+                                       // CTS_Offset\82Ì\8eZ\8fo\r
+                                       offset = (int)(cts - dts + cts_delay);\r
+\r
+                                       // \83I\83t\83Z\83b\83g\82Ì\8cv\8eZ\82Å\95\89\82É\82È\82Á\82Ä\82µ\82Ü\82Á\82½\8fê\8d\87\r
+                                       if (offset < 0){\r
+                                               dts += offset;\r
+                                               offset = 0;\r
+                                       }\r
+\r
+                                       ts[i].DTS = before_dts = dts;\r
+                                       ts[i].CTS_Offset = offset;\r
+\r
+                                       // \83`\83F\83b\83N\r
+                                       if( (dts + (s64)offset - (s64)ts[0].CTS_Offset) != cts )\r
+                                               printf("!!! \95\\8e¦\83^\83C\83~\83\93\83O\83G\83\89\81[ / Track:%d Frame:%d Target PTS:%I64d (DTS:%I64d, CTS_Offset:%d, Delay:%d) !!!\n", destTrack, i+1, cts, dts, offset, ts[0].CTS_Offset);\r
+\r
+                                       GF_ISOSample *sample = gf_isom_get_sample(mi.fp_in, mi.i_trackNo, i+1, &readDscIdx);\r
+                                       sample->DTS = ts[i].DTS;\r
+                                       sample->CTS_Offset = ts[i].CTS_Offset;\r
+                                       e = gf_isom_add_sample(mi.fp_out, destTrack, readDscIdx, sample);\r
+\r
+                                       if(e)\r
+                                               printf("!!! \83T\83\93\83v\83\8b\8f\91\82«\8d\9e\82Ý\83G\83\89\81[ / Track:%d Frame:%d DTS:%I64d, CTS_Offset:%d Err:%d !!!\n", destTrack, i+1, sample->DTS, sample->CTS_Offset, e);\r
+                                       gf_isom_sample_del(&sample);\r
+                               }\r
+\r
+                               // edts\82Ì\91}\93ü\r
+                               //GF_ISOSample *sample = gf_isom_get_sample_info(mi.fp_out, destTrack, 1, NULL, NULL);\r
+                               //if(sample->CTS_Offset > 0){\r
+                               //      u64 trackDur = gf_isom_get_track_duration(mi.fp_out, destTrack);\r
+                               //      gf_isom_remove_edit_segments(mi.fp_out, destTrack);\r
+                               //      gf_isom_append_edit_segment(mi.fp_out, destTrack, trackDur, sample->CTS_Offset, GF_ISOM_EDIT_NORMAL);\r
+                               //}\r
+                               //gf_isom_sample_del(&sample);\r
+                       }\r
+\r
+                       printf("... %d\83g\83\89\83b\83N\8fo\97Í\8fI\97¹\n", trackIdx);\r
+               }\r
+\r
+               // \8fo\97Í\83t\83@\83C\83\8b\82ð\95Â\82\82é\r
+               gf_isom_clone_pl_indications(mi.fp_in, mi.fp_out);\r
+               gf_isom_clone_root_od(mi.fp_in, mi.fp_out);\r
+\r
+               u64 duration = gf_isom_get_duration(mi.fp_out);\r
+               gf_isom_make_interleave(mi.fp_out, 0.5);\r
+               gf_isom_close(mi.fp_out);\r
+\r
+       }\r
+       else if (prm->i_mode == MODE_OUT){\r
+               // TIMECODE\82Ì\8fo\97Í\r
+               if(prm->i_tcv == 2){\r
+                       FILE *fpout;\r
+                       if((fpout = fopen(prm->p_outfile, "wb")) != NULL){\r
+                               fprintf(fpout, "# timecode format v2\r\n");\r
+                               for(u32 i=0; i<mi.ui_sampleCount; i++){\r
+                                       fprintf(fpout, "%.6lf\r\n", (double)tsSort[i].PTS / (double)mi.i_org_timescale * 1000.0);\r
+                               }\r
+                       }\r
+                       fclose(fpout);\r
+                       printf("... timecode format v2 \8fo\97Í\8fI\97¹\n");\r
+               }\r
+               else if(prm->i_tcv == 1){\r
+                       FILE *fpout;\r
+                       if((fpout = fopen(prm->p_outfile, "wb")) != NULL){\r
+                               fprintf(fpout, "# timecode format v1\r\n");\r
+                               fprintf(fpout, "Assume %.6lf\r\n", getMaximumFps(&mi, tsSort));\r
+                               u32 stpos = 0;\r
+                               double fps = 0.0;\r
+                               double beforFps = (double)mi.i_org_timescale/(double)(tsSort[1].PTS - tsSort[0].PTS);\r
+                               for(u32 i=0; i<mi.ui_sampleCount; i++){\r
+                                       fps = (double)mi.i_org_timescale/(double)(tsSort[i+1].PTS - tsSort[i].PTS);\r
+                                       if (fps != beforFps){\r
+                                               fprintf(fpout, "%d,%d,%.6lf\r\n",stpos, i-1, beforFps);\r
+                                               beforFps = fps;\r
+                                               stpos = i;\r
+                                       }\r
+                               }\r
+                               if(stpos <= mi.ui_sampleCount - 1){\r
+                                       fprintf(fpout, "%d,%d,%.6lf\r\n",stpos, mi.ui_sampleCount - 1, fps);\r
+                               }\r
+                       }\r
+                       fclose(fpout);\r
+                       printf("... timecode format v1 \8fo\97Í\8fI\97¹\n");\r
+               } else {\r
+                       goto _ERROR_RET;\r
+               }\r
+       }\r
+\r
+\r
+_ERROR_RET:\r
+\r
+       // \83t\83@\83C\83\8b\82ð\95Â\82\82Ä\8fI\97¹\r
+       gf_isom_close(mi.fp_in);\r
+\r
+       if(ts)          delete [] ts;\r
+       if(tsSort)      delete [] tsSort;\r
+       // \8dÅ\8fI\r
+       gf_sys_close();\r
+}\r
+\r
diff --git a/tstools/DtsEdit/src/EditMain.h b/tstools/DtsEdit/src/EditMain.h
new file mode 100644 (file)
index 0000000..439a10f
--- /dev/null
@@ -0,0 +1,9 @@
+\r
+#include "stdafx.h"\r
+\r
+#pragma once\r
+\r
+#define MODE_IN                        0x00000001ui32\r
+#define MODE_OUT               0x00000002ui32\r
+\r
+void EditMain(T_EDIT_PARAM *prm);\r
diff --git a/tstools/DtsEdit/src/Help.cpp b/tstools/DtsEdit/src/Help.cpp
new file mode 100644 (file)
index 0000000..d250d9f
--- /dev/null
@@ -0,0 +1,68 @@
+#include <stdio.h>\r
+#include <string.h>\r
+\r
+#include <Help.h>\r
+\r
+// \83w\83\8b\83v\82Ì\95\\8e¦\r
+void Help(){\r
+       printf("\83p\83\89\83\81\81[\83^\82ª\95s\90³\82Å\82·\81B\n");\r
+       printf("Usage: DtsEdit <option> <mp4 file>\n");\r
+       printf("\n");\r
+       printf("option list\n");\r
+       printf("        -tc <file name>       : \93ü\97Í\82·\82éTimeCode\83t\83@\83C\83\8b\82ð\8ew\92è\82µ\82Ü\82·\81B\n");\r
+       printf("                                -tc\82ª\8ew\92è\82³\82ê\82½\8fê\8d\87\82Í\81ATimeCode\82ð\8ew\92è\82ÌMP4\83t\83@\83C\83\8b\82É\96\84\82ß\8d\9e\82Ý\82Ü\82·\81B\n");\r
+       printf("                                \8ew\92è\82³\82ê\82È\82©\82Á\82½\8fê\8d\87\82Í\81AMP4\83t\83@\83C\83\8b\82©\82çTimeCode\82ð\92\8a\8fo\82µ\82Ü\82·\81B\n");\r
+       printf("        -tv <1|2>             : \93ü\8fo\97Í\82·\82éTimeCode\83t\83@\83C\83\8b\82Ì\83o\81[\83W\83\87\83\93\82ð\8ew\92è\82µ\82Ü\82·\81B\83f\83t\83H\83\8b\83g\82Í2\82Å\82·\81B\n");\r
+       printf("        -s <time scale>       : timeScale\82ð\8ew\92è\82µ\82Ü\82·\81B\n");\r
+       printf("                                \96¢\8ew\92è\82Ì\8fê\8d\87\82Í\81A\93ü\97Í\82³\82ê\82½timecode format\82É\82æ\82Á\82Ä\8e©\93®\8cv\8eZ\82³\82ê\82Ü\82·\81B\n");\r
+       printf("        -mlt <multiple>       : timeScale\82Ì\8e©\93®\8cv\8eZ\82É\8eg\97p\82µ\82Ü\82·\81B\n");\r
+       printf("                                \83f\83t\83H\83\8b\83g\92l\82Í4.0\94{\82Å\82·\81BtimeScale\82ð\92¼\90Ú\8ew\92è\82µ\82½\8fê\8d\87\82Í\81A\93à\95\94\82Ì\8cv\8eZ\8c\8b\89Ê\82Å\8fã\8f\91\82«\82³\82ê\82Ü\82·\81B\n");\r
+       printf("        -r <time rate>        : \8dÅ\8f¬timeRate\82ð\8ew\92è\82µ\82Ü\82·\81B\n");\r
+       printf("                                \96¢\8ew\92è\82Ì\8fê\8d\87\82Í\81A\93ü\97Í\82³\82ê\82½MP4\83t\83@\83C\83\8b\82É\8f]\82¢\82Ü\82·\81B\n");\r
+       printf("        -no-dc                : \8f\89\8aú\83f\83B\83\8c\83C\83J\83b\83g\82ð\96³\8cø\82É\82µ\82Ü\82·\81B\n");\r
+       printf("        -df <count>           : \8f\89\8aú\83f\83B\83\8c\83C\82ð\95t\97^\82·\82é\8fê\8d\87\82Ì\81A\83f\83B\83\8c\83C\83t\83\8c\81[\83\80\90\94\82ð\8ew\92è\82µ\82Ü\82·\81B\n");\r
+       printf("                                \96¢\8ew\92è\82Ì\8fê\8d\87\82Í\81A\93ü\97Í\82³\82ê\82½MP4\83t\83@\83C\83\8b\82©\82ç\8e©\93®\8cv\8eZ\82µ\82Ü\82·\81B\n");\r
+       printf("                                \8dÄ\90\8e\9e\8aÔ\82Ì\92Z\82¢\93®\89æ\82Å\82Í\90³\8am\82É\8eæ\93¾\82Å\82«\82È\82¢\8fê\8d\87\82ª\82 \82è\82Ü\82·\81B\n");\r
+       printf("        -o <output file>      : \8fo\97Í\83t\83@\83C\83\8b\82ð\8ew\92è\82µ\82Ü\82·\81B\n");\r
+       printf("\n");\r
+}\r
+\r
+int ErrorMessage(int msgId){\r
+       char msg[1024];\r
+\r
+       switch(msgId)\r
+       {\r
+               case MSG_NO_4CC:\r
+                       strcpy(msg, "\96¢\91Î\89\9e\82Ì\83r\83f\83I\8c`\8e®\82Å\82·\81B\n");\r
+                       strcat(msg, "\91Î\89\9e\82·\82éFOURCC\81Favc1, mp4v, xvid");\r
+                       break;\r
+               case MSG_NO_V2:\r
+                       strcpy(msg, "\8ew\92è\82³\82ê\82½\83t\83@\83C\83\8b\82Í timecode format v2 \82Å\82Í\82 \82è\82Ü\82¹\82ñ\81B");\r
+                       break;\r
+               case MSG_NO_V1:\r
+                       strcpy(msg, "\8ew\92è\82³\82ê\82½\83t\83@\83C\83\8b\82Í timecode format v1 \82Å\82Í\82 \82è\82Ü\82¹\82ñ\81B");\r
+                       break;\r
+               case MSG_MORE_SMALL_DIV_PTS:\r
+                       strcpy(msg, "\83s\83N\83`\83\83\82Ì\95\\8e¦\8aÔ\8au\82ª\8f¬\82³\82·\82¬\82Ü\82·\81B\n");\r
+                       strcat(msg, "timecode\82ð\93ü\97Í\82µ\82Ä\82¢\82é\8fê\8d\87\82Í\81A\93à\97e\82ð\8am\94F\82µ\82Ä\82­\82¾\82³\82¢\81B");\r
+                       break;\r
+               case MSG_LOST_FRAME:\r
+                       strcpy(msg, "\83t\83\8c\81[\83\80\82ª\98A\91±\82µ\82Ä\82¢\82È\82¢\82½\82ß\81ATimeCode\93ü\97Í\82ð\92â\8e~\82µ\82Ü\82µ\82½\81B");\r
+                       break;\r
+               case MSG_NO_ENOUGH_FRAME:\r
+                       strcpy(msg, "\83t\83\8c\81[\83\80\82ª\91«\82è\82È\82¢\82½\82ß\81ATimeCode\93ü\97Í\82ð\92â\8e~\82µ\82Ü\82µ\82½\81B");\r
+                       break;\r
+               case MSG_NO_SAMPLE:\r
+                       strcpy(msg, "\83T\83\93\83v\83\8b\82ª\8eæ\93¾\82Å\82«\82Ü\82¹\82ñ\81B\8dÅ\92á\82Å\82à2\83t\83\8c\81[\83\80\82Ì\93®\89æ\82ð\93ü\97Í\82µ\82Ä\82­\82¾\82³\82¢\81B");\r
+                       break;\r
+               case MSG_MORE_SMALL_TIMERATE:\r
+                       strcpy(msg, "TimeScale\82Ì\95ª\89ð\94\\82É\91Î\82µ\82Ä\83f\83B\83\8c\83C\83t\83\8c\81[\83\80\82ª\91½\82·\82¬\82é\82½\82ß\81A\8f\89\8aú\83f\83B\83\8c\83C\83J\83b\83g\82ª\8fo\97\88\82Ü\82¹\82ñ\81B");\r
+                       break;\r
+               default:\r
+                       sprintf(msg, "\96¢\92è\8b`\83\81\83b\83Z\81[\83W\81F0x%08X", msgId);\r
+                       break;\r
+       }\r
+       \r
+       printf("\n%s\n\n", msg);\r
+       return 1;\r
+}\r
diff --git a/tstools/DtsEdit/src/Help.h b/tstools/DtsEdit/src/Help.h
new file mode 100644 (file)
index 0000000..5ff36a9
--- /dev/null
@@ -0,0 +1,17 @@
+\r
+#pragma once\r
+\r
+#define MSG_NO_AVC1                                    0x00000001\r
+#define MSG_NO_V2                                      0x00000002\r
+#define MSG_NO_4CC                                     0x00000003\r
+#define MSG_NO_V1                                      0x00000004\r
+#define MSG_MORE_SMALL_DIV_PTS         0x00000005\r
+#define MSG_LOST_FRAME                         0x00000006\r
+#define MSG_NO_ENOUGH_FRAME                    0x00000007\r
+#define MSG_NO_SAMPLE                          0x00000008\r
+#define MSG_MORE_SMALL_TIMERATE                0x00000009\r
+\r
+void Help();\r
+\r
+int ErrorMessage(int msgId);\r
+\r
diff --git a/tstools/DtsEdit/src/common.cpp b/tstools/DtsEdit/src/common.cpp
new file mode 100644 (file)
index 0000000..7ed8b49
--- /dev/null
@@ -0,0 +1,311 @@
+#include "stdafx.h"\r
+#include "help.h"\r
+#include "debug.h"\r
+\r
+// \8dÅ\91å\8cö\96ñ\90\94\82Ì\8eæ\93¾\r
+int gcd( int a, int b) {\r
+    while (1) {\r
+        int c = a % b;\r
+        if( !c )\r
+            return b;\r
+        a = b;\r
+        b = c;\r
+    }\r
+}\r
+\r
+int CompareU64(const u64 *a, const u64 *b)\r
+{\r
+       s64 diff = (s64)(*a - *b);\r
+       return (diff > 0 ? 1: diff == 0 ? 0: -1);\r
+}\r
+\r
+int CompareTS_PTS(const T_TS_LIST *a, const T_TS_LIST *b)\r
+{\r
+       s64 diff = (s64)(a->PTS - b->PTS);\r
+       return (diff > 0 ? 1: diff == 0 ? 0: -1);\r
+}\r
+\r
+int CompareTS_Sample(const T_TS_LIST *a, const T_TS_LIST *b)\r
+{\r
+       int diff = (int)(a->samples - b->samples);\r
+       return (diff > 0 ? 1: diff == 0 ? 0: -1);\r
+}\r
+\r
+\r
+int SearchTrackOf4CC(T_MP4_INFO *mi, u32 *List4CC, int ListCount){\r
+       u32     tgTrack = NULL;\r
+       u32 tg4CC = NULL;\r
+       for (int i = 1; i <= mi->i_trackCount; i++){\r
+               tg4CC = gf_isom_get_media_subtype(mi->fp_in, i, 1);\r
+               if (tg4CC == GF_ISOM_SUBTYPE_MPEG4)\r
+                       tg4CC = gf_isom_get_mpeg4_subtype(mi->fp_in, i, 1);\r
+\r
+               DPRINTF("FOUR CC %s \r\n", gf_4cc_to_str(tg4CC));\r
+\r
+               for (s32 k=0; k<ListCount; k++){\r
+                       if (tg4CC == List4CC[k]){\r
+                               tgTrack = i;\r
+                               break;\r
+                       }\r
+               }\r
+\r
+               if (tgTrack){\r
+                       mi->i_trackNo = tgTrack;\r
+                       mi->ui_4cc = tg4CC;\r
+                       break;\r
+               }\r
+       }\r
+\r
+       return 0;\r
+}\r
+\r
+\r
+int readTsFromFile(T_MP4_INFO *mi, T_TS_LIST *ts){\r
+       int ret = 0;\r
+\r
+       for(u32 i=0; i<mi->ui_sampleCount; i++){\r
+               GF_ISOSample *sample = gf_isom_get_sample_info(mi->fp_in, mi->i_trackNo, i+1, NULL, NULL);\r
+\r
+               if(!sample){\r
+                       ret = ErrorMessage(MSG_NO_SAMPLE);\r
+                       break;\r
+               }\r
+\r
+               ts[i].DTS                       = sample->DTS;\r
+               ts[i].CTS_Offset        = sample->CTS_Offset;\r
+               ts[i].CTS                       = sample->DTS + sample->CTS_Offset;\r
+               ts[i].PTS                       = ts[i].CTS - ts[0].CTS_Offset;\r
+               ts[i].samples           = i+1;\r
+               gf_isom_sample_del(&sample);\r
+       }\r
+\r
+       return ret;\r
+}\r
+\r
+\r
+int getDelayFlame(T_MP4_INFO *mi, T_TS_LIST *ts){\r
+       int delay = 0;\r
+       int maxDelay = 0;\r
+       for(u32 i=1; i<mi->ui_sampleCount; i++){\r
+               if(ts[i-1].CTS > ts[i].CTS){\r
+                       delay++;\r
+                       maxDelay = MAX(maxDelay, delay);\r
+               } else {\r
+                       delay = 0;\r
+               }\r
+       }\r
+\r
+       return maxDelay;\r
+}\r
+\r
+\r
+int getMinimumPTSDiff(T_MP4_INFO *mi, T_TS_LIST *ts){\r
+       int min_diff = INT_MAX;\r
+       for(u32 i=1; i<mi->ui_sampleCount; i++){\r
+               int diff = (int)(ts[i].PTS - ts[i-1].PTS);\r
+               min_diff = MIN(min_diff, diff);\r
+       }\r
+       return min_diff;\r
+}\r
+\r
+int getMaximumPTSDiff(T_MP4_INFO *mi, T_TS_LIST *ts){\r
+       int max_diff = 0;\r
+       for(u32 i=1; i<mi->ui_sampleCount; i++){\r
+               int diff = (int)(ts[i].PTS - ts[i-1].PTS);\r
+               max_diff = MAX(max_diff, diff);\r
+       }\r
+       return max_diff;\r
+}\r
+\r
+double getAveragePTSDiff(T_MP4_INFO *mi, T_TS_LIST *ts){\r
+       double avr_diff = 0.0;\r
+       for(u32 i=1; i<mi->ui_sampleCount; i++){\r
+               double diff = (double)(ts[i].PTS - ts[i-1].PTS);\r
+               avr_diff += diff / (double)(mi->ui_sampleCount-1);\r
+       }\r
+       return avr_diff;\r
+}\r
+\r
+double getAverageFps(T_MP4_INFO *mi, T_TS_LIST *ts){\r
+       double base_fps = (double)mi->i_org_timescale / (double)(ts[1].PTS - ts[0].PTS);\r
+       double sum_fps = 0;\r
+       for(u32 i=1; i<mi->ui_sampleCount; i++){\r
+               sum_fps += ((double)mi->i_org_timescale / (double)(ts[i].PTS - ts[i-1].PTS)) - base_fps;\r
+       }\r
+       return ((sum_fps / (double)mi->ui_sampleCount) + base_fps);\r
+}\r
+\r
+double getMaximumFps(T_MP4_INFO *mi, T_TS_LIST *ts){\r
+       double max_fps = 0;\r
+       for(u32 i=1; i<mi->ui_sampleCount; i++){\r
+               double fps = (double)mi->i_org_timescale / (double)(ts[i].PTS - ts[i-1].PTS);\r
+               max_fps = MAX(max_fps, fps);\r
+       }\r
+       return max_fps;\r
+}\r
+\r
+\r
+\r
+int readTimeCodeFromFile(T_MP4_INFO *mi, T_TS_LIST *ts, T_EDIT_PARAM *prm){\r
+       FILE *fpin;\r
+       int err = 0;\r
+\r
+       if((fpin = fopen(prm->p_tcfile, "rb")) != NULL){\r
+               printf("timecode\8eæ\8d\9e\92\86...\n");\r
+\r
+               char buf1[256], buf2[256], buf3[256], buf4[256];\r
+\r
+               /* read header */\r
+               fscanf(fpin, "%s %s %s %s", buf1, buf2, buf3, buf4);\r
+               if(     _stricmp(buf2, "timecode") != 0 ||\r
+                       _stricmp(buf3, "format") != 0 ||\r
+                       _stricmp(buf4, "v2") != 0\r
+               ){\r
+                       err = ErrorMessage(MSG_NO_V2);\r
+               } else {\r
+                       u32             i                       = 0;\r
+                       double  timeStamp       = 0;\r
+                       bool    enough          = false;\r
+                       double  *timeList       = new double[mi->ui_sampleCount];\r
+\r
+                       // \83t\83@\83C\83\8b\82ð\93Ç\82Ý\8d\9e\82Ý\r
+                       while( fscanf(fpin, "%lf", &timeStamp) != EOF ){\r
+                               timeList[i] = timeStamp;\r
+                               i++;\r
+                               if (mi->ui_sampleCount <= i){\r
+                                       enough = true;\r
+                                       break;\r
+                               }\r
+                       }\r
+\r
+                       if (!enough) {\r
+                               err = ErrorMessage(MSG_NO_ENOUGH_FRAME);\r
+                       } else {\r
+\r
+                               double min_timeStamp = INT_MAX;\r
+                               // \8dÅ\8f¬\83^\83C\83~\83\93\83O\82ð\8eæ\93¾\r
+                               for(i=0; i<mi->ui_sampleCount - 1; i++){\r
+                                       double tmp = timeList[i+1] - timeList[i];\r
+                                       if(tmp > 0.0){\r
+                                               int true_fps = (int)((double)prm->i_timerate / tmp + 0.5);\r
+                                               if( true_fps > 0)\r
+                                                       tmp = (double)prm->i_timerate / (double)(true_fps);\r
+                                       }\r
+                                       min_timeStamp = MIN(min_timeStamp, tmp);\r
+                               }\r
+                               // \83G\83\89\81[\89ñ\94ð\r
+                               double max_fps = 1000.0 / MAX(min_timeStamp, 1.0);\r
+                               int timescale = int(max_fps * (double)prm->i_timerate * prm->f_mlt + 0.5);\r
+\r
+                               // timescale\96¢\8ew\92è\82Ì\8fê\8d\87\r
+                               if(prm->i_timescale <= 0){\r
+                                       prm->i_timescale = timescale;\r
+                                       prm->f_scaleFct = prm->f_mlt;\r
+                               } else {\r
+                                       prm->f_scaleFct = ((double)prm->i_timescale / (double)timescale) * prm->f_mlt;\r
+                               }\r
+\r
+                               double timerate = prm->i_timerate;\r
+                               if (prm->f_scaleFct < 1.0)\r
+                                       timerate = timerate * prm->f_scaleFct;\r
+\r
+                               for(i=0; i<mi->ui_sampleCount; i++){\r
+                                       ts[i].PTS = u64( u64((double)prm->i_timescale * (timeList[i] / 1000.0) / timerate + 0.5) * timerate + 0.5);\r
+                                       ts[i].CTS = ts[i].PTS;\r
+                               }\r
+                       }\r
+\r
+                       delete [] timeList;\r
+               }\r
+       }\r
+       fclose(fpin);\r
+       return err;\r
+}\r
+\r
+int readTimeCodeFromFileV1(T_MP4_INFO *mi, T_TS_LIST *ts, T_EDIT_PARAM *prm){\r
+       FILE *fpin;\r
+       int err = 0;\r
+\r
+       if((fpin = fopen(prm->p_tcfile, "rb")) != NULL){\r
+               printf("timecode\8eæ\8d\9e\92\86...\n");\r
+\r
+               char buf1[256], buf2[256], buf3[256], buf4[256];\r
+\r
+               /* read header */\r
+               fscanf(fpin, "%s %s %s %s", buf1, buf2, buf3, buf4);\r
+               if(     _stricmp(buf2, "timecode") != 0 ||\r
+                       _stricmp(buf3, "format") != 0 ||\r
+                       _stricmp(buf4, "v1") != 0\r
+               ){\r
+                       err = ErrorMessage(MSG_NO_V1);\r
+               } else {\r
+                       double AssumeFps;\r
+                       fscanf(fpin, "%s %lf",buf1, &AssumeFps);\r
+                       if(     _stricmp(buf1, "Assume") != 0)\r
+                               err = ErrorMessage(MSG_NO_V1);\r
+                       else {\r
+                               double  fps;\r
+                               u32             st;\r
+                               u32             ed;\r
+                               s64             beforeCount = 0;\r
+                               bool    enough          = false;\r
+                               double  *fpsList        = new double[mi->ui_sampleCount];\r
+\r
+\r
+                               while( fscanf(fpin, "%d,%d,%lf", &st, &ed, &fps) != EOF ){\r
+                                       \r
+                                       for(u32 i=st+1; i<=ed+1; i++){\r
+                                               if ((beforeCount + 1) != i){\r
+                                                       err = ErrorMessage(MSG_LOST_FRAME);\r
+                                                       break;\r
+                                               }\r
+                                               beforeCount = i;\r
+                                               fpsList[i] = fps;\r
+\r
+                                               if (mi->ui_sampleCount <= i+1)\r
+                                                       break;\r
+                                       }\r
+                                       if (mi->ui_sampleCount <= ed+1){\r
+                                               enough = true;\r
+                                               break;\r
+                                       }\r
+                               }\r
+                               if (!enough) {\r
+                                       err = ErrorMessage(MSG_NO_ENOUGH_FRAME);\r
+                               } else {\r
+\r
+                                       double max_fps = 0.1;\r
+                                       // \8dÅ\91åfps\82ð\8eæ\93¾\r
+                                       for(u32 i=0; i<mi->ui_sampleCount; i++){\r
+                                               max_fps = MAX(max_fps, fpsList[i]);\r
+                                       }\r
+                                       int timescale = int(max_fps * (double)prm->i_timerate * prm->f_mlt + 0.5);\r
+\r
+                                       // timescale\96¢\8ew\92è\82Ì\8fê\8d\87\r
+                                       if(prm->i_timescale <= 0){\r
+                                               prm->i_timescale = timescale;\r
+                                               prm->f_scaleFct = prm->f_mlt;\r
+                                       } else {\r
+                                               prm->f_scaleFct = ((double)prm->i_timescale / (double)timescale) * prm->f_mlt;\r
+                                       }\r
+\r
+                                       double timerate = prm->i_timerate;\r
+                                       if (prm->f_scaleFct < 1.0)\r
+                                               timerate = timerate * prm->f_scaleFct;\r
+\r
+                                       // \90æ\93ª\82Í0\8cÅ\92è\r
+                                       ts[0].PTS = 0;\r
+                                       ts[0].CTS = 0;\r
+                                       for(u32 i=1; i<mi->ui_sampleCount; i++){\r
+                                               ts[i].PTS = ts[i-1].PTS + u64( u64(((double)prm->i_timescale / (fpsList[i] * timerate)) + 0.5) * timerate + 0.5);\r
+                                               ts[i].CTS = ts[i].PTS;\r
+                                       }\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+       fclose(fpin);\r
+       return err;\r
+}\r
+\r
+\r
diff --git a/tstools/DtsEdit/src/common.h b/tstools/DtsEdit/src/common.h
new file mode 100644 (file)
index 0000000..659afc7
--- /dev/null
@@ -0,0 +1,67 @@
+\r
+#ifndef _COMMON_H_\r
+\r
+// common.h\r
+\r
+#define _COMMON_H_\r
+\r
+#define GF_ISOM_BRAND_MP4V GF_4CC('m','p','4','v')\r
+#define GF_ISOM_BRAND_XVID GF_4CC('x','v','i','d')\r
+\r
+typedef struct {\r
+       char            *p_infile;\r
+       char            *p_outfile;\r
+       char            *p_tcfile;\r
+       int                     i_mode;\r
+       int                     i_tcv;\r
+       BOOL            b_dc;\r
+       int                     i_timescale;\r
+       int                     i_timerate;\r
+       int                     i_delayFrame;\r
+       double          f_scaleFct;\r
+       double          f_mlt;\r
+} T_EDIT_PARAM;\r
+\r
+typedef struct {\r
+       GF_ISOFile      *fp_in;\r
+       GF_ISOFile      *fp_out;\r
+       int                     i_trackCount;\r
+       int                     i_trackNo;\r
+       u32                     ui_4cc;\r
+       u32                     ui_sampleCount;\r
+       int                     i_delayFrame;\r
+       int                     i_initDelay;\r
+       int                     i_org_timescale;\r
+       int                     i_org_timerate;\r
+} T_MP4_INFO;\r
+\r
+typedef struct {\r
+       u64                     DTS;\r
+       u32                     CTS_Offset;\r
+       u64                     CTS;\r
+       u64                     PTS;    // delay\82ð\8aÜ\82Ü\82È\82¢\83s\83N\83`\83\83\95\\8e¦\83^\83C\83~\83\93\83O\r
+       u32                     samples;\r
+} T_TS_LIST;\r
+\r
+int gcd( int a, int b);\r
+int CompareU64(const u64 *a, const u64 *b);\r
+int CompareTS_PTS(const T_TS_LIST *a, const T_TS_LIST *b);\r
+int CompareTS_Sample(const T_TS_LIST *a, const T_TS_LIST *b);\r
+\r
+int SearchTrackOf4CC(T_MP4_INFO *mi, u32 *List4CC, int ListCount);\r
+int readTsFromFile(T_MP4_INFO *mi, T_TS_LIST *ts);\r
+int getDelayFlame(T_MP4_INFO *mi, T_TS_LIST *ts);\r
+int getMinimumPTSDiff(T_MP4_INFO *mi, T_TS_LIST *ts);\r
+int getMaximumPTSDiff(T_MP4_INFO *mi, T_TS_LIST *ts);\r
+double getAveragePTSDiff(T_MP4_INFO *mi, T_TS_LIST *ts);\r
+double getAverageFps(T_MP4_INFO *mi, T_TS_LIST *ts);\r
+double getMaximumFps(T_MP4_INFO *mi, T_TS_LIST *ts);\r
+\r
+int readTimeCodeFromFile(T_MP4_INFO *mi, T_TS_LIST *tc, T_EDIT_PARAM *prm);\r
+int readTimeCodeFromFileV1(T_MP4_INFO *mi, T_TS_LIST *tc, T_EDIT_PARAM *prm);\r
+\r
+\r
+\r
+#endif //_COMMON_H_\r
+\r
+\r
diff --git a/tstools/DtsEdit/src/debug.h b/tstools/DtsEdit/src/debug.h
new file mode 100644 (file)
index 0000000..4c76b5c
--- /dev/null
@@ -0,0 +1,98 @@
+\r
+#ifndef _MY_DEBUG_H\r
+#define _MY_DEBUG_H 1\r
+\r
+#include <stdio.h>      /* vsprintf */\r
+#include <windows.h>\r
+\r
+#ifdef _DEBUG\r
+\r
+#ifdef _cplusplus\r
+extern "C" {\r
+#endif\r
+\r
+#define DPRINTF_BUF_SZ  10240\r
+static void SENDSTR(char *cMsg){\r
+       HWND hTgWnd1 = FindWindow("Notepad", "\96³\91è - \83\81\83\82\92 ");\r
+       hTgWnd1 = GetWindow(hTgWnd1, GW_CHILD);\r
+  \r
+       if(hTgWnd1 > 0){\r
+               SendMessage(hTgWnd1, EM_REPLACESEL, NULL, (LPARAM)cMsg);\r
+       }\r
+}\r
+static void DUMP(char *tablename, unsigned char *data, DWORD size){\r
+       char buf1[60]   = {'\0'};\r
+       char *buf2              = (char*)calloc(1, size * 60);\r
+       DWORD i;\r
+\r
+       //sprintf(buf2, "------ DUMP %s ------\r\n", tablename);\r
+       //for (int y=0; y<(size/16); y++){\r
+       //      sprintf(buf1, "%08X: %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X\r\n"\r
+       //              , data[y*16 + 0], data[y*16 + 1], data[y*16 + 2], data[y*16 + 3], data[y*16 + 4], data[y*16 + 5], data[y*16 + 6], data[y*16 + 7]\r
+       //              , data[y*16 + 8], data[y*16 + 9], data[y*16 +10], data[y*16 +11], data[y*16 +12], data[y*16 +13], data[y*16 +14], data[y*16 +15]\r
+       //              );\r
+       //      strcat(buf2, buf1);\r
+       //}\r
+\r
+       _snprintf(buf2, size * 60, "------ DUMP %s ------", tablename);\r
+       for (i=0; i<size; i++){\r
+               if ((i % 16) == 0){\r
+                       sprintf(buf1, "\r\n%02X", data[i]);\r
+               }else{\r
+                       sprintf(buf1, " %02X", data[i]);\r
+               }\r
+               strcat(buf2, buf1);\r
+       }\r
+       strcat(buf2, "\r\n\r\n");\r
+       SENDSTR(buf2);\r
+       free(buf2);\r
+}\r
+static void DPRINTLN(char *fmt, ...)\r
+{\r
+       va_list args;\r
+       char *buf1 = (char*)calloc(DPRINTF_BUF_SZ, sizeof(char));\r
+       char *buf2 = (char*)calloc(DPRINTF_BUF_SZ, sizeof(char));\r
+\r
+       va_start(args, fmt);\r
+       _vsnprintf(buf1, DPRINTF_BUF_SZ, fmt, args);\r
+       va_end(args);\r
+       _snprintf(buf2, DPRINTF_BUF_SZ, "[0x%08X]\t%s\r\n" ,GetCurrentThreadId(), buf1);\r
+       //strcat(buf, "\r\n");\r
+       //OutputDebugString(buf);\r
+       //FILE *fp = fopen("_debug.txt", "ab");\r
+       //fwrite(buf, strlen(buf), 1, fp);\r
+       //fclose(fp);\r
+       SENDSTR(buf2);\r
+\r
+       free(buf1);\r
+       free(buf2);\r
+}\r
+static void DPRINTF(char *fmt, ...)\r
+{\r
+       va_list args;\r
+       char *buf1 = (char*)calloc(DPRINTF_BUF_SZ, sizeof(char));\r
+\r
+       va_start(args, fmt);\r
+       _vsnprintf(buf1, DPRINTF_BUF_SZ, fmt, args);\r
+       va_end(args);\r
+\r
+       //OutputDebugString(buf);\r
+       //FILE *fp = fopen("_debug.txt", "ab");\r
+       //fwrite(buf, strlen(buf), 1, fp);\r
+       //fclose(fp);\r
+       SENDSTR(buf1);\r
+\r
+       free(buf1);\r
+}\r
+#else\r
+static __inline void DPRINTLN(char *fmt, ...) { }\r
+static __inline void DPRINTF(char *fmt, ...) { }\r
+static __inline void DUMP(char *tablename, unsigned char* data, unsigned long size){ }\r
+\r
+#ifdef _cplusplus\r
+} //extern "C"\r
+#endif\r
+\r
+#endif //_DEBUG\r
+\r
+#endif //_MY_DEBUG_H
\ No newline at end of file
diff --git a/tstools/DtsEdit/src/gpac/avparse.h b/tstools/DtsEdit/src/gpac/avparse.h
new file mode 100644 (file)
index 0000000..6cc9aaf
--- /dev/null
@@ -0,0 +1,208 @@
+/*\r
+ *                     GPAC - Multimedia Framework C SDK\r
+ *\r
+ *                     Copyright (c) Jean Le Feuvre 2000-2005 \r
+ *                                     All rights reserved\r
+ *\r
+ *  This file is part of GPAC / Authoring Tools sub-project\r
+ *\r
+ *  GPAC is free software; you can redistribute it and/or modify\r
+ *  it under the terms of the GNU Lesser General Public License as published by\r
+ *  the Free Software Foundation; either version 2, or (at your option)\r
+ *  any later version.\r
+ *   \r
+ *  GPAC is distributed in the hope that it will be useful,\r
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ *  GNU Lesser General Public License for more details.\r
+ *   \r
+ *  You should have received a copy of the GNU Lesser General Public\r
+ *  License along with this library; see the file COPYING.  If not, write to\r
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. \r
+ *\r
+ */\r
+\r
+#ifndef _GF_PARSERS_AV_H_\r
+#define _GF_PARSERS_AV_H_\r
+\r
+\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+\r
+#include <gpac/bitstream.h>\r
+\r
+/*basic MPEG (1,2,4) visual object parser (DSI extraction and timing/framing)*/\r
+typedef struct\r
+{\r
+       /*video PL*/\r
+       u8 VideoPL;\r
+       u8 RAP_stream, objectType, has_shape, enh_layer;\r
+       /*video resolution*/\r
+       u16 width, height;\r
+       /*pixel aspect ratio*/\r
+       u8 par_num, par_den;\r
+\r
+       u16 clock_rate;\r
+       u8 NumBitsTimeIncrement;\r
+       u32 time_increment;\r
+       /*for MPEG 1/2*/\r
+       Double fps;\r
+} GF_M4VDecSpecInfo;\r
+\r
+\r
+typedef struct __tag_m4v_parser GF_M4VParser;\r
+\r
+GF_M4VParser *gf_m4v_parser_new(char *data, u32 data_size, Bool mpeg12video);\r
+GF_M4VParser *gf_m4v_parser_bs_new(GF_BitStream *bs, Bool mpeg12video);\r
+void gf_m4v_parser_del(GF_M4VParser *m4v);\r
+GF_Err gf_m4v_parse_config(GF_M4VParser *m4v, GF_M4VDecSpecInfo *dsi);\r
+\r
+/*get a frame (can contain GOP). The parser ALWAYS resync on the next object in the bitstream\r
+thus you can seek the bitstream to copy the payload without re-seeking it */\r
+GF_Err gf_m4v_parse_frame(GF_M4VParser *m4v, GF_M4VDecSpecInfo dsi, u8 *frame_type, u32 *time_inc, u32 *size, u32 *start, Bool *is_coded);\r
+/*returns current object start in bitstream*/\r
+u32 gf_m4v_get_object_start(GF_M4VParser *m4v);\r
+/*returns 1 if current object is a valid MPEG-4 Visual object*/\r
+Bool gf_m4v_is_valid_object_type(GF_M4VParser *m4v);\r
+/*returns readable description of profile*/\r
+const char *gf_m4v_get_profile_name(u8 video_pl);\r
+/*decodes DSI*/\r
+GF_Err gf_m4v_get_config(char *rawdsi, u32 rawdsi_size, GF_M4VDecSpecInfo *dsi);\r
+/*rewrites PL code in DSI*/\r
+void gf_m4v_rewrite_pl(char **io_dsi, u32 *io_dsi_len, u8 PL);\r
+/*rewrites PAR code in DSI. Negative values will remove the par*/\r
+GF_Err gf_m4v_rewrite_par(char **o_data, u32 *o_dataLen, s32 par_n, s32 par_d);\r
+\r
+/*MP3 tools*/\r
+u8 gf_mp3_num_channels(u32 hdr);\r
+u16 gf_mp3_sampling_rate(u32 hdr);\r
+u16 gf_mp3_window_size(u32 hdr);\r
+u16 gf_mp3_bit_rate(u32 hdr);\r
+u8 gf_mp3_object_type_indication(u32 hdr);\r
+u8 gf_mp3_layer(u32 hdr);\r
+u8 gf_mp3_version(u32 hdr);\r
+const char *gf_mp3_version_name(u32 hdr);\r
+u16 gf_mp3_frame_size(u32 hdr);\r
+u32 gf_mp3_get_next_header(FILE* in);\r
+u32 gf_mp3_get_next_header_mem(char *buffer, u32 size, u32 *pos);\r
+\r
+/*vorbis tools*/\r
+typedef struct\r
+{\r
+       u32 sample_rate, channels, version;\r
+       s32 max_r, avg_r, low_r;\r
+       u32 min_block, max_block;\r
+\r
+       /*do not touch, parser private*/\r
+       Bool is_init;\r
+       u32 modebits;\r
+       Bool mode_flag[64];\r
+} GF_VorbisParser;\r
+\r
+/*call with vorbis header packets - you MUST initialize the structure to 0 before!!\r
+returns 1 if success, 0 if error.*/\r
+Bool gf_vorbis_parse_header(GF_VorbisParser *vp, char *data, u32 data_len);\r
+/*returns 0 if init error or not a vorbis frame, otherwise returns the number of audio samples\r
+in this frame*/\r
+u32 gf_vorbis_check_frame(GF_VorbisParser *vp, char *data, u32 data_length);\r
+\r
+\r
+enum\r
+{\r
+    GF_M4A_AAC_MAIN = 1,\r
+    GF_M4A_AAC_LC = 2,\r
+    GF_M4A_AAC_SSR = 3,\r
+    GF_M4A_AAC_LTP = 4,\r
+    GF_M4A_AAC_SBR = 5,\r
+    GF_M4A_AAC_SCALABLE = 6,\r
+    GF_M4A_TWINVQ = 7,\r
+    GF_M4A_CELP = 8, \r
+    GF_M4A_HVXC = 9,\r
+    GF_M4A_TTSI = 12,\r
+    GF_M4A_MAIN_SYNTHETIC = 13,\r
+    GF_M4A_WAVETABLE_SYNTHESIS = 14,\r
+    GF_M4A_GENERAL_MIDI = 15,\r
+    GF_M4A_ALGO_SYNTH_AUDIO_FX = 16,\r
+    GF_M4A_ER_AAC_LC = 17,\r
+    GF_M4A_ER_AAC_LTP = 19,\r
+    GF_M4A_ER_AAC_SCALABLE = 20,\r
+    GF_M4A_ER_TWINVQ = 21,\r
+    GF_M4A_ER_BSAC = 22,\r
+    GF_M4A_ER_AAC_LD = 23,\r
+    GF_M4A_ER_CELP = 24,\r
+    GF_M4A_ER_HVXC = 25,\r
+    GF_M4A_ER_HILN = 26,\r
+    GF_M4A_ER_PARAMETRIC = 27,\r
+    GF_M4A_SSC = 28,\r
+    //GF_M4A_PS = 29,\r
+    GF_M4A_LAYER1 = 32,\r
+    GF_M4A_LAYER2 = 33,\r
+    GF_M4A_LAYER3 = 34,\r
+    GF_M4A_DST = 35,\r
+    GF_M4A_ALS = 36,\r
+};\r
+\r
+static const u32 GF_M4ASampleRates[] =\r
+{\r
+    96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, \r
+       16000, 12000, 11025, 8000, 7350, 0, 0, 0\r
+};\r
+\r
+/*get Audio type from dsi. return audio codec type:*/\r
+typedef struct\r
+{\r
+       u32 nb_chan;\r
+       u32 base_object_type, base_sr, base_sr_index;\r
+       /*SBR*/\r
+       Bool has_sbr;\r
+       u32 sbr_object_type, sbr_sr, sbr_sr_index;\r
+       /*PL indication*/\r
+       u8 audioPL;\r
+} GF_M4ADecSpecInfo;\r
+/*parses dsi and updates audioPL*/\r
+GF_Err gf_m4a_get_config(char *dsi, u32 dsi_size, GF_M4ADecSpecInfo *cfg);\r
+/*gets audioPL for given cfg*/\r
+u32 gf_m4a_get_profile(GF_M4ADecSpecInfo *cfg);\r
+const char *gf_m4a_object_type_name(u32 objectType);\r
+const char *gf_m4a_get_profile_name(u8 audio_pl);\r
+\r
+GF_Err gf_m4a_write_config(GF_M4ADecSpecInfo *cfg, char **dsi, u32 *dsi_size);\r
+GF_Err gf_m4a_parse_config(GF_BitStream *bs, GF_M4ADecSpecInfo *cfg, Bool size_known);\r
+\r
+typedef struct\r
+{\r
+       u32 bitrate;\r
+       u32 sample_rate;\r
+       u32 framesize;\r
+       u32 channels;\r
+       /*only set if full parse*/\r
+       u8 fscod, bsid, bsmod, acmod, lfon, brcode;\r
+} GF_AC3Header;\r
+\r
+Bool gf_ac3_parser(u8 *buffer, u32 buffer_size, u32 *pos, GF_AC3Header *out_hdr, Bool full_parse);\r
+Bool gf_ac3_parser_bs(GF_BitStream *bs, GF_AC3Header *hdr, Bool full_parse);\r
+\r
+\r
+GF_Err gf_avc_get_sps_info(char *sps, u32 sps_size, u32 *width, u32 *height, s32 *par_n, s32 *par_d);\r
+\r
+const char *gf_avc_get_profile_name(u8 video_prof);\r
+\r
+\r
+/*gets image size (bs must contain the whole image) \r
+@OTI: image type (JPEG=0x6C, PNG=0x6D)\r
+@width, height: image resolution - for jpeg max size if thumbnail included*/\r
+void gf_img_parse(GF_BitStream *bs, u8 *OTI, u32 *mtype, u32 *width, u32 *height, char **dsi, u32 *dsi_len);\r
+\r
+GF_Err gf_img_jpeg_dec(char *jpg, u32 jpg_size, u32 *width, u32 *height, u32 *pixel_format, char *dst, u32 *dst_size, u32 dst_nb_comp);\r
+\r
+GF_Err gf_img_png_dec(char *png, u32 png_size, u32 *width, u32 *height, u32 *pixel_format, char *dst, u32 *dst_size);\r
+GF_Err gf_img_png_enc(char *data, u32 width, u32 height, u32 pixel_format, char *dst, u32 *dst_size);\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+\r
+#endif /*_GF_PARSERS_AV_H_*/\r
+\r
diff --git a/tstools/DtsEdit/src/gpac/base_coding.h b/tstools/DtsEdit/src/gpac/base_coding.h
new file mode 100644 (file)
index 0000000..4b5c90a
--- /dev/null
@@ -0,0 +1,105 @@
+/*\r
+ *                     GPAC - Multimedia Framework C SDK\r
+ *\r
+ *                     Copyright (c) Jean Le Feuvre 2000-2005 \r
+ *                                     All rights reserved\r
+ *\r
+ *  This file is part of GPAC / common tools sub-project\r
+ *\r
+ *  GPAC is free software; you can redistribute it and/or modify\r
+ *  it under the terms of the GNU Lesser General Public License as published by\r
+ *  the Free Software Foundation; either version 2, or (at your option)\r
+ *  any later version.\r
+ *   \r
+ *  GPAC is distributed in the hope that it will be useful,\r
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ *  GNU Lesser General Public License for more details.\r
+ *   \r
+ *  You should have received a copy of the GNU Lesser General Public\r
+ *  License along with this library; see the file COPYING.  If not, write to\r
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. \r
+ *\r
+ */\r
+\r
+#ifndef _GF_BASE_CODING_H_\r
+#define _GF_BASE_CODING_H_\r
+\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+\r
+/*!\r
+ *     \file <gpac/base_coding.h>\r
+ *     \brief Base coding functions.\r
+ */\r
+\r
+/*!\r
+ *     \addtogroup bascod_grp base coding\r
+ *     \ingroup utils_grp\r
+ *     \brief Base Coding functions\r
+ *\r
+ *     This section documents the base encoding and decoding functions of the GPAC framework.\r
+ *     @{\r
+ */\r
+\r
+#include <gpac/tools.h>\r
+\r
+/*!\r
+ *\brief base64 encoder\r
+ *\r
+ *Encodes a data buffer to Base64\r
+ *\param in_buffer input data buffer\r
+ *\param in_buffer_size input data buffer size\r
+ *\param out_buffer output Base64 buffer location\r
+ *\param out_buffer_size output Base64 buffer allocated size\r
+ *\return size of the encoded Base64 buffer\r
+ *\note the encoded data buffer is not NULL-terminated.\r
+ */\r
+u32 gf_base64_encode(char *in_buffer, u32 in_buffer_size, char *out_buffer, u32 out_buffer_size);\r
+/*!\r
+ *\brief base64 decoder\r
+ *\r
+ *Decodes a Base64 buffer to data\r
+ *\param in_buffer input Base64 buffer\r
+ *\param in_buffer_size input Base64 buffer size\r
+ *\param out_buffer output data buffer location\r
+ *\param out_buffer_size output data buffer allocated size\r
+ *\return size of the decoded buffer\r
+ */\r
+u32 gf_base64_decode(char *in_buffer, u32 in_buffer_size, char *out_buffer, u32 out_buffer_size);\r
+\r
+/*!\r
+ *\brief base16 encoder\r
+ *\r
+ *Encodes a data buffer to Base16\r
+ *\param in_buffer input data buffer\r
+ *\param in_buffer_size input data buffer size\r
+ *\param out_buffer output Base16 buffer location\r
+ *\param out_buffer_size output Base16 buffer allocated size\r
+ *\return size of the encoded Base16 buffer\r
+ *\note the encoded data buffer is not NULL-terminated.\r
+ */\r
+u32 gf_base16_encode(char *in_buffer, u32 in_buffer_size, char *out_buffer, u32 out_buffer_size);\r
+\r
+/*!\r
+ *\brief base16 decoder\r
+ *\r
+ *Decodes a Base16 buffer to data\r
+ *\param in_buffer input Base16 buffer\r
+ *\param in_buffer_size input Base16 buffer size\r
+ *\param out_buffer output data buffer location\r
+ *\param out_buffer_size output data buffer allocated size\r
+ *\return size of the decoded buffer\r
+ */\r
+u32 gf_base16_decode(char *in_buffer, u32 in_buffer_size, char *out_buffer, u32 out_buffer_size);\r
+\r
+/*! @} */\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+\r
+#endif         /*_GF_BASE_CODING_H_*/\r
+\r
diff --git a/tstools/DtsEdit/src/gpac/bifs.h b/tstools/DtsEdit/src/gpac/bifs.h
new file mode 100644 (file)
index 0000000..25097ca
--- /dev/null
@@ -0,0 +1,95 @@
+/*\r
+ *                     GPAC - Multimedia Framework C SDK\r
+ *\r
+ *                     Copyright (c) Jean Le Feuvre 2000-2005\r
+ *                                     All rights reserved\r
+ *\r
+ *  This file is part of GPAC / BIFS codec sub-project\r
+ *\r
+ *  GPAC is free software; you can redistribute it and/or modify\r
+ *  it under the terms of the GNU Lesser General Public License as published by\r
+ *  the Free Software Foundation; either version 2, or (at your option)\r
+ *  any later version.\r
+ *   \r
+ *  GPAC is distributed in the hope that it will be useful,\r
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ *  GNU Lesser General Public License for more details.\r
+ *   \r
+ *  You should have received a copy of the GNU Lesser General Public\r
+ *  License along with this library; see the file COPYING.  If not, write to\r
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. \r
+ *\r
+ */\r
+\r
+#ifndef _GF_BIFS_H_\r
+#define _GF_BIFS_H_\r
+\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+\r
+\r
+#include <gpac/nodes_mpeg4.h>\r
+/*for BIFSConfig*/\r
+#include <gpac/mpeg4_odf.h>\r
+\r
+typedef struct __tag_bifs_dec GF_BifsDecoder;\r
+\r
+/*BIFS decoder constructor - \r
+ @command_dec: if set, the decoder will only work in memory mode (creating commands for the graph)\r
+ otherwise the decoder will always apply commands while decoding them*/\r
+GF_BifsDecoder *gf_bifs_decoder_new(GF_SceneGraph *scenegraph, Bool command_dec);\r
+void gf_bifs_decoder_del(GF_BifsDecoder *codec);\r
+\r
+/*sets the scene time. Scene time is the real clock of the bifs stream in secs*/\r
+void gf_bifs_decoder_set_time_offset(GF_BifsDecoder *codec, Double ts);\r
+\r
+/*signals the sizeInfo of the config should be ignored - used for BIFS in AnimationStream nodes*/\r
+void gf_bifs_decoder_ignore_size_info(GF_BifsDecoder *codec);\r
+\r
+/*setup a stream*/\r
+GF_Err gf_bifs_decoder_configure_stream(GF_BifsDecoder *codec, u16 ESID, char *DecoderSpecificInfo, u32 DecoderSpecificInfoLength, u32 objectTypeIndication);\r
+/*removes a stream*/\r
+GF_Err gf_bifs_decoder_remove_stream(GF_BifsDecoder *codec, u16 ESID);\r
+\r
+/*decode a BIFS AU and applies it to the graph (non-memory mode only)*/\r
+GF_Err gf_bifs_decode_au(GF_BifsDecoder *codec, u16 ESID, char *data, u32 data_length, Double ts_offset);\r
+\r
+/*Memory BIFS decoding - fills the command list with the content of the AU - cf scenegraph_vrml.h for commands usage\r
+       @ESID: ID of input stream\r
+       @data, @data_length: BIFS AU\r
+       @com_list: target list for decoded commands\r
+*/\r
+GF_Err gf_bifs_decode_command_list(GF_BifsDecoder *codec, u16 ESID, char *data, u32 data_length, GF_List *com_list);\r
+\r
+\r
+/*BIFS encoding*/\r
+typedef struct __tag_bifs_enc GF_BifsEncoder;\r
+\r
+/*constructor - @graph: scene graph being encoded*/\r
+GF_BifsEncoder *gf_bifs_encoder_new(GF_SceneGraph *graph);\r
+/*destructor*/\r
+void gf_bifs_encoder_del(GF_BifsEncoder *codec);\r
+/*setup a destination stream*/\r
+GF_Err gf_bifs_encoder_new_stream(GF_BifsEncoder *codec, u16 ESID, GF_BIFSConfig *cfg, Bool encodeNames, Bool has_predictive);\r
+/*encodes a list of commands for the given stream in the output buffer - data is dynamically allocated for output\r
+the scenegraph used is the one described in SceneReplace command, hence scalable streams shall be encoded in time order\r
+*/\r
+GF_Err gf_bifs_encode_au(GF_BifsEncoder *codec, u16 ESID, GF_List *command_list, char **out_data, u32 *out_data_length);\r
+/*returns encoded config desc*/\r
+GF_Err gf_bifs_encoder_get_config(GF_BifsEncoder *codec, u16 ESID, char **out_data, u32 *out_data_length);\r
+/*returns BIFS version used by codec for given stream*/\r
+u8 gf_bifs_encoder_get_version(GF_BifsEncoder *codec, u16 ESID);\r
+\r
+/*Encodes current graph as a scene replace*/\r
+GF_Err gf_bifs_encoder_get_rap(GF_BifsEncoder *codec, char **out_data, u32 *out_data_length);\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+\r
+\r
+#endif /*_GF_BIFS_H_*/\r
+\r
diff --git a/tstools/DtsEdit/src/gpac/bifsengine.h b/tstools/DtsEdit/src/gpac/bifsengine.h
new file mode 100644 (file)
index 0000000..d178e32
--- /dev/null
@@ -0,0 +1,138 @@
+/*\r
+ *                                     GPAC Multimedia Framework\r
+ *\r
+ *                     Authors: Cyril Concolato - Jean le Feuvre\r
+ *                             Copyright (c) 2005-200X ENST\r
+ *                                     All rights reserved\r
+ *\r
+ *  This file is part of GPAC / ISO Media File Format sub-project\r
+ *\r
+ *  GPAC is free software; you can redistribute it and/or modify\r
+ *  it under the terms of the GNU Lesser General Public License as published by\r
+ *  the Free Software Foundation; either version 2, or (at your option)\r
+ *  any later version.\r
+ *   \r
+ *  GPAC is distributed in the hope that it will be useful,\r
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ *  GNU Lesser General Public License for more details.\r
+ *   \r
+ *  You should have received a copy of the GNU Lesser General Public\r
+ *  License along with this library; see the file COPYING.  If not, write to\r
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. \r
+ *\r
+ */\r
+\r
+\r
+#ifndef _GF_BIFSENGINE_H_\r
+#define _GF_BIFSENGINE_H_\r
+\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+\r
+#include <gpac/scene_manager.h>\r
+\r
+#ifndef GPAC_READ_ONLY\r
+       \r
+typedef struct __tag_bifs_engine GF_BifsEngine;\r
+\r
+/**\r
+ * @calling_object is the calling object on which call back will be called\r
+ * @inputContext is the name of a scene file (bt, xmt or mp4) to initialize the coding context\r
+ *\r
+ * must be called only one time (by process calling the DLL) before other calls\r
+ */\r
+GF_BifsEngine *gf_beng_init(void *calling_object, char *inputContext);\r
+\r
+/**\r
+ * @calling_object is the calling object on which call back will be called\r
+ * @inputContext is an UTF-8 scene description (with or without IOD) in BT or XMT-A format\r
+ * @width, @height: width and height of scene if no IOD is given in the context.\r
+ * @usePixelMetrics: metrics system used in the scene, if no IOD is given in the context.\r
+ *\r
+ * must be called only one time (by process calling the DLL) before other calls\r
+ */\r
+GF_BifsEngine *gf_beng_init_from_string(void *calling_object, char *inputContext, u32 width, u32 height, Bool usePixelMetrics);\r
+\r
+\r
+/**\r
+ * @calling_object is the calling object on which call back will be called\r
+ * @ctx is an already loaded scene manager\r
+ *\r
+ * must be called only one time (by process calling the DLL) before other calls\r
+ */\r
+GF_BifsEngine *gf_beng_init_from_context(void *calling_object, GF_SceneManager *ctx);\r
+\r
+/**\r
+ * @beng, pointer to the GF_BifsEngine returned by BENC_Init\r
+ * @config: pointer to the encoded BIFS config (memory is not allocated)\r
+ * @config_len: length of the buffer\r
+ *\r
+ * must be called after BENC_Init\r
+ */\r
+void gf_beng_get_stream_config(GF_BifsEngine *beng, char **config, u32 *config_len);\r
+\r
+/**\r
+ * Encodes the AU context which is not encoded when calling BENC_EncodeAUFromString/File\r
+ * Should be called after Aggregate.\r
+ *\r
+ * @beng, pointer to the GF_BifsEngine returned by BENC_Init\r
+ * @AUCallback, pointer on a callback function to get the result of the coding the AU using the current context\r
+ *\r
+ */\r
+GF_Err gf_beng_encode_context(GF_BifsEngine *beng, GF_Err (*AUCallback)(void *, char *data, u32 size, u64 ts));\r
+\r
+/**\r
+ * @beng, pointer to the GF_BifsEngine returned by BENC_Init\r
+ * @auFile, name of a file containing a description for an access unit (BT or XMT)\r
+ * @AUCallback, pointer on a callback function to get the result of the coding the AU using the current context\r
+ *\r
+ */\r
+GF_Err gf_beng_encode_from_file(GF_BifsEngine *beng, char *auFile, GF_Err (*AUCallback)(void *, char *data, u32 size, u64 ts));\r
+\r
+/**\r
+ * @beng, pointer to the GF_BifsEngine returned by BENC_Init\r
+ * @auString, a char string to encode (must one or several complete nodes in BT\r
+ * @AUCallback, pointer on a callback function to get the result of the coding the AU using the current context\r
+ *\r
+ */\r
+GF_Err gf_beng_encode_from_string(GF_BifsEngine *beng, char *auString, GF_Err (*AUCallback)(void *, char *data, u32 size, u64 ts));\r
+\r
+/**\r
+ * @beng, pointer to the GF_BifsEngine returned by BENC_Init\r
+ * @ctxFileName, name of the file to save the current state of the BIFS scene to\r
+ *\r
+ * save the current context of the beng.\r
+ * if you want to save an aggregate context, use BENC_AggregateCurrentContext before\r
+ *\r
+ */\r
+GF_Err gf_beng_save_context(GF_BifsEngine *beng, char *ctxFileName);\r
+\r
+/**\r
+ * @beng, pointer to the GF_BifsEngine returned by BENC_Init\r
+ *\r
+ * aggregates the current context of the beng, creates a scene replace\r
+ *\r
+ */\r
+GF_Err gf_beng_aggregate_context(GF_BifsEngine *beng);\r
+\r
+/**\r
+ * @beng, pointer to the GF_BifsEngine returned by BENC_Init\r
+ *\r
+ * release the memory used by this beng, no more call on the beng should happen after this\r
+ *\r
+ */\r
+void gf_beng_terminate(GF_BifsEngine *beng);\r
+\r
+\r
+#endif\r
+\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif // __cplusplus\r
+\r
+\r
+#endif /*_GF_BIFSENGINE_H_*/\r
+\r
diff --git a/tstools/DtsEdit/src/gpac/bitstream.h b/tstools/DtsEdit/src/gpac/bitstream.h
new file mode 100644 (file)
index 0000000..887d0d1
--- /dev/null
@@ -0,0 +1,450 @@
+/*\r
+ *                     GPAC - Multimedia Framework C SDK\r
+ *\r
+ *                     Copyright (c) Jean Le Feuvre 2000-2005 \r
+ *                                     All rights reserved\r
+ *\r
+ *  This file is part of GPAC / common tools sub-project\r
+ *\r
+ *  GPAC is free software; you can redistribute it and/or modify\r
+ *  it under the terms of the GNU Lesser General Public License as published by\r
+ *  the Free Software Foundation; either version 2, or (at your option)\r
+ *  any later version.\r
+ *   \r
+ *  GPAC is distributed in the hope that it will be useful,\r
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ *  GNU Lesser General Public License for more details.\r
+ *   \r
+ *  You should have received a copy of the GNU Lesser General Public\r
+ *  License along with this library; see the file COPYING.  If not, write to\r
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. \r
+ *\r
+ */\r
+\r
+#ifndef _GF_BITSTREAM_H_\r
+#define _GF_BITSTREAM_H_\r
+\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+\r
+/*!\r
+ *     \file <gpac/bitstream.h>\r
+ *     \brief bitstream functions.\r
+ */\r
+\r
+/*!\r
+ *     \addtogroup bs_grp bitstream\r
+ *     \ingroup utils_grp\r
+ *     \brief BitStream object\r
+ *\r
+ *     This section documents the bitstream object of the GPAC framework.\r
+ *     \note Unless specified, all functions assume Big-Endian ordering of data in the bitstream.\r
+ *     @{\r
+ */\r
+\r
+#include <gpac/tools.h>\r
+\r
+\r
+enum\r
+{\r
+       GF_BITSTREAM_READ = 0,\r
+       GF_BITSTREAM_WRITE,\r
+};\r
+\r
+typedef struct __tag_bitstream GF_BitStream;\r
+\r
+/*!\r
+ *     \brief bitstream constructor\r
+ *\r
+ *     Constructs a bitstream from a buffer (read or write mode)\r
+ *     \param buffer buffer to read or write. In WRITE mode, this can be NULL to let the bitstream object dynamically allocate memory, in which case the size param is ignored.\r
+ *     \param size size of the buffer given. \r
+ *     \param mode operation mode for this bitstream: GF_BITSTREAM_READ for read, GF_BITSTREAM_WRITE for write.\r
+ *     \return new bitstream object\r
+ *     \note In write mode on an existing data buffer, data overflow is never signaled but simply ignored, it is the caller responsability to ensure it \r
+ *     does not write more than possible.\r
+ */\r
+GF_BitStream *gf_bs_new(char *buffer, u64 size, u32 mode);\r
+/*!\r
+ *     \brief bitstream constructor from file handle\r
+ *\r
+ * Creates a bitstream from a file handle. \r
+ * \param f handle of the file to use. This handle must be created with binary mode.\r
+ *     \param mode operation mode for this bitstream: GF_BITSTREAM_READ for read, GF_BITSTREAM_WRITE for write.\r
+ *     \return new bitstream object\r
+ *     \note - You have to open your file in the appropriated mode:\n\r
+ *     - GF_BITSTREAM_READ: bitstream is constructed for reading\n\r
+ *     - GF_BITSTREAM_WRITE: bitstream is constructed for writing\n\r
+ *     \note - you may use any of these modes for a file with read/write access.\r
+ *     \warning RESULTS ARE UNEXPECTED IF YOU TOUCH THE FILE WHILE USING THE BITSTREAM.\r
+ */\r
+GF_BitStream *gf_bs_from_file(FILE *f, u32 mode);\r
+/*!\r
+ *     \brief bitstream constructor from file handle\r
+ *\r
+ * Deletes the bitstream object. If the buffer was created by the bitstream, it is deleted if still present.\r
+ */\r
+void gf_bs_del(GF_BitStream *bs);\r
+\r
+/*!\r
+ *     \brief integer reading\r
+ *\r
+ *     Reads an integer coded on a number of bit.\r
+ *     \param bs the target bitstream \r
+ *     \param nBits the number of bits to read\r
+ *     \return the integer value read.\r
+ */\r
+u32 gf_bs_read_int(GF_BitStream *bs, u32 nBits);\r
+/*!\r
+ *     \brief large integer reading\r
+ *\r
+ *     Reads a large integer coded on a number of bit bigger than 32.\r
+ *     \param bs the target bitstream \r
+ *     \param nBits the number of bits to read\r
+ *     \return the large integer value read.\r
+ */\r
+u64 gf_bs_read_long_int(GF_BitStream *bs, u32 nBits);\r
+/*!\r
+ *     \brief float reading\r
+ *\r
+ *     Reads a float coded as IEEE 32 bit format.\r
+ *     \param bs the target bitstream \r
+ *     \return the float value read.\r
+ */\r
+Float gf_bs_read_float(GF_BitStream *bs);\r
+/*!\r
+ *     \brief double reading\r
+ *\r
+ *     Reads a double coded as IEEE 64 bit format.\r
+ *     \param bs the target bitstream \r
+ *     \return the double value read.\r
+ */\r
+Double gf_bs_read_double(GF_BitStream *bs);\r
+/*!\r
+ *     \brief data reading\r
+ *\r
+ *     Reads a data buffer\r
+ *     \param bs the target bitstream \r
+ *     \param data the data buffer to be filled\r
+ *     \param nbBytes the amount of bytes to read\r
+ *     \return the number of bytes actually read.\r
+ *     \warning the data buffer passed must be large enough to hold the desired amount of bytes.\r
+ */\r
+u32 gf_bs_read_data(GF_BitStream *bs, char *data, u32 nbBytes);\r
+\r
+/*!\r
+ *     \brief align char reading\r
+ *\r
+ *     Reads an integer coded on 8 bits starting at a byte boundary in the bitstream.\r
+ *     \warning you must not use this function if the bitstream is not aligned\r
+ *     \param bs the target bitstream \r
+ *     \return the char value read.\r
+ */\r
+u32 gf_bs_read_u8(GF_BitStream *bs);\r
+/*!\r
+ *     \brief align short reading\r
+ *\r
+ *     Reads an integer coded on 16 bits starting at a byte boundary in the bitstream.\r
+ *     \warning you must not use this function if the bitstream is not aligned\r
+ *     \param bs the target bitstream \r
+ *     \return the short value read.\r
+ */\r
+u32 gf_bs_read_u16(GF_BitStream *bs);\r
+/*!\r
+ *     \brief align 24-bit integer reading\r
+ *\r
+ *     Reads an integer coded on 24 bits starting at a byte boundary in the bitstream.\r
+ *     \warning you must not use this function if the bitstream is not aligned\r
+ *     \param bs the target bitstream \r
+ *     \return the integer value read.\r
+ */\r
+u32 gf_bs_read_u24(GF_BitStream *bs);\r
+/*!\r
+ *     \brief align integer reading\r
+ *\r
+ *     Reads an integer coded on 32 bits starting at a byte boundary in the bitstream.\r
+ *     \warning you must not use this function if the bitstream is not aligned\r
+ *     \param bs the target bitstream \r
+ *     \return the integer value read.\r
+ */\r
+u32 gf_bs_read_u32(GF_BitStream *bs);\r
+/*!\r
+ *     \brief align large integer reading\r
+ *\r
+ *     Reads an integer coded on 64 bits starting at a byte boundary in the bitstream.\r
+ *     \warning you must not use this function if the bitstream is not aligned\r
+ *     \param bs the target bitstream \r
+ *     \return the large integer value read.\r
+ */\r
+u64 gf_bs_read_u64(GF_BitStream *bs);\r
+/*!\r
+ *     \brief little endian integer reading\r
+ *\r
+ *     Reads an integer coded on 32 bits in little-endian order.\r
+ *     \param bs the target bitstream \r
+ *     \return the integer value read.\r
+ */\r
+u32 gf_bs_read_u32_le(GF_BitStream *bs);\r
+/*!\r
+ *     \brief little endian integer reading\r
+ *\r
+ *     Reads an integer coded on 16 bits in little-endian order.\r
+ *     \param bs the target bitstream \r
+ *     \return the integer value read.\r
+ */\r
+u16 gf_bs_read_u16_le(GF_BitStream *bs);\r
+\r
+\r
+/*!\r
+ *     \brief variable length integer reading\r
+ *\r
+ *     Reads an integer coded on a variable number of 4-bits chunks. The number of chunks is given by the number of non-0 bits at the begining.\r
+ *     \param bs the target bitstream \r
+ *     \return the integer value read.\r
+ */\r
+u32 gf_bs_read_vluimsbf5(GF_BitStream *bs);\r
+\r
+/*!\r
+ *     \brief bit position\r
+ *\r
+ *     Returns current bit position in the bitstream - only works in memory mode.\r
+ *     \param bs the target bitstream \r
+ *     \return the integer value read.\r
+ */\r
+u32 gf_bs_get_bit_offset(GF_BitStream *bs);\r
+\r
+/*!\r
+ *     \brief current bit position\r
+ *\r
+ *     Returns bit position in the current byte of the bitstream - only works in memory mode.\r
+ *     \param bs the target bitstream \r
+ *     \return the integer value read.\r
+ */\r
+u32 gf_bs_get_bit_position(GF_BitStream *bs);\r
+\r
+\r
+/*!\r
+ *     \brief integer writing\r
+ *\r
+ *     Writes an integer on a given number of bits.\r
+ *     \param bs the target bitstream \r
+ *     \param value the integer to write\r
+ *     \param nBits number of bits used to code the integer\r
+ */\r
+void gf_bs_write_int(GF_BitStream *bs, s32 value, s32 nBits);\r
+/*!\r
+ *     \brief large integer writing\r
+ *\r
+ *     Writes an integer on a given number of bits greater than 32.\r
+ *     \param bs the target bitstream \r
+ *     \param value the large integer to write\r
+ *     \param nBits number of bits used to code the integer\r
+ */\r
+void gf_bs_write_long_int(GF_BitStream *bs, s64 value, s32 nBits);\r
+/*!\r
+ *     \brief float writing\r
+ *\r
+ *     Writes a float in IEEE 32 bits format.\r
+ *     \param bs the target bitstream \r
+ *     \param value the float to write\r
+ */\r
+void gf_bs_write_float(GF_BitStream *bs, Float value);\r
+/*!\r
+ *     \brief double writing\r
+ *\r
+ *     Writes a double in IEEE 64 bits format.\r
+ *     \param bs the target bitstream \r
+ *     \param value the double to write\r
+ */\r
+void gf_bs_write_double(GF_BitStream *bs, Double value);\r
+/*!\r
+ *     \brief data writing\r
+ *\r
+ *     Writes a data buffer.\r
+ *     \param bs the target bitstream \r
+ *     \param data the data to write\r
+ *     \param nbBytes number of data bytes to write\r
+ */\r
+u32 gf_bs_write_data(GF_BitStream *bs, char *data, u32 nbBytes);\r
+\r
+/*!\r
+ *     \brief align char writing\r
+ *\r
+ *     Writes an integer on 8 bits starting at a byte boundary in the bitstream.\r
+ *     \warning you must not use this function if the bitstream is not aligned\r
+ *     \param bs the target bitstream \r
+ *     \param value the char value to write\r
+ */\r
+void gf_bs_write_u8(GF_BitStream *bs, u32 value);\r
+/*!\r
+ *     \brief align short writing\r
+ *\r
+ *     Writes an integer on 16 bits starting at a byte boundary in the bitstream.\r
+ *     \warning you must not use this function if the bitstream is not aligned\r
+ *     \param bs the target bitstream \r
+ *     \param value the short value to write\r
+ */\r
+void gf_bs_write_u16(GF_BitStream *bs, u32 value);\r
+/*!\r
+ *     \brief align 24-bits integer writing\r
+ *\r
+ *     Writes an integer on 24 bits starting at a byte boundary in the bitstream.\r
+ *     \warning you must not use this function if the bitstream is not aligned\r
+ *     \param bs the target bitstream \r
+ *     \param value the integer value to write\r
+ */\r
+void gf_bs_write_u24(GF_BitStream *bs, u32 value);\r
+/*!\r
+ *     \brief align integer writing\r
+ *\r
+ *     Writes an integer on 32 bits starting at a byte boundary in the bitstream.\r
+ *     \warning you must not use this function if the bitstream is not aligned\r
+ *     \param bs the target bitstream \r
+ *     \param value the integer value to write\r
+ */\r
+void gf_bs_write_u32(GF_BitStream *bs, u32 value);\r
+/*!\r
+ *     \brief align large integer writing\r
+ *\r
+ *     Writes an integer on 64 bits starting at a byte boundary in the bitstream.\r
+ *     \warning you must not use this function if the bitstream is not aligned\r
+ *     \param bs the target bitstream \r
+ *     \param value the large integer value to write\r
+ */\r
+void gf_bs_write_u64(GF_BitStream *bs, u64 value);\r
+/*!\r
+ *     \brief little endian integer writing\r
+ *\r
+ *     Writes an integer on 32 bits in little-endian order.\r
+ *     \param bs the target bitstream\r
+ *     \param value the integer value to write\r
+ */\r
+void gf_bs_write_u32_le(GF_BitStream *bs, u32 value);\r
+/*!\r
+ *     \brief little endian short writing\r
+ *\r
+ *     Writes an integer on 16 bits in little-endian order.\r
+ *     \param bs the target bitstream\r
+ *     \param value the short value to write\r
+ */\r
+void gf_bs_write_u16_le(GF_BitStream *bs, u32 value);\r
+\r
+/*!\r
+ *     \brief end of bitstream management\r
+ *\r
+ *     Assigns a notification callback function for end of stream signaling in read mode\r
+ *     \param bs the target bitstream\r
+ *     \param EndOfStream the notification function to use\r
+ *     \param par opaque user data passed to the bitstream\r
+ */\r
+void gf_bs_set_eos_callback(GF_BitStream *bs, void (*EndOfStream)(void *par), void *par);\r
+\r
+/*!\r
+ *     \brief bitstream alignment\r
+ *\r
+ *     Aligns bitstream to next byte boundary. In write mode, this will write 0 bit values until alignment.\r
+ *     \param bs the target bitstream\r
+ *     \return the number of bits read/written until alignment\r
+ */\r
+u8 gf_bs_align(GF_BitStream *bs);\r
+/*!\r
+ *     \brief capacity query\r
+ *\r
+ *     Returns the number of bytes still available in the bitstream in read mode.\r
+ *     \param bs the target bitstream\r
+ *     \return the number of bytes still available in read mode, -1 in write modes.\r
+ */\r
+u64 gf_bs_available(GF_BitStream *bs);\r
+/*!\r
+ *     \brief buffer fetching\r
+ *\r
+ *     Fetches the internal bitstream buffer in write mode. If a buffer was given at the bitstream construction, or if the bitstream is in read mode, this does nothing.\r
+ *     \param bs the target bitstream\r
+ *     \param output address of a memory block to be allocated for bitstream data.\r
+ *     \param outSize set to the size of the allocated memory block.\r
+ *     \note \r
+       * It is the user responsability to destroy the allocated buffer\r
+       * Once this function has been called, the internal bitstream buffer is reseted.\r
+ */\r
+void gf_bs_get_content(GF_BitStream *bs, char **output, u32 *outSize);\r
+/*!\r
+ *     \brief byte skipping\r
+ *\r
+ *     Skips bytes in the bitstream. In Write mode, this will write the 0 integer value for memory-based bitstreams or seek the stream\r
+ for file-based bitstream.\r
+ *     \param bs the target bitstream\r
+ *     \param nbBytes the number of bytes to skip\r
+ */\r
+void gf_bs_skip_bytes(GF_BitStream *bs, u64 nbBytes);\r
+\r
+/*!\r
+ *\brief bitstream seeking\r
+ *\r
+ *Seeks the bitstream to a given offset after the begining of the stream. This will perform alignment of the bitstream in all modes.\r
+ *\warning Results are unpredictable if seeking beyond the bitstream end is performed.\r
+ *\param bs the target bitstream\r
+ *\param offset buffer/file offset to seek to\r
+ */\r
+GF_Err gf_bs_seek(GF_BitStream *bs, u64 offset);\r
+\r
+/*!\r
+ *\brief bit peeking \r
+ *\r
+ *Peeks a given number of bits (read without moving the position indicator) for read modes only.\r
+ *\param bs the target bitstream\r
+ *\param numBits the number of bits to peek\r
+ *\param byte_offset\r
+       * if set, bitstream is aligned and moved from byte_offset before peeking (byte-aligned picking)\r
+       * otherwise, bitstream is not aligned and bits are peeked from current state\r
+ *\return the integer value read\r
+*/\r
+u32 gf_bs_peek_bits(GF_BitStream *bs, u32 numBits, u32 byte_offset);\r
+\r
+/*!\r
+ *\brief bit reservoir query\r
+ *\r
+ * Queries the number of bits available in read mode.\r
+ *\param bs the target bitstream\r
+ *\return number of available bits if position is in the last byte of the buffer/stream, 8 otherwise\r
+ */\r
+u8 gf_bs_bits_available(GF_BitStream *bs);\r
+/*!\r
+ *\brief position query\r
+ *\r
+ *Returns the reading/writting position in the buffer/file.\r
+ *\param bs the target bitstream\r
+ *\return the read/write position of the bitstream\r
+ */\r
+u64 gf_bs_get_position(GF_BitStream *bs);\r
+/*!\r
+ *\brief size query\r
+ *\r
+ *Returns the size of the associated buffer/file.\r
+ *\param bs the target bitstream\r
+ *\return the size of the bitstream\r
+ */\r
+u64 gf_bs_get_size(GF_BitStream *bs);\r
+/*!\r
+ *\brief file-based size query\r
+ *\r
+ *Returns the size of a file-based bitstream and force a seek to end of file. This is used in case the file handle\r
+ *describes a file being constructed on disk while being read?\r
+ *\r
+ *\param bs the target bitstream\r
+ *\return the disk size of the associated file\r
+ */\r
+u64 gf_bs_get_refreshed_size(GF_BitStream *bs);\r
+\r
+\r
+\r
+/*! @} */\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+\r
+#endif         /*_GF_BITSTREAM_H_*/\r
+\r
diff --git a/tstools/DtsEdit/src/gpac/color.h b/tstools/DtsEdit/src/gpac/color.h
new file mode 100644 (file)
index 0000000..ee53b54
--- /dev/null
@@ -0,0 +1,239 @@
+/*\r
+ *                     GPAC - Multimedia Framework C SDK\r
+ *\r
+ *                     Copyright (c) Jean Le Feuvre 2000-2005\r
+ *                                     All rights reserved\r
+ *\r
+ *  This file is part of GPAC / common tools interfaces\r
+ *\r
+ *  GPAC is free software; you can redistribute it and/or modify\r
+ *  it under the terms of the GNU Lesser General Public License as published by\r
+ *  the Free Software Foundation; either version 2, or (at your option)\r
+ *  any later version.\r
+ *   \r
+ *  GPAC is distributed in the hope that it will be useful,\r
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ *  GNU Lesser General Public License for more details.\r
+ *   \r
+ *  You should have received a copy of the GNU Lesser General Public\r
+ *  License along with this library; see the file COPYING.  If not, write to\r
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. \r
+ *\r
+ */\r
+\r
+\r
+#ifndef _GF_RASTER_2D_H_\r
+#define _GF_RASTER_2D_H_\r
+\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+\r
+#include <gpac/constants.h>\r
+\r
+\r
+/*!\r
+ *\addtogroup color_grp color\r
+ *\ingroup utils_grp\r
+ *\brief Color tools\r
+ *\r
+ *This section documents color tools for image processing and color conversion\r
+ *     @{\r
+ */\r
+\r
+\r
+/*!\brief Video framebuffer object\r
+ *\r
+ *The video framebuffer object represents uncompressed color data like images in a variety of formats. Data in\r
+ *the video framebuffer MUST be continuous.\r
+*/\r
+typedef struct\r
+{\r
+       /*!Width of the video framebuffer */\r
+       u32 width;\r
+       /*!Height of the video framebuffer */\r
+       u32 height;\r
+       /*!Vertical pitch of the video framebuffer (number of bytes to skip to go down one line in the buffer). May be \r
+       negative for some framebuffers (embedded devices)*/\r
+       s32 pitch;\r
+       /*!Pixel format of the video framebuffer*/\r
+       u32 pixel_format;\r
+       /*!pointer to the begining of the video memory (top-left corner)*/\r
+       char *video_buffer;\r
+       /*!indicates that the video data reside on systems memory or video card one*/\r
+       Bool is_hardware_memory;\r
+} GF_VideoSurface;\r
+\r
+/*!\brief Video Window object\r
+ *\r
+ *The video window object represents a rectangle in framebuffer coordinate system\r
+*/\r
+typedef struct\r
+{\r
+       /*!left-most coordinate of the rectangle*/\r
+       u32 x;\r
+       /*!top-most coordinate of the rectangle*/\r
+       u32 y;\r
+       /*!width of the rectangle*/\r
+       u32 w;\r
+       /*!height of the rectangle*/\r
+       u32 h;\r
+} GF_Window;\r
+\r
+\r
+/*!\brief color matrix object\r
+ *\r
+ *The Color transformation matrix object allows complete color space transformation (shift, rotate, skew, add).\n\r
+ *The matrix coefs are in rgba order, hence the color RGBA is transformed to:\r
+ \code\r
+       R'              m0      m1      m2      m3      m4                      R\r
+       G'              m5      m6      m7      m8      m9                      G\r
+       B'      =       m10     m11     m12     m13     m14             x       B\r
+       A'              m15     m16     m17     m18     m19                     A\r
+       0               0       0       0       0       1                       0\r
+ \endcode\r
+ *Coeficients are in intensity scale, ranging from 0 to \ref FIX_ONE.\r
+*/\r
+typedef struct\r
+{\r
+       /*!color matrix coefficient*/\r
+       Fixed m[20];\r
+       /*!internal flag to speed up things when matrix is identity. This is a read only flag, do not modify it*/\r
+       u32 identity;\r
+} GF_ColorMatrix;\r
+\r
+/*!\brief ARGB color object\r
+ *\r
+ *The color type used in the GPAC framework represents colors in the form 0xAARRGGBB, with each component ranging from 0 to 255\r
+*/\r
+typedef u32 GF_Color;\r
+/*!\hideinitializer color formating macro from alpha, red, green and blue components expressed as integers ranging from 0 to 255*/\r
+#define GF_COL_ARGB(a, r, g, b) ((a)<<24 | (r)<<16 | (g)<<8 | (b))\r
+/*!\hideinitializer color formating macro from alpha, red, green and blue components expressed as fixed numbers ranging from 0 to \ref FIX_ONE*/\r
+#define GF_COL_ARGB_FIXED(_a, _r, _g, _b) GF_COL_ARGB(FIX2INT(255*(_a)), FIX2INT(255*(_r)), FIX2INT(255*(_g)), FIX2INT(255*(_b)))\r
+/*!\hideinitializer gets alpha component of a color*/\r
+#define GF_COL_A(c) (u8) ((c)>>24)\r
+/*!\hideinitializer gets red component of a color*/\r
+#define GF_COL_R(c) (u8) ( ((c)>>16) & 0xFF)\r
+/*!\hideinitializer gets green component of a color*/\r
+#define GF_COL_G(c) (u8) ( ((c)>>8) & 0xFF)\r
+/*!\hideinitializer gets blue component of a color*/\r
+#define GF_COL_B(c) (u8) ( (c) & 0xFF)\r
+/*!\hideinitializer 16-bits color formating macro from red, green and blue components*/\r
+#define GF_COL_565(r, g, b) (u16) (((r & 248)<<8) + ((g & 252)<<3)  + (b>>3))\r
+/*!\hideinitializer 15-bits color formating macro from red, green and blue components*/\r
+#define GF_COL_555(r, g, b) (u16) (((r & 248)<<7) + ((g & 248)<<2)  + (b>>3))\r
+/*!\hideinitializer 15-bits color formating macro from red, green and blue components*/\r
+#define GF_COL_444(r, g, b) (u16) (((r & 240)<<4) + ((g & 240))  + ((b & 240)>>4))\r
+/*!\hideinitializer 16-bits alphagrey color formating macro alpha and grey components*/\r
+#define GF_COL_AG(a, g) (u16) ( (a << 8) | g)\r
+/*!\hideinitializer transfoms a 32-bits color into a 16-bits one.\note alpha component is lost*/\r
+#define GF_COL_TO_565(c) (((GF_COL_R(c) & 248)<<8) + ((GF_COL_G(c) & 252)<<3)  + (GF_COL_B(c)>>3))\r
+/*!\hideinitializer transfoms a 32-bits color into a 15-bits one.\note alpha component is lost*/\r
+#define GF_COL_TO_555(c) (((GF_COL_R(c) & 248)<<7) + ((GF_COL_G(c) & 248)<<2)  + (GF_COL_B(c)>>3))\r
+/*!\hideinitializer transfoms a 32-bits color into a 16-bits alphagrey one.\note red component is used for grey, green and blue components are lost.*/\r
+#define GF_COL_TO_AG(c) ( (GF_COL_A(c) << 8) | GF_COL_R(c))\r
+/*!\hideinitializer transfoms a 32-bits color into a 15-bits one.\note alpha component is lost*/\r
+#define GF_COL_TO_444(c) (((GF_COL_R(c) & 240)<<4) + ((GF_COL_G(c) & 240))  + ((GF_COL_B(c)>>4) & 240) )\r
+\r
+/*!Inits a color matrix to identity*/\r
+void gf_cmx_init(GF_ColorMatrix *_this);\r
+/*!Inits all coefficients of a color matrix \r
+ *\param _this color matrix to initialize\r
+ *\param coefs list of the 20 fixed numbers to copy\r
+*/\r
+void gf_cmx_set_all(GF_ColorMatrix *_this, Fixed *coefs);\r
+/*!Inits all coefficients of a color matrix \r
+ *\param _this color matrix to initialize\r
+ *\param mrr red-to-red multiplication factor\r
+ *\param mrg red-to-green multiplication factor\r
+ *\param mrb red-to-blue multiplication factor\r
+ *\param mra red-to-alpha multiplication factor\r
+ *\param tr red translation factor\r
+ *\param mgr green-to-red multiplication factor\r
+ *\param mgg green-to-green multiplication factor\r
+ *\param mgb green-to-blue multiplication factor\r
+ *\param mga green-to-alpha multiplication factor\r
+ *\param tg green translation factor\r
+ *\param mbr blue-to-red multiplication factor\r
+ *\param mbg blue-to-green multiplication factor\r
+ *\param mbb blue-to-blue multiplication factor\r
+ *\param mba blue-to-alpha multiplication factor\r
+ *\param tb blue translation factor\r
+ *\param mar alpha-to-red multiplication factor\r
+ *\param mag alpha-to-green multiplication factor\r
+ *\param mab alpha-to-blue multiplication factor\r
+ *\param maa alpha-to-alpha multiplication factor\r
+ *\param ta alpha translation factor\r
+*/\r
+void gf_cmx_set(GF_ColorMatrix *_this, \r
+                                Fixed mrr, Fixed mrg, Fixed mrb, Fixed mra, Fixed tr,\r
+                                Fixed mgr, Fixed mgg, Fixed mgb, Fixed mga, Fixed tg,\r
+                                Fixed mbr, Fixed mbg, Fixed mbb, Fixed mba, Fixed tb,\r
+                                Fixed mar, Fixed mag, Fixed mab, Fixed maa, Fixed ta);\r
+/*!Inits a matrix from another matrix\r
+ *\param _this color matrix to initialize\r
+ *\param from color matrix to copy from\r
+*/\r
+void gf_cmx_copy(GF_ColorMatrix *_this, GF_ColorMatrix *from);\r
+/*!\brief color matrix multiplication\r
+ *\r
+ *Multiplies a color matrix by another one. Result is _this*with\r
+ *\param _this color matrix to transform. Once the function called, _this will contain the resulting color matrix\r
+ *\param with color matrix to add\r
+*/\r
+void gf_cmx_multiply(GF_ColorMatrix *_this, GF_ColorMatrix *with);\r
+/*!\brief color matrix transform\r
+ *\r
+ *Transforms a color with a given color matrix\r
+ *\param _this color matrix to use.\r
+ *\param col color to transform\r
+ *\return transformed color\r
+*/\r
+GF_Color gf_cmx_apply(GF_ColorMatrix *_this, GF_Color col);\r
+/*!\brief color components matrix transform\r
+ *\r
+ *Transforms color components with a given color matrix\r
+ *\param _this color matrix to use.\r
+ *\param a pointer to alpha component. Once the function is called, a contains the transformed alpha component\r
+ *\param r pointer to red component. Once the function is called, r contains the transformed red component\r
+ *\param g pointer to green component. Once the function is called, g contains the transformed green component\r
+ *\param b pointer to blue component. Once the function is called, b contains the transformed blue component\r
+*/\r
+void gf_cmx_apply_fixed(GF_ColorMatrix *_this, Fixed *a, Fixed *r, Fixed *g, Fixed *b);\r
+\r
+\r
+/*!\brief Color Key descriptor\r
+ *\r
+ *The ColorKey object represents a ColorKey with low and high threshold keying\r
+*/\r
+typedef struct\r
+{\r
+       /*!color key R, G, and B components*/\r
+       u8 r, g, b;\r
+       /*!Alpha value for opaque (non-keyed) pixels*/\r
+       u8 alpha;\r
+       /*!low variance threshold*/\r
+       u8 low;\r
+       /*!high variance threshold*/\r
+       u8 high;\r
+} GF_ColorKey;\r
+\r
+/*!\brief not done yet\r
+ *\r
+ */\r
+GF_Err gf_stretch_bits(GF_VideoSurface *dst, GF_VideoSurface *src, GF_Window *dst_wnd, GF_Window *src_wnd, s32 dst_x_pitch, u8 alpha, Bool flip, GF_ColorKey *colorKey, GF_ColorMatrix * cmat);\r
+\r
+\r
+\r
+/*! @} */\r
+\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+\r
+#endif /*_GF_RASTER_2D_H_*/\r
+\r
diff --git a/tstools/DtsEdit/src/gpac/compositor.h b/tstools/DtsEdit/src/gpac/compositor.h
new file mode 100644 (file)
index 0000000..9eb001b
--- /dev/null
@@ -0,0 +1,164 @@
+/*\r
+ *                     GPAC - Multimedia Framework C SDK\r
+ *\r
+ *                     Copyright (c) Jean Le Feuvre 2000-2005 \r
+ *                                     All rights reserved\r
+ *\r
+ *  This file is part of GPAC / Scene Compositor sub-project\r
+ *\r
+ *  GPAC is free software; you can redistribute it and/or modify\r
+ *  it under the terms of the GNU Lesser General Public License as published by\r
+ *  the Free Software Foundation; either version 2, or (at your option)\r
+ *  any later version.\r
+ *   \r
+ *  GPAC is distributed in the hope that it will be useful,\r
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ *  GNU Lesser General Public License for more details.\r
+ *   \r
+ *  You should have received a copy of the GNU Lesser General Public\r
+ *  License along with this library; see the file COPYING.  If not, write to\r
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. \r
+ *\r
+ */\r
+\r
+#ifndef _GF_COMPOSITOR_H_\r
+#define _GF_COMPOSITOR_H_\r
+\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+\r
+\r
+/*include scene graph API*/\r
+#include <gpac/scenegraph.h>\r
+/*GF_User and GF_Terminal */\r
+#include <gpac/user.h>\r
+/*frame buffer definition*/\r
+#include <gpac/color.h>\r
+\r
+typedef struct __tag_compositor GF_Compositor;\r
+\r
+/*creates default compositor \r
+if self_threaded, video compositor uses a dedicated thread, otherwise visual rendering is done by the user\r
+audio compositor always runs in its own thread if enabled\r
+term may be NULL, in which case InputSensors won't be enabled\r
+*/\r
+GF_Compositor *gf_sc_new(GF_User *user_interface, Bool self_threaded, GF_Terminal *term);\r
+void gf_sc_del(GF_Compositor *sr);\r
+\r
+/*sets simulation frame rate*/\r
+void gf_sc_set_fps(GF_Compositor *sr, Double fps);\r
+\r
+/*set the root scene graph of the compositor - if NULL remove current and reset simulation time*/\r
+GF_Err gf_sc_set_scene(GF_Compositor *sr, GF_SceneGraph *scene_graph);\r
+\r
+/*if the compositor doesn't use its own thread for visual, this will perform a render pass*/\r
+Bool gf_sc_draw_frame(GF_Compositor *sr);\r
+\r
+/*inits rendering info for the node - shall be called for all nodes the parent system doesn't handle*/\r
+void gf_sc_on_node_init(GF_Compositor *sr, GF_Node *node);\r
+\r
+/*notify the given node has been modified. The compositor filters object to decide whether the scene graph has to be \r
+traversed or not- if object is NULL, this means complete traversing of the graph is requested (use carefully since it\r
+can be a time consuming operation)*/\r
+void gf_sc_invalidate(GF_Compositor *sr, GF_Node *byObj);\r
+\r
+/*return the compositor time - this is the time every time line syncs on*/\r
+u32 gf_sc_get_clock(GF_Compositor *sr);\r
+\r
+\r
+/*locks/unlocks the visual scene rendering - modification of the scene tree shall only happen when scene compositor is locked*/\r
+void gf_sc_lock(GF_Compositor *sr, Bool doLock);\r
+/*locks/unlocks the audio scene rendering - this is needed whenever an audio object changes config on the fly*/\r
+void gf_sc_lock_audio(GF_Compositor *sr, Bool doLock);\r
+\r
+/*notify user input - returns 0 if event hasn't been handled by the compositor*/\r
+Bool gf_sc_user_event(GF_Compositor *sr, GF_Event *event);\r
+\r
+/*maps screen coordinates to bifs 2D coordinates for the current zoom/pan settings\r
+X and Y are point coordinates in the display expressed in BIFS-like fashion (0,0) at center of \r
+display and Y increasing from bottom to top*/\r
+void gf_sc_map_point(GF_Compositor *sr, s32 X, s32 Y, Fixed *bifsX, Fixed *bifsY);\r
+\r
+/*signal the size of the display area has been changed*/\r
+GF_Err gf_sc_size_changed(GF_Compositor *sr, u32 NewWidth, u32 NewHeight);\r
+\r
+/*set/get user options - options are as defined in user.h*/\r
+GF_Err gf_sc_set_option(GF_Compositor *sr, u32 type, u32 value);\r
+u32 gf_sc_get_option(GF_Compositor *sr, u32 type);\r
+\r
+/*returns current FPS\r
+if @absoluteFPS is set, the return value is the absolute framerate, eg NbFrameCount/NbTimeSpent regardless of\r
+whether a frame has been drawn or not, which means the FPS returned can be much greater than the compositor FPS\r
+if @absoluteFPS is not set, the return value is the FPS taking into account not drawn frames (eg, less than or equal to\r
+compositor FPS)\r
+*/\r
+Double gf_sc_get_fps(GF_Compositor *sr, Bool absoluteFPS);\r
+\r
+Bool gf_sc_has_text_selection(GF_Compositor *compositor);\r
+const char *gf_sc_get_selected_text(GF_Compositor *compositor);\r
+\r
+GF_Err gf_sc_paste_text(GF_Compositor *compositor, const char *text);\r
+\r
+/*user-define management: this is used for instant visual rendering of the scene graph, \r
+for exporting or authoring tools preview. User is responsible for calling render when desired and shall also maintain\r
+scene timing*/\r
+\r
+/*force render tick*/\r
+void gf_sc_render(GF_Compositor *sr);\r
+/*gets screen buffer - this locks the scene graph too until released is called*/\r
+GF_Err gf_sc_get_screen_buffer(GF_Compositor *sr, GF_VideoSurface *framebuffer, Bool depth_buffer);\r
+/*releases screen buffer and unlocks graph*/\r
+GF_Err gf_sc_release_screen_buffer(GF_Compositor *sr, GF_VideoSurface *framebuffer);\r
+\r
+/*renders one frame*/\r
+void gf_sc_simulation_tick(GF_Compositor *sr);\r
+\r
+/*forces graphics cache recompute*/\r
+void gf_sc_reset_graphics(GF_Compositor *sr);\r
+\r
+/*picks a node (may return NULL) - coords are given in OS client system coordinate, as in UserInput*/\r
+GF_Node *gf_sc_pick_node(GF_Compositor *sr, s32 X, s32 Y);\r
+\r
+/*get viewpoints/viewports for main scene - idx is 1-based, and if greater than number of viewpoints return GF_EOS*/\r
+GF_Err gf_sc_get_viewpoint(GF_Compositor *sr, u32 viewpoint_idx, const char **outName, Bool *is_bound);\r
+/*set viewpoints/viewports for main scene given its name - idx is 1-based, or 0 to retrieve by viewpoint name\r
+if only one viewpoint is present in the scene, this will bind/unbind it*/\r
+GF_Err gf_sc_set_viewpoint(GF_Compositor *sr, u32 viewpoint_idx, const char *viewpoint_name);\r
+\r
+/*render subscene root node. rs is the current traverse stack\r
+this is needed to handle graph metrics changes between scenes...*/\r
+void gf_sc_traverse_subscene(GF_Compositor *sr, GF_Node *inline_parent, GF_SceneGraph *subscene, void *rs);\r
+\r
+/*set outupt size*/\r
+GF_Err gf_sc_set_size(GF_Compositor *sr, u32 NewWidth, u32 NewHeight);\r
+/*get outupt size*/\r
+Bool gf_sc_get_size(GF_Compositor *sr, u32 *Width, u32 *Height);\r
+\r
+/*returns total length of audio hardware buffer in ms, 0 if no audio*/\r
+u32 gf_sc_get_audio_buffer_length(GF_Compositor *sr);\r
+\r
+/*add/remove extra scene from compositor (extra scenes are OSDs or any other scene graphs not directly\r
+usable by main scene, like 3GP text streams*/\r
+void gf_sc_register_extra_graph(GF_Compositor *sr, GF_SceneGraph *extra_scene, Bool do_remove);\r
+\r
+/*gets audio hardware delay*/\r
+u32 gf_sc_get_audio_delay(GF_Compositor *sr);\r
+\r
+/*returns total length of audio hardware buffer in ms, 0 if no audio*/\r
+u32 gf_sc_get_audio_buffer_length(GF_Compositor *sr);\r
+\r
+void *gf_sc_get_visual_compositor(GF_Compositor *sr);\r
+\r
+GF_Compositor *gf_sc_get_compositor(GF_Node *node);\r
+\r
+Bool gf_sc_script_action(GF_Compositor *sr, u32 type, GF_Node *n, GF_JSAPIParam *param);\r
+\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif /*_GF_COMPOSITOR_H_*/\r
+\r
diff --git a/tstools/DtsEdit/src/gpac/config_file.h b/tstools/DtsEdit/src/gpac/config_file.h
new file mode 100644 (file)
index 0000000..b855a48
--- /dev/null
@@ -0,0 +1,165 @@
+/*\r
+ *                     GPAC - Multimedia Framework C SDK\r
+ *\r
+ *                     Copyright (c) Jean Le Feuvre 2000-2005 \r
+ *                                     All rights reserved\r
+ *\r
+ *  This file is part of GPAC / common tools sub-project\r
+ *\r
+ *  GPAC is free software; you can redistribute it and/or modify\r
+ *  it under the terms of the GNU Lesser General Public License as published by\r
+ *  the Free Software Foundation; either version 2, or (at your option)\r
+ *  any later version.\r
+ *   \r
+ *  GPAC is distributed in the hope that it will be useful,\r
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ *  GNU Lesser General Public License for more details.\r
+ *   \r
+ *  You should have received a copy of the GNU Lesser General Public\r
+ *  License along with this library; see the file COPYING.  If not, write to\r
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. \r
+ *\r
+ */\r
+\r
+#ifndef _GF_CONFIG_FILE_H_\r
+#define _GF_CONFIG_FILE_H_\r
+\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+\r
+/*!\r
+ *     \file <gpac/config_file.h>\r
+ *     \brief configuration file functions.\r
+ */\r
+\r
+ /*!\r
+ *     \addtogroup cfg_grp configuration\r
+ *     \ingroup utils_grp\r
+ *     \brief Configuration File object\r
+ *\r
+ *     This section documents the configuration file object of the GPAC framework.\r
+ *     This file is formatted as the INI file mode of WIN32 in sections and keys.\n\r
+ *\note For more information on the GPAC configuration file itself, please refer to the GPAC configuration help provided with GPAC.\r
+ *     @{\r
+ */\r
+\r
+#include <gpac/tools.h>\r
+\r
+\r
+typedef struct __tag_config GF_Config;\r
+\r
+/*!\r
+ *     \brief configuration file constructor\r
+ *\r
+ *Constructs a configuration file\r
+ *\param filePath directory the file is located in\r
+ *\param fileName name of the configuration file\r
+ *\return the configuration file object\r
+ */\r
+GF_Config *gf_cfg_new(const char *filePath, const char *fileName);\r
+/*!\r
+ *     \brief configuration file destructor\r
+ *\r
+ *Destroys the configuration file and saves it if needed.\r
+ *\param cfgFile the target configuration file\r
+ */\r
+void gf_cfg_del(GF_Config *cfgFile);\r
+/*!\r
+ *     \brief configuration saving\r
+ *\r
+ *Saves the configuration file if modified.\r
+ *\param cfgFile the target configuration file\r
+ */\r
+GF_Err gf_cfg_save(GF_Config *iniFile);\r
+/*!\r
+ *     \brief key value query\r
+ *\r
+ *Gets a key value from its section and name.\r
+ *\param cfgFile the target configuration file\r
+ *\param secName the desired key parent section name\r
+ *\param keyName the desired key name\r
+ *\return the desired key value if found, NULL otherwise.\r
+ */\r
+const char *gf_cfg_get_key(GF_Config *cfgFile, const char *secName, const char *keyName);\r
+/*!\r
+ *     \brief key value update\r
+ *\r
+ *Sets a key value from its section and name.\r
+ *\param cfgFile the target configuration file\r
+ *\param secName the desired key parent section name\r
+ *\param keyName the desired key name\r
+ *\param keyValue the desired key value\r
+ *\note this will also create both section and key if they are not found in the configuration file\r
+ */\r
+GF_Err gf_cfg_set_key(GF_Config *cfgFile, const char *secName, const char *keyName, const char *keyValue);\r
+/*!\r
+ *     \brief section count query\r
+ *\r
+ *Gets the number of sections in the configuration file\r
+ *\param cfgFile the target configuration file\r
+ *\return the number of sections\r
+ */\r
+u32 gf_cfg_get_section_count(GF_Config *cfgFile);\r
+/*!\r
+ *     \brief section name query\r
+ *\r
+ *Gets a section name based on its index\r
+ *\param cfgFile the target configuration file\r
+ *\param secIndex 0-based index of the section to query\r
+ *\return the section name if found, NULL otherwise\r
+ */\r
+const char *gf_cfg_get_section_name(GF_Config *cfgFile, u32 secIndex);\r
+/*!\r
+ *     \brief key count query\r
+ *\r
+ *Gets the number of keys in a section of the configuration file\r
+ *\param cfgFile the target configuration file\r
+ *\param secName the target section\r
+ *\return the number of keys in the section\r
+ */\r
+u32 gf_cfg_get_key_count(GF_Config *cfgFile, const char *secName);\r
+/*!\r
+ *     \brief key count query\r
+ *\r
+ *Gets the number of keys in a section of the configuration file\r
+ *\param cfgFile the target configuration file\r
+ *\param secName the target section\r
+ *\param keyIndex 0-based index of the key in the section\r
+ *\return the key name if found, NULL otherwise\r
+ */\r
+const char *gf_cfg_get_key_name(GF_Config *cfgFile, const char *secName, u32 keyIndex);\r
+\r
+/*!\r
+ *     \brief key insertion\r
+ *\r
+ *Inserts a new key in a given section. Returns an error if a key with the given name \r
+ *already exists in the section\r
+ *\param cfgFile the target configuration file\r
+ *\param secName the target section\r
+ *\param keyName the name of the target key\r
+ *\param keyValue the value for the new key\r
+ *\param index the 0-based index position of the new key\r
+ */\r
+GF_Err gf_cfg_insert_key(GF_Config *cfgFile, const char *secName, const char *keyName, const char *keyValue, u32 index);\r
+\r
+/*!\r
+ *     \brief section destrouction\r
+ *\r
+ *Removes all entries in the given section\r
+ *\param cfgFile the target configuration file\r
+ *\param secName the target section\r
+ */\r
+void gf_cfg_del_section(GF_Config *cfgFile, const char *secName);\r
+\r
+/*! @} */\r
+\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+\r
+#endif         /*_GF_CONFIG_FILE_H_*/\r
+\r
diff --git a/tstools/DtsEdit/src/gpac/constants.h b/tstools/DtsEdit/src/gpac/constants.h
new file mode 100644 (file)
index 0000000..ad36acb
--- /dev/null
@@ -0,0 +1,407 @@
+/*\r
+ *                     GPAC - Multimedia Framework C SDK\r
+ *\r
+ *                     Copyright (c) Jean Le Feuvre 2000-2005 \r
+ *                                     All rights reserved\r
+ *\r
+ *  This file is part of GPAC / exported constants\r
+ *\r
+ *  GPAC is free software; you can redistribute it and/or modify\r
+ *  it under the terms of the GNU Lesser General Public License as published by\r
+ *  the Free Software Foundation; either version 2, or (at your option)\r
+ *  any later version.\r
+ *   \r
+ *  GPAC is distributed in the hope that it will be useful,\r
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ *  GNU Lesser General Public License for more details.\r
+ *   \r
+ *  You should have received a copy of the GNU Lesser General Public\r
+ *  License along with this library; see the file COPYING.  If not, write to\r
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. \r
+ *\r
+ */\r
+\r
+#ifndef _GF_CONSTANTS_H_\r
+#define _GF_CONSTANTS_H_\r
+\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+\r
+#include <gpac/tools.h>\r
+\r
+/*! \addtogroup cst_grp constants\r
+ *     \brief Constants used within GPAC\r
+ *\r
+ *     This section documents some constants used in the GPAC framework which are not related to\r
+ *     any specific sub-project.\r
+ *     \ingroup utils_grp\r
+ *     @{\r
+ */\r
+\r
+\r
+/*!\r
+ *     \brief Supported media stream types\r
+ *     \hideinitializer\r
+ *\r
+ * Supported media stream types for media objects.\r
+*/\r
+enum\r
+{\r
+       /*!MPEG-4 Object Descriptor Stream*/\r
+       GF_STREAM_OD            = 0x01,\r
+       /*!MPEG-4 Object Clock Reference Stream*/\r
+       GF_STREAM_OCR           = 0x02,\r
+       /*!MPEG-4 Scene Description Stream*/\r
+       GF_STREAM_SCENE         = 0x03,\r
+       /*!Visual Stream (Video, Image or MPEG-4 SNHC Tools)*/\r
+       GF_STREAM_VISUAL        = 0x04,\r
+       /*!Audio Stream (Audio, MPEG-4 Structured-Audio Tools)*/\r
+       GF_STREAM_AUDIO         = 0x05,\r
+       /*!MPEG-7 Description Stream*/\r
+       GF_STREAM_MPEG7         = 0x06,\r
+       /*!MPEG-4 Intellectual Property Management and Protection Stream*/\r
+       GF_STREAM_IPMP          = 0x07,\r
+       /*!MPEG-4 Object Content Information Stream*/\r
+       GF_STREAM_OCI           = 0x08,\r
+       /*!MPEG-4 MPEGlet Stream*/\r
+       GF_STREAM_MPEGJ         = 0x09,\r
+       /*!MPEG-4 User Interaction Stream*/\r
+       GF_STREAM_INTERACT      = 0x0A,\r
+       /*!MPEG-4 IPMP Tool Stream*/\r
+       GF_STREAM_IPMP_TOOL     = 0x0B,\r
+       /*!MPEG-4 Font Data Stream*/\r
+       GF_STREAM_FONT          = 0x0C,\r
+       /*!MPEG-4 Streaming Text Stream*/\r
+       GF_STREAM_TEXT          = 0x0D,\r
+       /*!Nero Digital Subpicture Stream*/\r
+       GF_STREAM_ND_SUBPIC = 0x38,\r
+\r
+       /*GPAC internal stream types*/\r
+\r
+\r
+       /*!GPAC Private Scene streams\n\r
+       *\n\note\r
+       *this stream type (MPEG-4 user-private) is reserved for streams only used to create a scene decoder \r
+       *handling the scene without input streams, as is the case for file readers (BT/VRML/XML..).\n\r
+       *The decoderSpecificInfo carried is as follows:\r
+        \code \r
+               u32 file_size:  total file size \r
+               char file_name[dsi_size - sizeof(u32)]: local file name. \r
+               \n\note: File may be a cache file, it is the decoder responsability to check if the file is completely\r
+               downloaded before parsing if needed.\r
+        \endcode \r
+       *The inBufferLength param for decoders using these streams is the stream clock in ms (no input data is given).\n\r
+       *The "dummy_in" module is available to generate these streams for common files, and also takes care of proper \r
+       clock init in case of seeking.\n\r
+       *This is a reentrant stream type: if any media object with this streamtype also exist in the scene, they will be \r
+       *attached to the scene decoder (except when a new inline scene is detected, in which case a new decoder will \r
+       *be created). This allows for animation/sprite usage along with the systems timing/stream management.\n\r
+       *\n\r
+       *the objectTypeIndication currently in use for these streams are documented below\n\r
+       */\r
+       GF_STREAM_PRIVATE_SCENE = 0x20,\r
+};\r
+\r
+\r
+/*!\r
+ *     Media Object types\r
+ * \r
+ *     This type provides a hint to network modules which may have to generate an service descriptor on the fly.\r
+ *     They occur only if objects/services used in the scene are not referenced through ObjectDescriptors (MPEG-4) \r
+ *     but direct through URL\r
+*/\r
+enum\r
+{\r
+       /*!service descriptor expected is of undefined type. This should be treated like GF_MEDIA_OBJECT_SCENE*/\r
+       GF_MEDIA_OBJECT_UNDEF = 0,\r
+       /*!service descriptor expected is of SCENE type and shall contain a scene stream and OD one if needed*/\r
+       GF_MEDIA_OBJECT_SCENE,\r
+       /*!service descriptor expected is of SCENE UPDATES type (animation streams)*/\r
+       GF_MEDIA_OBJECT_UPDATES,\r
+       /*!service descriptor expected is of VISUAL type*/\r
+       GF_MEDIA_OBJECT_VIDEO,\r
+       /*!service descriptor expected is of AUDIO type*/\r
+       GF_MEDIA_OBJECT_AUDIO,\r
+       /*!service descriptor expected is of TEXT type (3GPP/MPEG4)*/\r
+       GF_MEDIA_OBJECT_TEXT,\r
+       /*!service descriptor expected is of UserInteraction type (MPEG-4 InputSensor)*/\r
+       GF_MEDIA_OBJECT_INTERACT,\r
+};\r
+\r
+/*! All Media Objects inserted through URLs and not MPEG-4 OD Framework use this ODID*/\r
+#define GF_MEDIA_EXTERNAL_ID           1050\r
+\r
+\r
+/*!\r
+ * \brief Pixel Formats\r
+ * \r
+ *     Supported pixel formats for everything using video\r
+ *\note        For textures using 32 bit ARGB/RGB_32/BGR_32:\r
+ *\li on little endian machines, shall be ordered in memory as BGRA, \r
+ *\li on big endians, shall be ordered in memory as ARGB\r
+ *so that *(u32*)pixel_mem is always ARGB (0xAARRGGBB).\r
+*/\r
+typedef enum\r
+{\r
+       /*!8 bit GREY */\r
+       GF_PIXEL_GREYSCALE      =       GF_4CC('G','R','E','Y'),\r
+       /*!16 bit greyscale*/\r
+       GF_PIXEL_ALPHAGREY      =       GF_4CC('G','R','A','L'),\r
+       /*!12 bit RGB on 16 bits (4096 colors)*/\r
+       GF_PIXEL_RGB_444        =       GF_4CC('R','4','4','4'),\r
+       /*!15 bit RGB*/\r
+       GF_PIXEL_RGB_555        =       GF_4CC('R','5','5','5'),\r
+       /*!16 bit RGB*/\r
+       GF_PIXEL_RGB_565        =       GF_4CC('R','5','6','5'),\r
+       /*!24 bit RGB*/\r
+       GF_PIXEL_RGB_24         =       GF_4CC('R','G','B','3'),\r
+       /*!24 bit BGR - used for graphics cards video format signaling*/\r
+       GF_PIXEL_BGR_24         =       GF_4CC('B','G','R','3'),\r
+       /*!32 bit RGB*/\r
+       GF_PIXEL_RGB_32         =       GF_4CC('R','G','B','4'),\r
+       /*!32 bit BGR - used for graphics cards video format signaling*/\r
+       GF_PIXEL_BGR_32         =       GF_4CC('B','G','R','4'),\r
+\r
+       /*!32 bit ARGB.*/\r
+       GF_PIXEL_ARGB           =       GF_4CC('A','R','G','B'),\r
+       /*!32 bit RGBA (openGL like)*/\r
+       GF_PIXEL_RGBA           =       GF_4CC('R','G','B', 'A'),\r
+\r
+       /*!RGB24 + depth plane*/\r
+    GF_PIXEL_RGBD              =       GF_4CC('R', 'G', 'B', 'D'),\r
+\r
+       /*!RGB24 + depth plane (7 power bits) + shape mask*/\r
+    GF_PIXEL_RGBDS             =       GF_4CC('3', 'C', 'D', 'S'),\r
+    \r
+       /*!YUV packed format*/\r
+       GF_PIXEL_YUY2           =       GF_4CC('Y','U','Y','2'),\r
+       /*!YUV packed format*/\r
+       GF_PIXEL_YVYU           =       GF_4CC('Y','V','Y','U'),\r
+       /*!YUV packed format*/\r
+       GF_PIXEL_UYVY           =       GF_4CC('U','Y','V','Y'),\r
+       /*!YUV packed format*/\r
+       GF_PIXEL_VYUY           =       GF_4CC('V','Y','U','Y'),\r
+       /*!YUV packed format*/\r
+       GF_PIXEL_Y422           =       GF_4CC('Y','4','2','2'),\r
+       /*!YUV packed format*/\r
+       GF_PIXEL_UYNV           =       GF_4CC('U','Y','N','V'),\r
+       /*!YUV packed format*/\r
+       GF_PIXEL_YUNV           =       GF_4CC('Y','U','N','V'),\r
+       /*!YUV packed format*/\r
+       GF_PIXEL_V422           =       GF_4CC('V','4','2','2'),\r
+       \r
+       /*!YUV planar format*/\r
+       GF_PIXEL_YV12           =       GF_4CC('Y','V','1','2'),\r
+       /*!YUV planar format*/\r
+       GF_PIXEL_IYUV           =       GF_4CC('I','Y','U','V'),\r
+       /*!YUV planar format*/\r
+       GF_PIXEL_I420           =       GF_4CC('I','4','2','0'),\r
+               \r
+       /*!YV12 + Alpha plane*/\r
+       GF_PIXEL_YUVA           =       GF_4CC('Y', 'U', 'V', 'A'),\r
+\r
+       /*!YV12 + Depth plane*/\r
+       GF_PIXEL_YUVD           =       GF_4CC('Y', 'U', 'V', 'D'),\r
+\r
+} GF_PixelFormat;\r
+\r
+\r
+/*!\r
+ * \brief Scene ObjectTypeIndication Formats\r
+ * \r
+ *     Supported ObjectTypeIndication for scene description streams. *_FILE_* are only used with private scene streams\r
+ * and only carry the file name for the scene. Other internal stream types can be used in a real streaming environment\r
+*/\r
+enum\r
+{\r
+       /*!OTI for BIFS v1*/\r
+       GPAC_OTI_SCENE_BIFS = 0x01,\r
+       /*!OTI for BIFS v2*/\r
+       GPAC_OTI_SCENE_BIFS_V2 = 0x02,\r
+       /*!OTI for BIFS InputSensor streams*/\r
+       GPAC_OTI_SCENE_INTERACT = 0x03,\r
+       /*!OTI forLASeR streams*/\r
+       GPAC_OTI_SCENE_LASER = 0x09,\r
+\r
+       /*!OTI for dummy streams (dsi = file name) using the generci context loader (BIFS/VRML/SWF/...) - GPAC internal*/\r
+       GPAC_OTI_PRIVATE_SCENE_GENERIC = 0xC0,\r
+       /*!OTI for SVG dummy stream (dsi = file name) - GPAC internal*/\r
+       GPAC_OTI_PRIVATE_SCENE_SVG = 0xC1,\r
+       /*!OTI for LASeR/SAF+XML dummy stream (dsi = file name) - GPAC internal*/\r
+       GPAC_OTI_PRIVATE_SCENE_LASER = 0xC2,\r
+       /*!OTI for XBL dummy streams (dsi = file name) - GPAC internal*/\r
+       GPAC_OTI_PRIVATE_SCENE_XBL = 0xC3,\r
+       /*!OTI for EPG dummy streams (dsi = null) - GPAC internal*/\r
+       GPAC_OTI_PRIVATE_SCENE_EPG = 0xC4,\r
+\r
+       /*!OTI for streaming SVG - GPAC internal*/\r
+       GPAC_OTI_SCENE_SVG = 0xD0,\r
+       /*!OTI for streaming SVG + gz - GPAC internal*/\r
+       GPAC_OTI_SCENE_SVG_GZ = 0xD1,\r
+       /*!OTI for DIMS (dsi = 3GPP DIMS configuration) - GPAC internal*/\r
+       GPAC_OTI_SCENE_DIMS = 0xD2,\r
+};\r
+\r
+\r
+/*!\r
+ * \brief Extra ObjectTypeIndication\r
+ *\r
+ *     ObjectTypeIndication for media (audio/video) codecs not defined in MPEG-4. Since GPAC signals streams through MPEG-4 Descriptions,\r
+ *     it needs extensions for non-MPEG-4 streams such as AMR, H263 , etc.\n\r
+ *\note The decoder specific info for such streams is always carried encoded, with the following syntax:\n\r
+ *     DSI Syntax for audio streams\r
+ \code \r
+ *     u32 codec_four_cc: the codec 4CC reg code / codec id for ffmpeg\r
+ *     u32 sample_rate: sampling rate or 0 if unknown\r
+ *     u16 nb_channels: num channels or 0 if unknown\r
+ *     u16 frame_size: num audio samples per frame or 0 if unknown\r
+ *     u8 nb_bits_per_sample: nb bits or 0 if unknown\r
+ *     u8 num_frames_per_au: num audio frames per AU (used in 3GPP, max 15), 0 if unknown\r
+ *     char *data: per-codec extensions till end of DSI bitstream\r
+ \endcode\r
+ \n\r
+ *     DSI Syntax for video streams\r
+ \code \r
+ *     u32 codec_four_cc: the codec 4CC reg code  / codec id for ffmpeg\r
+ *     u16 width: video width or 0 if unknown\r
+ *     u16 height: video height or 0 if unknown\r
+ *     char *data: per-codec extensions till end of DSI bitstream\r
+ \endcode\r
+*/\r
+#define GPAC_OTI_MEDIA_GENERIC                         0x80\r
+\r
+/*!\r
+ * \brief FFMPEG ObjectTypeIndication\r
+ *\r
+ *     ObjectTypeIndication for FFMPEG codecs not defined in MPEG-4. FFMPEG uses the base GPAC_OTI_MEDIA_GENERIC specific info formats, and extends it as follows:\r
+ \code \r
+ *     u32 bit_rate: the stream rate or 0 if unknown\r
+ *     u32 codec_tag: FFMPEG codec tag as defined in libavcodec\r
+ *     char *data: codec extensions till end of DSI bitstream\r
+ \endcode\r
+ */\r
+#define GPAC_OTI_MEDIA_FFMPEG                          0x81\r
+\r
+\r
+/*!\r
+ * \brief OGG ObjectTypeIndication\r
+ *\r
+ *     Object type indication for all OGG media. The DSI contains all intitialization ogg packets for the codec\r
+ * and is formated as follows:\n\r
+ *\code \r
+       while (dsi_size) {\r
+               bit(16) packet_size;\r
+               char packet[packet_size];\r
+               dsi_size -= packet_size;\r
+       }\endcode\r
+*/\r
+#define GPAC_OTI_MEDIA_OGG                             0xDD\r
+\r
+\r
+/*channel cfg flags - DECODERS MUST OUTPUT STEREO/MULTICHANNEL IN THIS ORDER*/\r
+/*!\r
+ * \brief Audio Channel Configuration\r
+ *\r
+ *     Audio channel flags for spatialization.\r
+ \note Decoders must output stereo/multichannel audio channels in this order in the decoded audio frame.\r
+ */\r
+enum\r
+{\r
+       /*!Left Audio Channel*/\r
+       GF_AUDIO_CH_FRONT_LEFT = (1),\r
+       /*!Right Audio Channel*/\r
+       GF_AUDIO_CH_FRONT_RIGHT = (1<<1),\r
+       /*!Center Audio Channel - may also be used to signal monophonic audio*/\r
+       GF_AUDIO_CH_FRONT_CENTER = (1<<2),\r
+       /*!LFE Audio Channel*/\r
+       GF_AUDIO_CH_LFE = (1<<3),\r
+       /*!Back Left Audio Channel*/\r
+       GF_AUDIO_CH_BACK_LEFT = (1<<4),\r
+       /*!Back Right Audio Channel*/\r
+       GF_AUDIO_CH_BACK_RIGHT = (1<<5),\r
+       /*!Back Center Audio Channel*/\r
+       GF_AUDIO_CH_BACK_CENTER = (1<<6),\r
+       /*!Side Left Audio Channel*/\r
+       GF_AUDIO_CH_SIDE_LEFT = (1<<7),\r
+       /*!Side Right Audio Channel*/\r
+       GF_AUDIO_CH_SIDE_RIGHT = (1<<8)\r
+};\r
+\r
+\r
+\r
+/*DIMS unit flags */\r
+/*!\r
+ * \brief DIMS Unit header flags\r
+ *\r
+ *     DIMS Unit header flags as 3GPP TS 26.142.\r
+ */\r
+enum\r
+{\r
+       /*!S: is-Scene: DIMS unit contains a complete document (<svg>*/\r
+       GF_DIMS_UNIT_S = 1,\r
+       /*!M: is-RAP: DIMS unit is a random access point*/\r
+       GF_DIMS_UNIT_M = 1<<1,\r
+       /*!I: is-Redundant: DIMS unit is made of redundant data*/\r
+       GF_DIMS_UNIT_I = 1<<2,\r
+       /*!D: redundant-exit: DIMS unit is the end of redundant data*/\r
+       GF_DIMS_UNIT_D = 1<<3,\r
+       /*!P: priority: DIMS unit is high priority*/\r
+       GF_DIMS_UNIT_P = 1<<4,\r
+       /*!C: compressed: DIMS unit is compressed*/\r
+       GF_DIMS_UNIT_C = 1<<5\r
+};\r
+\r
+\r
+/*!\r
+ \cond DUMMY_DOXY_SECTION\r
+*/\r
+\r
+/*AVC NAL unit types*/\r
+#define GF_AVC_NALU_NON_IDR_SLICE 0x1\r
+#define GF_AVC_NALU_DP_A_SLICE 0x2\r
+#define GF_AVC_NALU_DP_B_SLICE 0x3\r
+#define GF_AVC_NALU_DP_C_SLICE 0x4\r
+#define GF_AVC_NALU_IDR_SLICE 0x5\r
+#define GF_AVC_NALU_SEI 0x6\r
+#define GF_AVC_NALU_SEQ_PARAM 0x7\r
+#define GF_AVC_NALU_PIC_PARAM 0x8\r
+#define GF_AVC_NALU_ACCESS_UNIT 0x9\r
+#define GF_AVC_NALU_END_OF_SEQ 0xa\r
+#define GF_AVC_NALU_END_OF_STREAM 0xb\r
+#define GF_AVC_NALU_FILLER_DATA 0xc\r
+\r
+#define GF_AVC_TYPE_P 0\r
+#define GF_AVC_TYPE_B 1\r
+#define GF_AVC_TYPE_I 2\r
+#define GF_AVC_TYPE_SP 3\r
+#define GF_AVC_TYPE_SI 4\r
+#define GF_AVC_TYPE2_P 5\r
+#define GF_AVC_TYPE2_B 6\r
+#define GF_AVC_TYPE2_I 7\r
+#define GF_AVC_TYPE2_SP 8\r
+#define GF_AVC_TYPE2_SI 9\r
+\r
+\r
+/*rate sizes - note that these sizes INCLUDE the rate_type header byte*/\r
+static const u32 GF_QCELP_RATE_TO_SIZE [] = {0, 1, 1, 4, 2, 8, 3, 17, 4, 35, 5, 8, 14, 1};\r
+static const u32 GF_QCELP_RATE_TO_SIZE_NB = 7;\r
+static const u32 GF_SMV_EVRC_RATE_TO_SIZE [] = {0, 1, 1, 3, 2, 6, 3, 11, 4, 23, 5, 1};\r
+static const u32 GF_SMV_EVRC_RATE_TO_SIZE_NB = 6;\r
+static const u32 GF_AMR_FRAME_SIZE[16] = { 12, 13, 15, 17, 19, 20, 26, 31, 5, 0, 0, 0, 0, 0, 0, 0 };\r
+static const u32 GF_AMR_WB_FRAME_SIZE[16] = { 17, 23, 32, 36, 40, 46, 50, 58, 60, 5, 5, 0, 0, 0, 0, 0 };\r
+\r
+\r
+/*!\r
+ \endcond\r
+*/\r
+\r
+\r
+/*! @} */\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif /*_GF_CONSTANTS_H_*/\r
diff --git a/tstools/DtsEdit/src/gpac/crypt.h b/tstools/DtsEdit/src/gpac/crypt.h
new file mode 100644 (file)
index 0000000..5c36175
--- /dev/null
@@ -0,0 +1,190 @@
+/*\r
+ *                     GPAC - Multimedia Framework C SDK\r
+ *\r
+ *                     Copyright (c) Jean Le Feuvre 2000-2005\r
+ *                                     All rights reserved\r
+ *\r
+ *  This file is part of GPAC / Crypto Tools sub-project\r
+ *\r
+ *  GPAC is free software; you can redistribute it and/or modify\r
+ *  it under the terms of the GNU Lesser General Public License as published by\r
+ *  the Free Software Foundation; either version 2, or (at your option)\r
+ *  any later version.\r
+ *   \r
+ *  GPAC is distributed in the hope that it will be useful,\r
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ *  GNU Lesser General Public License for more details.\r
+ *   \r
+ *  You should have received a copy of the GNU Lesser General Public\r
+ *  License along with this library; see the file COPYING.  If not, write to\r
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. \r
+ *\r
+ */\r
+\r
+/*\r
+       The GPAC crypto lib is a simplified version of libmcrypt - not all algos are included.\r
+       Doc here is man mcrypt\r
+       Original libmcrypt license\r
+*/\r
+\r
+/*\r
+ * Copyright (C) 1998,1999,2000 Nikos Mavroyanopoulos\r
+ * \r
+ * This library is free software; you can redistribute it and/or modify it \r
+ * under the terms of the GNU Library General Public License as published \r
+ * by the Free Software Foundation; either version 2 of the License, or \r
+ * (at your option) any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
+ * Library General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU Library General Public\r
+ * License along with this library; if not, write to the\r
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,\r
+ * Boston, MA 02111-1307, USA.\r
+ */\r
+\r
+#ifndef _GF_CRYPT_H_\r
+#define _GF_CRYPT_H_\r
+\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+\r
+#include <gpac/tools.h>\r
+\r
+/*max number of possible key sizes for all supported modes*/\r
+#define MAX_KEY_SIZES  4\r
+\r
+/*crypto lib handler*/\r
+typedef struct _tag_crypt_stream GF_Crypt;\r
+\r
+/*supported modes (case insensitive): "CBC", "CFB", "CTR", "ECB", "nCFB", "nOFB", "OFB", "STREAM"*/\r
+/*supported algos (case insensitive): \r
+       "AES-128" == "Rijndael-128"\r
+       "AES-192" == "Rijndael-192"\r
+       "AES-256" == "Rijndael-256"\r
+       "DES", "3DES"\r
+*/\r
+\r
+\r
+/*opens crypto context - algo and mode SHALL NOT be NULL*/\r
+GF_Crypt *gf_crypt_open(const char *algorithm, const char *mode);\r
+/*close crypto context*/\r
+void gf_crypt_close(GF_Crypt *gfc);\r
+\r
+/* sets the state of the algorithm. Can be used only with block algorithms and certain modes like CBC, CFB etc. \r
+It is usefully if you want to restart or start a different encryption quickly. \r
+*/\r
+GF_Err gf_crypt_set_state(GF_Crypt *gfc, const void *iv, int size);\r
+/*gets the state of the algorithm. Can be used only certain modes and algorithms. \r
+The size will hold the size of the state and the state must have enough bytes to hold it.\r
+*/\r
+GF_Err gf_crypt_get_state(GF_Crypt *gfc, void *iv, int *size);\r
+/*Returns 1 if the algorithm is a block algorithm or 0 if it is a stream algorithm.*/\r
+Bool gf_crypt_is_block_algorithm(GF_Crypt *gfc);\r
+/*Returns 1 if the mode is for use with block algorithms, otherwise it returns 0.*/\r
+Bool gf_crypt_is_block_algorithm_mode(GF_Crypt *gfc);\r
+/*Returns 1 if the mode outputs blocks of bytes or 0 if it outputs bytes. (eg. 1 for cbc and ecb, and 0 for cfb and stream)*/\r
+Bool gf_crypt_is_block_mode(GF_Crypt *gfc);\r
+/*Returns the block size of the algorithm specified by the encryption descriptor in bytes.*/\r
+u32 gf_crypt_get_block_size(GF_Crypt *gfc);\r
+/*Returns the maximum supported key size of the algorithm specified by the encryption descriptor in bytes.*/\r
+u32 gf_crypt_get_key_size(GF_Crypt *gfc);\r
+/*Returns the number of supported key sizes.\r
+@keys: array of at least MAX_KEY_SIZES size - will hold the supported sizes*/\r
+u32 gf_crypt_get_supported_key_sizes(GF_Crypt *gfc, u32 *key_sizes);\r
+/*Returns size (in bytes) of the IV of the algorithm specified for the context. \r
+If it is '0' then the IV is ignored in that algorithm. \r
+IV is used in CBC, CFB, OFB modes, and in some algorithms in STREAM mode.\r
+*/\r
+u32 gf_crypt_get_iv_size(GF_Crypt *gfc);\r
+/*Returns 1 if the mode needs an IV, 0 otherwise. \r
+Some 'stream' algorithms may need an IV even if the mode itself does not need an IV.\r
+*/\r
+Bool gf_crypt_mode_has_iv(GF_Crypt *gfc);\r
+\r
+/*guess what these do...*/\r
+const char *gf_crypt_get_algorithm_name(GF_Crypt *gfc);\r
+u32 gf_crypt_get_algorithm_version(GF_Crypt *gfc);\r
+const char *gf_crypt_get_mode_name(GF_Crypt *gfc);\r
+u32 gf_crypt_get_mode_version(GF_Crypt *gfc);\r
+\r
+\r
+/*\r
+This function initializes all buffers for the specified context\r
+@Lenofkey: key size in BYTES - maximum value of lenofkey should be the one obtained by \r
+calling gf_crypt_get_key_size() and every value smaller than this is legal.\r
+@IV: usually size of the algorithms block size - get it by calling gf_crypt_get_iv_size().\r
+       IV is ignored in ECB. IV MUST exist in CFB, CBC, STREAM, nOFB and OFB modes.\r
+       It needs to be random and unique (but not secret). The same IV must be used\r
+       for encryption/decryption. \r
+After calling this function you can use the descriptor for encryption or decryption (not both). \r
+*/\r
+GF_Err gf_crypt_init(GF_Crypt *gfc, void *key, u32 lenofkey, const void *IV);\r
+/*releases context buffers - you may call gf_crypt_init after that, or gf_crypt_close*/\r
+void gf_crypt_deinit(GF_Crypt *gfc);\r
+/*changes key and IV*/\r
+GF_Err gf_crypt_set_key(GF_Crypt *gfc, void *key, u32 keysize, const void *iv);\r
+\r
+/*\r
+main encryption function. \r
+@Plaintext, @len: plaintext to encrypt - len should be  k*algorithms_block_size if used in a mode\r
+which operated in blocks (cbc, ecb, nofb), or whatever when used in cfb or ofb which operate in streams.\r
+The plaintext is replaced by the ciphertext. \r
+*/\r
+GF_Err gf_crypt_encrypt(GF_Crypt *gfc, void *plaintext, int len);\r
+/*decryption function. It is almost the same with gf_crypt_generic.*/\r
+GF_Err gf_crypt_decrypt(GF_Crypt *gfc, void *ciphertext, int len);\r
+\r
+/*various queries on both modes and algo*/\r
+u32 gf_crypt_str_get_algorithm_version(const char *algorithm);\r
+u32 gf_crypt_str_get_mode_version(const char *mode);\r
+Bool gf_crypt_str_is_block_algorithm(const char *algorithm);\r
+Bool gf_crypt_str_is_block_algorithm_mode(const char *algorithm);\r
+Bool gf_crypt_str_is_block_mode(const char *mode);\r
+u32 gf_crypt_str_module_get_algo_block_size(const char *algorithm);\r
+u32 gf_crypt_str_module_get_algo_key_size(const char *algorithm);\r
+u32 gf_crypt_str_get_algo_supported_key_sizes(const char *algorithm, int *keys);\r
+\r
+\r
+\r
+/*SHA1 from Christophe Devine*/\r
+typedef struct\r
+{\r
+    u32 total[2];\r
+    u32 state[5];\r
+    u8 buffer[64];\r
+} GF_SHA1Context;\r
+\r
+/*\r
+ * Core SHA-1 functions\r
+ */\r
+void gf_sha1_starts(GF_SHA1Context *ctx );\r
+void gf_sha1_update(GF_SHA1Context *ctx, u8 *input, u32 length);\r
+void gf_sha1_finish(GF_SHA1Context *ctx, u8 digest[20] );\r
+\r
+/*\r
+ * Output SHA-1(file contents), returns 0 if successful.\r
+ */\r
+int gf_sha1_file(char *filename, u8 digest[20]);\r
+\r
+/*\r
+ * Output SHA-1(buf)\r
+ */\r
+void gf_sha1_csum(u8 *buf, u32 buflen, u8 digest[20]);\r
+\r
+/*\r
+ * Output HMAC-SHA-1(key,buf)\r
+ */\r
+void gf_sha1_hmac(u8 *key, u32 keylen, u8 *buf, u32 buflen, u8 digest[20]);\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif /*_GF_CRYPT_H_*/\r
+\r
diff --git a/tstools/DtsEdit/src/gpac/download.h b/tstools/DtsEdit/src/gpac/download.h
new file mode 100644 (file)
index 0000000..6d56ffc
--- /dev/null
@@ -0,0 +1,277 @@
+/*\r
+ *                     GPAC - Multimedia Framework C SDK\r
+ *\r
+ *                     Copyright (c) Jean Le Feuvre 2000-2005 \r
+ *                                     All rights reserved\r
+ *\r
+ *  This file is part of GPAC / common tools sub-project\r
+ *\r
+ *  GPAC is free software; you can redistribute it and/or modify\r
+ *  it under the terms of the GNU Lesser General Public License as published by\r
+ *  the Free Software Foundation; either version 2, or (at your option)\r
+ *  any later version.\r
+ *   \r
+ *  GPAC is distributed in the hope that it will be useful,\r
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ *  GNU Lesser General Public License for more details.\r
+ *   \r
+ *  You should have received a copy of the GNU Lesser General Public\r
+ *  License along with this library; see the file COPYING.  If not, write to\r
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. \r
+ *\r
+ */\r
+\r
+#ifndef _GF_DOWNLOAD_H_\r
+#define _GF_DOWNLOAD_H_\r
+\r
+/*!\r
+ *     \file <gpac/download.h>\r
+ *     \brief Downloader functions.\r
+ */\r
+\r
+/*!\r
+ *     \addtogroup dld_grp downloader\r
+ *     \ingroup utils_grp\r
+ *     \brief File Downloader objects\r
+ *\r
+ *     This section documents the file downloading tools the GPAC framework. Currently HTTP is supported, HTTPS is under testing but may not be supported\r
+ *depending on GPAC compilation options (HTTPS in GPAC needs OpenSSL installed on the system).\r
+ *\r
+ *     @{\r
+ */\r
+\r
+\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+\r
+#include <gpac/tools.h>\r
+#include <gpac/module.h>\r
+\r
+\r
+/*!the download manager object. This is usually not used by GPAC modules*/\r
+typedef struct __gf_download_manager GF_DownloadManager;\r
+/*!the download manager session.*/\r
+typedef struct __gf_download_session GF_DownloadSession;\r
+\r
+/*!\r
+ *\brief download manager constructor\r
+ *\r
+ *Creates a new download manager object.\r
+ *\param cfg optional configuration file. Currently the download manager needs a configuration file for cache location and \r
+ *other options. The cache directory must be indicated in the section "General", key "CacheDirectory" of the configuration\r
+ *file. If the cache directory is not found, the cache will be disabled but the downloader will still work.\r
+ *\return the download manager object\r
+*/\r
+GF_DownloadManager *gf_dm_new(GF_Config *cfg);\r
+/*\r
+ *\brief download manager destructor\r
+ *\r
+ *Deletes the download manager. All running sessions are aborted\r
+ *\param dm the download manager object\r
+ */\r
+void gf_dm_del(GF_DownloadManager *dm);\r
+\r
+/*!\r
+ *\brief callback function for authentication\r
+ *\r
+ * The gf_dm_get_usr_pass type is the type for the callback of the \ref gf_dm_set_auth_callback function used for password retrieval\r
+ *\param usr_cbk opaque user data\r
+ *\param site_url url of the site the user and password are requested for\r
+ *\param usr_name the user name for this site. The allocated space for this buffer is 50 bytes. \note this varaibale may already be formatted.\r
+ *\param password the password for this site and user. The allocated space for this buffer is 50 bytes.\r
+ *\return 0 if user didn't fill in the information which will result in an authentication failure, 1 otherwise.\r
+*/\r
+typedef Bool (*gf_dm_get_usr_pass)(void *usr_cbk, const char *site_url, char *usr_name, char *password);\r
+\r
+/*!\r
+ *\brief password retrieval assignment\r
+ *\r
+ *Assigns the callback function used for user password retrieval. If no such function is assigned to the download manager, \r
+ *all downloads requiring authentication will fail.\r
+ *\param dm the download manager object\r
+ *\param get_pass \ref gf_dm_get_usr_pass callback function for user and password retrieval. \r
+ *\param usr_cbk opaque user data passed to callback function\r
+ */\r
+void gf_dm_set_auth_callback(GF_DownloadManager *dm, gf_dm_get_usr_pass get_pass, void *usr_cbk);\r
+\r
+/*!downloader session message types*/\r
+enum\r
+{\r
+       /*!signal that session is setup and waiting for connection request*/\r
+       GF_NETIO_SETUP = 0,\r
+       /*!signal that session connection is done*/\r
+       GF_NETIO_CONNECTED,\r
+       /*!request a protocol method from the user. Default value is "GET" for HTTP*/\r
+       GF_NETIO_GET_METHOD,\r
+       /*!request a header from the user. */\r
+       GF_NETIO_GET_HEADER,\r
+       /*!requesting content from the user, if any. Content is appended to the request*/\r
+       GF_NETIO_GET_CONTENT,\r
+       /*!signal that request is sent and waiting for server reply*/\r
+       GF_NETIO_WAIT_FOR_REPLY,\r
+       /*!signal a header to user. */\r
+       GF_NETIO_PARSE_HEADER,\r
+       /*!signal request reply to user. The reply is always sent after the headers*/\r
+       GF_NETIO_PARSE_REPLY,\r
+       /*!send data to the user*/\r
+       GF_NETIO_DATA_EXCHANGE,\r
+       /*!all data has been transfered*/\r
+       GF_NETIO_DATA_TRANSFERED,\r
+       /*!signal that the session has been deconnected*/\r
+       GF_NETIO_DISCONNECTED,\r
+       /*!downloader session failed (error code set) or done/destroyed (no error code)*/\r
+       GF_NETIO_STATE_ERROR\r
+};\r
+\r
+/*!session download flags*/\r
+enum\r
+{\r
+       /*!session is not threaded, the user must explicitely fetch the data */\r
+       GF_NETIO_SESSION_NOT_THREADED   =       1,\r
+       /*!session has no cache: data will be sent to the user if threaded mode (live streams like radios & co)*/\r
+       GF_NETIO_SESSION_NOT_CACHED     =       1<<1,\r
+};\r
+\r
+\r
+/*!protocol I/O parameter*/\r
+typedef struct\r
+{\r
+       /*!parameter message type*/\r
+       u32 msg_type;\r
+       /*error code if any. Valid for all message types.*/\r
+       GF_Err error;\r
+       /*!data received or data to send. Only valid for GF_NETIO_GET_CONTENT and GF_NETIO_DATA_EXCHANGE (when no cache is setup) messages*/\r
+       char *data;\r
+       /*!size of associated data. Only valid for GF_NETIO_GET_CONTENT and GF_NETIO_DATA_EXCHANGE messages*/\r
+       u32 size;\r
+       /*protocol header. Only valid for GF_NETIO_GET_HEADER, GF_NETIO_PARSE_HEADER and GF_NETIO_GET_METHOD*/\r
+       char *name;\r
+       /*protocol header value or server response. Only alid for GF_NETIO_GET_HEADER, GF_NETIO_PARSE_HEADER and GF_NETIO_PARSE_REPLY*/\r
+       char *value;\r
+       /*response code - only valid for GF_NETIO_PARSE_REPLY*/\r
+       u32 reply;\r
+} GF_NETIO_Parameter;\r
+\r
+/*!\r
+ *\brief callback function for data reception and state signaling\r
+ *\r
+ * The gf_dm_user_io type is the type for the data callback function of a download session\r
+ *\param usr_cbk opaque user data\r
+ *\param parameter the input/output parameter structure \r
+*/\r
+typedef void (*gf_dm_user_io)(void *usr_cbk, GF_NETIO_Parameter *parameter);\r
+\r
+\r
+\r
+/*!\r
+ *\brief download session constructor\r
+ *\r
+ *Creates a new download session\r
+ *\param dm the download manager object\r
+ *\param url file to retrieve (no PUT/POST yet, only downloading is supported)\r
+ *\param dl_flags combination of session download flags\r
+ *\param user_io \ref gf_dm_user_io callback function for data reception and service messages\r
+ *\param usr_cbk opaque user data passed to callback function\r
+ *\param error error for failure cases \r
+ *\return the session object or NULL if error. If no error is indicated and a NULL session is returned, this means the file is local\r
+ */\r
+GF_DownloadSession * gf_dm_sess_new(GF_DownloadManager *dm, char *url, u32 dl_flags,\r
+                                                                         gf_dm_user_io user_io,\r
+                                                                         void *usr_cbk,\r
+                                                                         GF_Err *error);\r
+\r
+/*!\r
+ *brief downloader session destructor\r
+ *\r
+ *Deletes the download session, cleaning the cache if indicated in the configuration file of the download manager (section "Downloader", key "CleanCache")\r
+ *\param sess the download session\r
+*/\r
+void gf_dm_sess_del(GF_DownloadSession * sess);\r
+/*!\r
+ *\brief aborts downloading\r
+ *\r
+ *Aborts all operations in the session, regardless of its state. The session cannot be reused once this is called.\r
+ *\param sess the download session\r
+ */\r
+void gf_dm_sess_abort(GF_DownloadSession * sess);\r
+/*!\r
+ *\brief sets private data\r
+ *\r
+ *associate private data with the session.\r
+ *\param sess the download session\r
+ *\param private_data the private data\r
+ *\warning the private_data parameter is reserved for bandwidth statistics per service when used in the GPAC terminal.\r
+ */\r
+void gf_dm_sess_set_private(GF_DownloadSession * sess, void *private_data);\r
+\r
+/*!\r
+ *\brief gets private data\r
+ *\r
+ *Gets private data associated with the session.\r
+ *\param sess the download session\r
+ *\return the private data\r
+ *\warning the private_data parameter is reserved for bandwidth statistics per service when used in the GPAC terminal.\r
+ */\r
+void *gf_dm_sess_get_private(GF_DownloadSession * sess);\r
+/*!\r
+ *\brief gets last session error \r
+ *\r
+ *Gets the last error that occured in the session\r
+ *\param sess the download session\r
+ *\return the last error\r
+ */\r
+GF_Err gf_dm_sess_last_error(GF_DownloadSession *sess);\r
+\r
+/*!\r
+ *\brief fetches data on session\r
+ *\r
+ *Fetches data from the server. This will also performs connections and all needed exchange with server.\r
+ *\param sess the download session\r
+ *\param buffer destination buffer\r
+ *\param buffer_size destination buffer allocated size\r
+ *\param read_size amount of data actually fetched\r
+ *\note this can only be used when the session is not threaded\r
+ */\r
+GF_Err gf_dm_sess_fetch_data(GF_DownloadSession * sess, char *buffer, u32 buffer_size, u32 *read_size);\r
+\r
+/*!\r
+ *\brief get mime type \r
+ *\r
+ *Fetches the mime type of the URL this session is fetching\r
+ *\param sess the download session\r
+ *\return the mime type of the URL, or NULL if error. You should get the error with \ref gf_dm_sess_last_error\r
+ */\r
+const char *gf_dm_sess_mime_type(GF_DownloadSession * sess);\r
+/*!\r
+ *\brief get cache file name\r
+ *\r
+ *Gets the cache file name for the session.\r
+ *\param sess the download session\r
+ *\return the absolute path of the cache file, or NULL if the session is not cached*/\r
+const char *gf_dm_sess_get_cache_name(GF_DownloadSession * sess);\r
+/*!\r
+ *\brief get statistics\r
+ *\r
+ *Gets download statistics for the session. All output parameters are optional and may be set to NULL.\r
+ *\param sess the download session\r
+ *\param server the remote server address\r
+ *\param path the path on the remote server\r
+ *\param total_size the total size in bytes the file fetched, 0 if unknown.\r
+ *\param bytes_done the amount of bytes received from the server\r
+ *\param bytes_per_sec the average data rate in bytes per seconds\r
+ *\param net_status the session status\r
+ */\r
+GF_Err gf_dm_sess_get_stats(GF_DownloadSession * sess, const char **server, const char **path, u32 *total_size, u32 *bytes_done, u32 *bytes_per_sec, u32 *net_status);\r
+\r
+\r
+/*! @} */\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+\r
+#endif         /*_GF_DOWNLOAD_H_*/\r
+\r
diff --git a/tstools/DtsEdit/src/gpac/esi.h b/tstools/DtsEdit/src/gpac/esi.h
new file mode 100644 (file)
index 0000000..