]> granicus.if.org Git - libmatroska/commitdiff
move the sources from the dead coreforge server
authorSteve Lhomme <slhomme@matroska.org>
Thu, 18 Feb 2010 08:13:06 +0000 (08:13 +0000)
committerSteve Lhomme <slhomme@matroska.org>
Thu, 18 Feb 2010 08:13:06 +0000 (08:13 +0000)
git-svn-id: https://matroska.svn.sourceforge.net/svnroot/matroska/trunk/libmatroska@1 a6f86f6d-0131-4f8e-9e7b-e335508773d5

118 files changed:
ChangeLog [new file with mode: 0644]
LICENSE.LGPL [new file with mode: 0644]
debian/changelog [new file with mode: 0644]
debian/control [new file with mode: 0644]
debian/copyright [new file with mode: 0644]
debian/dirs [new file with mode: 0644]
debian/docs [new file with mode: 0644]
debian/libmatroska-dev.dirs [new file with mode: 0644]
debian/libmatroska-dev.files [new file with mode: 0644]
debian/rules [new file with mode: 0644]
libmatroska.proj [new file with mode: 0644]
make/Doxyfile [new file with mode: 0644]
make/cygwin/Makefile [new file with mode: 0644]
make/cygwin/Makefile.rule [new file with mode: 0644]
make/linux/Makefile [new file with mode: 0644]
make/linux/Makefile.rule [new file with mode: 0644]
make/linux/check_ids [new file with mode: 0644]
make/linux/fedora-core.spec [new file with mode: 0644]
make/linux/suse-libmatroska-makefile.diff [new file with mode: 0644]
make/linux/suse.spec [new file with mode: 0644]
make/macosx/macosx.pbproj/project.pbxproj [new file with mode: 0644]
make/makedoc.bat [new file with mode: 0644]
make/makedoc.sh [new file with mode: 0644]
make/mingw32/Makefile [new file with mode: 0644]
make/mingw32/libmatroska.dev [new file with mode: 0644]
make/mingw32/test/Makefile [new file with mode: 0644]
make/mingw32/test/test6.dev [new file with mode: 0644]
make/mingw32/test/test8.dev [new file with mode: 0644]
make/vc6/lib/static/libmatroska.dsp [new file with mode: 0644]
make/vc6/test/test0.dsp [new file with mode: 0644]
make/vc6/test/test00.dsp [new file with mode: 0644]
make/vc6/test/test1.dsp [new file with mode: 0644]
make/vc6/test/test2.dsp [new file with mode: 0644]
make/vc6/test/test3.dsp [new file with mode: 0644]
make/vc6/test/test4.dsp [new file with mode: 0644]
make/vc6/test/test5.dsp [new file with mode: 0644]
make/vc6/test/test6.dsp [new file with mode: 0644]
make/vc6/test/test6c.dsp [new file with mode: 0644]
make/vc6/test/test7.dsp [new file with mode: 0644]
make/vc6/test/test8.dsp [new file with mode: 0644]
make/vc6/test/test8c.dsp [new file with mode: 0644]
make/vc6/test/test9.dsp [new file with mode: 0644]
make/vc6/vc6.dsw [new file with mode: 0644]
make/vc7/Makefile [new file with mode: 0644]
make/vc7/lib/dll/libmatroskadll.v71.vcproj [new file with mode: 0644]
make/vc7/lib/static/libmatroska.v71.vcproj [new file with mode: 0644]
make/vc7/lib/static/libmatroska.vcproj [new file with mode: 0644]
make/vc7/test/test0.vcproj [new file with mode: 0644]
make/vc7/test/test00.vcproj [new file with mode: 0644]
make/vc7/test/test6.vcproj [new file with mode: 0644]
make/vc7/test/test8.vcproj [new file with mode: 0644]
make/vc7/test/test9.vcproj [new file with mode: 0644]
make/vc7/vc7.sln [new file with mode: 0644]
matroska/FileKax.h [new file with mode: 0644]
matroska/KaxAttached.h [new file with mode: 0644]
matroska/KaxAttachments.h [new file with mode: 0644]
matroska/KaxBlock.h [new file with mode: 0644]
matroska/KaxBlockData.h [new file with mode: 0644]
matroska/KaxChapters.h [new file with mode: 0644]
matroska/KaxCluster.h [new file with mode: 0644]
matroska/KaxClusterData.h [new file with mode: 0644]
matroska/KaxConfig.h [new file with mode: 0644]
matroska/KaxContentEncoding.h [new file with mode: 0644]
matroska/KaxContexts.h [new file with mode: 0644]
matroska/KaxCues.h [new file with mode: 0644]
matroska/KaxCuesData.h [new file with mode: 0644]
matroska/KaxInfo.h [new file with mode: 0644]
matroska/KaxInfoData.h [new file with mode: 0644]
matroska/KaxSeekHead.h [new file with mode: 0644]
matroska/KaxSegment.h [new file with mode: 0644]
matroska/KaxTag.h [new file with mode: 0644]
matroska/KaxTagMulti.h [new file with mode: 0644]
matroska/KaxTags.h [new file with mode: 0644]
matroska/KaxTrackAudio.h [new file with mode: 0644]
matroska/KaxTrackEntryData.h [new file with mode: 0644]
matroska/KaxTrackVideo.h [new file with mode: 0644]
matroska/KaxTracks.h [new file with mode: 0644]
matroska/KaxTypes.h [new file with mode: 0644]
matroska/KaxVersion.h [new file with mode: 0644]
matroska/c/libmatroska.h [new file with mode: 0644]
matroska/c/libmatroska_t.h [new file with mode: 0644]
src/FileKax.cpp [new file with mode: 0644]
src/KaxAttached.cpp [new file with mode: 0644]
src/KaxAttachments.cpp [new file with mode: 0644]
src/KaxBlock.cpp [new file with mode: 0644]
src/KaxBlockData.cpp [new file with mode: 0644]
src/KaxChapters.cpp [new file with mode: 0644]
src/KaxCluster.cpp [new file with mode: 0644]
src/KaxClusterData.cpp [new file with mode: 0644]
src/KaxContentEncoding.cpp [new file with mode: 0644]
src/KaxContexts.cpp [new file with mode: 0644]
src/KaxCues.cpp [new file with mode: 0644]
src/KaxCuesData.cpp [new file with mode: 0644]
src/KaxInfo.cpp [new file with mode: 0644]
src/KaxInfoData.cpp [new file with mode: 0644]
src/KaxSeekHead.cpp [new file with mode: 0644]
src/KaxSegment.cpp [new file with mode: 0644]
src/KaxTag.cpp [new file with mode: 0644]
src/KaxTagMulti.cpp [new file with mode: 0644]
src/KaxTags.cpp [new file with mode: 0644]
src/KaxTrackAudio.cpp [new file with mode: 0644]
src/KaxTrackEntryData.cpp [new file with mode: 0644]
src/KaxTrackVideo.cpp [new file with mode: 0644]
src/KaxTracks.cpp [new file with mode: 0644]
src/KaxVersion.cpp [new file with mode: 0644]
test/Makefile [new file with mode: 0644]
test/ebml/Makefile [new file with mode: 0644]
test/ebml/ebml.proj [new file with mode: 0644]
test/ebml/test0.cpp [new file with mode: 0644]
test/ebml/test00.cpp [new file with mode: 0644]
test/mux/mux.proj [new file with mode: 0644]
test/mux/test6.cpp [new file with mode: 0644]
test/mux/test8.cpp [new file with mode: 0644]
test/tags/tags.proj [new file with mode: 0644]
test/tags/test9.cpp [new file with mode: 0644]
test/test.proj [new file with mode: 0644]
test/utf8/test5.cpp [new file with mode: 0644]
test/utf8/utf8.proj [new file with mode: 0644]

diff --git a/ChangeLog b/ChangeLog
new file mode 100644 (file)
index 0000000..0d26921
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,1944 @@
+2007-01-19 09:58  robux4\r
+\r
+       * trunk/libebml/libebml.proj, trunk/libmatroska/libmatroska.proj,\r
+         trunk/libmatroska/test/ebml/ebml.proj,\r
+         trunk/libmatroska/test/mux/mux.proj,\r
+         trunk/libmatroska/test/tags/tags.proj,\r
+         trunk/libmatroska/test/test.proj,\r
+         trunk/libmatroska/test/utf8/utf8.proj: add support for coremake\r
+         building for the moment the config.h and coremake are referenced\r
+         by a parent project\r
+\r
+2007-01-15 16:01  mosu\r
+\r
+       * trunk/libmatroska/debian/changelog,\r
+         trunk/libmatroska/matroska/KaxVersion.h: Version number upgrade to\r
+         0.8.1.\r
+\r
+2007-01-14 17:20  mosu\r
+\r
+       * trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/matroska/KaxCluster.h,\r
+         trunk/libmatroska/matroska/KaxCuesData.h,\r
+         trunk/libmatroska/src/KaxBlock.cpp,\r
+         trunk/libmatroska/src/KaxCues.cpp,\r
+         trunk/libmatroska/src/KaxCuesData.cpp: Added support for\r
+         KaxCodecState and for indexing them in the cues.\r
+\r
+2006-06-02 14:32  mosu\r
+\r
+       * trunk/libmatroska/make/linux/Makefile: Overwrite existing symlinks\r
+         during install.\r
+\r
+2006-03-30 19:57  mosu\r
+\r
+       * trunk/libmatroska/make/linux/Makefile: Do not abort if the symlink\r
+         exists already.\r
+\r
+2005-10-18 18:02  mosu\r
+\r
+       * trunk/libmatroska/ChangeLog, trunk/libmatroska/debian/changelog:\r
+         Changed the version in the Debian control file & automatic\r
+         ChangeLog update.\r
+\r
+2005-10-16 13:06  robux4\r
+\r
+       * trunk/libmatroska/src/KaxBlock.cpp: libmatroska: set the\r
+         discardable bit of SimpleBlock correctly\r
+\r
+2005-10-16 10:28  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/src/KaxBlock.cpp: libmatroska: support for\r
+         reading extra features of SimpleBlock\r
+\r
+2005-10-15 17:00  robux4\r
+\r
+       * trunk/libmatroska/src/KaxBlock.cpp: libmatroska: better decision\r
+         to lace or not\r
+\r
+2005-10-15 15:56  robux4\r
+\r
+       * trunk/libebml/ebml/EbmlElement.h, trunk/libebml/ebml/EbmlMaster.h,\r
+         trunk/libebml/src/EbmlElement.cpp, trunk/libebml/src/EbmlVoid.cpp,\r
+         trunk/libmatroska/src/KaxBlock.cpp: libebml/libmatroska: fix a\r
+         major bug when "unknown size" was used (Haali does)\r
+\r
+2005-10-15 12:34  robux4\r
+\r
+       * trunk/libmatroska/src/KaxCuesData.cpp: libmatroska: fix\r
+         compilation under gcc\r
+\r
+2005-10-14 19:36  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/src/KaxBlock.cpp,\r
+         trunk/libmatroska/src/KaxCluster.cpp,\r
+         trunk/libmatroska/src/KaxCuesData.cpp: libmatroska: allow correct\r
+         compilation & linking with MATROSKA_VERSION set to 1\r
+\r
+2005-10-13 21:21  robux4\r
+\r
+       * trunk/libmatroska/src/KaxCues.cpp: libmatroska: simplify the code\r
+         for the backward compatibility\r
+\r
+2005-10-13 21:16  robux4\r
+\r
+       * trunk/libmatroska/src/KaxBlockData.cpp,\r
+         trunk/libmatroska/src/KaxCues.cpp: libmatroska: make the newer\r
+         library work with older code (again after internal changes)\r
+\r
+2005-10-13 20:35  robux4\r
+\r
+       * trunk/libmatroska/src/KaxBlock.cpp,\r
+         trunk/libmatroska/src/KaxBlockData.cpp: libmatroska: KaxBlockBlob\r
+         now works in NO SimpleBlock mode too that means writing or\r
+         KaxSimpleBlock is now fully functional\r
+\r
+2005-10-13 19:33  robux4\r
+\r
+       * trunk/libmatroska/src/KaxBlock.cpp,\r
+         trunk/libmatroska/src/KaxBlockData.cpp: libmatroska: fix writing\r
+         in auto SimpleBlock mode\r
+\r
+2005-10-12 22:18  robux4\r
+\r
+       * trunk/libmatroska/src/KaxBlock.cpp: libmatroska: fix for the\r
+         non-forced SimpleBlock use\r
+\r
+2005-10-12 22:12  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/src/KaxBlock.cpp,\r
+         trunk/libmatroska/src/KaxCluster.cpp,\r
+         trunk/libmatroska/src/KaxCues.cpp: libmatroska: writing from\r
+         KaxBlockBlob now works !\r
+\r
+2005-10-12 21:21  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxCluster.h,\r
+         trunk/libmatroska/src/KaxCluster.cpp: libmatroska: prepare the\r
+         cluster to render from KaxBlockBlob\r
+\r
+2005-10-10 20:48  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxBlockData.h,\r
+         trunk/libmatroska/matroska/KaxCuesData.h,\r
+         trunk/libmatroska/matroska/KaxTypes.h,\r
+         trunk/libmatroska/src/KaxBlockData.cpp: libmatroska: correct\r
+         copyright year\r
+\r
+2005-10-10 20:47  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/matroska/KaxBlockData.h,\r
+         trunk/libmatroska/matroska/KaxCuesData.h,\r
+         trunk/libmatroska/matroska/KaxTypes.h,\r
+         trunk/libmatroska/src/KaxBlock.cpp,\r
+         trunk/libmatroska/src/KaxBlockData.cpp,\r
+         trunk/libmatroska/src/KaxCues.cpp,\r
+         trunk/libmatroska/src/KaxCuesData.cpp: libmatroska: more code to\r
+         use SimpleBlock automatically (when enabled) reworked the KaxCues\r
+         code to use KaxBlockBlob where possible, the previous API may not\r
+         be 100% compatible (mkvmerge not affected) the code is still not\r
+         100% operational\r
+\r
+2005-10-09 14:30  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/src/KaxCues.cpp,\r
+         trunk/libmatroska/src/KaxCuesData.cpp: libmatroska: simplify a\r
+         cast\r
+\r
+2005-10-09 14:18  robux4\r
+\r
+       * trunk/libmatroska/matroska/FileKax.h,\r
+         trunk/libmatroska/matroska/KaxAttached.h,\r
+         trunk/libmatroska/matroska/KaxAttachments.h,\r
+         trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/matroska/KaxBlockData.h,\r
+         trunk/libmatroska/matroska/KaxChapters.h,\r
+         trunk/libmatroska/matroska/KaxCluster.h,\r
+         trunk/libmatroska/matroska/KaxClusterData.h,\r
+         trunk/libmatroska/matroska/KaxConfig.h,\r
+         trunk/libmatroska/matroska/KaxContentEncoding.h,\r
+         trunk/libmatroska/matroska/KaxContexts.h,\r
+         trunk/libmatroska/matroska/KaxCues.h,\r
+         trunk/libmatroska/matroska/KaxCuesData.h,\r
+         trunk/libmatroska/matroska/KaxInfo.h,\r
+         trunk/libmatroska/matroska/KaxInfoData.h,\r
+         trunk/libmatroska/matroska/KaxSeekHead.h,\r
+         trunk/libmatroska/matroska/KaxSegment.h,\r
+         trunk/libmatroska/matroska/KaxTagMulti.h,\r
+         trunk/libmatroska/matroska/KaxTags.h,\r
+         trunk/libmatroska/matroska/KaxTrackAudio.h,\r
+         trunk/libmatroska/matroska/KaxTrackEntryData.h,\r
+         trunk/libmatroska/matroska/KaxTrackVideo.h,\r
+         trunk/libmatroska/matroska/KaxTracks.h,\r
+         trunk/libmatroska/matroska/KaxTypes.h,\r
+         trunk/libmatroska/matroska/KaxVersion.h,\r
+         trunk/libmatroska/matroska/c/libmatroska.h,\r
+         trunk/libmatroska/matroska/c/libmatroska_t.h,\r
+         trunk/libmatroska/src/KaxBlock.cpp,\r
+         trunk/libmatroska/src/KaxCues.cpp,\r
+         trunk/libmatroska/src/KaxCuesData.cpp: libmatroska: introduce\r
+         KaxBlockBlob to automatically select between BlockGroup and\r
+         SimpleBlock + native eol-style\r
+\r
+2005-10-08 15:32  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxConfig.h: libmatroska: the default\r
+         matroska version to use is now 2\r
+\r
+2005-10-08 15:27  robux4\r
+\r
+       * trunk/libmatroska/src/KaxBlock.cpp,\r
+         trunk/libmatroska/src/KaxCluster.cpp: libmatroska: make\r
+         KaxSimpleBlock really MATROSKA_VERSION 2\r
+\r
+2005-10-08 15:04  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxBlock.h: libmatroska: KaxSimpleBlock\r
+         is MATROSKA_VERSION 2\r
+\r
+2005-10-08 14:39  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/src/KaxBlock.cpp: libmatroska: first attempt to\r
+         write the new SimpleBlock bits correctly\r
+\r
+2005-10-06 21:30  robux4\r
+\r
+       * trunk/libmatroska/src/KaxCluster.cpp: libmatroska: fix the\r
+         mandatory setting according to the new specs\r
+\r
+2005-10-06 21:20  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/src/KaxBlock.cpp,\r
+         trunk/libmatroska/src/KaxCluster.cpp: libmatroska: add\r
+         KaxSimpleBlock and a parent class used by KaxBlock (not tested\r
+         yet, and some things left to implement)\r
+\r
+2005-08-31 13:26  mosu\r
+\r
+       * trunk/libmatroska/make/linux/fedora-core.spec,\r
+         trunk/libmatroska/make/linux/suse-libmatroska-makefile.diff,\r
+         trunk/libmatroska/make/linux/suse.spec: Added the spec files I use\r
+         for building libmatroska on SuSE and Fedora Core.\r
+\r
+2005-08-30 14:39  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxVersion.h: libmatroska: the next\r
+         version will be 0.7.8\r
+\r
+2005-08-30 14:39  robux4\r
+\r
+       * trunk/libmatroska/src/KaxAttached.cpp,\r
+         trunk/libmatroska/src/KaxTracks.cpp: libmatroska: compilation\r
+         fixes for the new elements\r
+\r
+2005-08-30 14:28  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxChapters.h,\r
+         trunk/libmatroska/matroska/KaxTrackEntryData.h,\r
+         trunk/libmatroska/src/KaxAttached.cpp,\r
+         trunk/libmatroska/src/KaxChapters.cpp,\r
+         trunk/libmatroska/src/KaxTrackEntryData.cpp,\r
+         trunk/libmatroska/src/KaxTracks.cpp: added:\r
+         KaxChapterSegmentEditionUID and KaxTrackAttachmentLink\r
+\r
+2005-08-30 14:20  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxAttached.h,\r
+         trunk/libmatroska/src/KaxAttached.cpp: libmatroska: added\r
+         KaxFileReferral\r
+\r
+2005-08-26 08:19  mosu\r
+\r
+       * trunk/libmatroska/matroska/KaxBlock.h: Make the compiler happy:\r
+         gcc wants classes with virtual functions to have virtual\r
+         destructors.\r
+\r
+2005-05-22 07:28  mosu\r
+\r
+       * trunk/libmatroska/ChangeLog: Automatic ChangeLog update.\r
+\r
+2005-05-22 07:28  mosu\r
+\r
+       * trunk/libmatroska, trunk/libmatroska/debian: Ignore some files and\r
+         directories created during the Debian build process.\r
+\r
+2005-05-22 07:27  mosu\r
+\r
+       * trunk/libmatroska/debian/changelog,\r
+         trunk/libmatroska/matroska/KaxVersion.h: Bumped the version number\r
+         to 0.7.7 in the places that robux4 forgot.\r
+\r
+2005-05-19 19:16  robux4\r
+\r
+       * trunk/libebml/ebml/EbmlVersion.h,\r
+         trunk/libmatroska/matroska/KaxVersion.h: update version numbers\r
+         for the upcoming release\r
+\r
+2005-05-03 06:56  mosu\r
+\r
+       * trunk/libmatroska/matroska/KaxTrackEntryData.h: The default value\r
+         of MaxBlockAdditionID is 0, not 1.\r
+\r
+2005-04-19 07:00  mosu\r
+\r
+       * trunk/libmatroska/make/linux/Makefile: Do not compile shared libs\r
+         on Mac OS X due to how they should be handled there. If need\r
+         arises we can always implement it properly. Patch by Shawn\r
+         Holwegner <shawn () holwegner ! com>\r
+\r
+2005-04-16 11:29  mosu\r
+\r
+       * trunk/libmatroska/ChangeLog: Automatic ChangeLog update.\r
+\r
+2005-04-16 11:29  mosu\r
+\r
+       * trunk/libmatroska/debian/rules,\r
+         trunk/libmatroska/make/linux/Makefile: Updated the Linux build\r
+         system and added targets for installing only the static lib +\r
+         headers. Updated the Debian package build script for that, too.\r
+\r
+2005-04-16 11:24  mosu\r
+\r
+       * trunk/libmatroska/debian/changelog: Updated the Debian package's\r
+         version number.\r
+\r
+2005-04-09 22:11  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxChapters.h: libmatroska:\r
+         KaxChapterSegmentUID is an EbmlBinary\r
+\r
+2005-04-05 12:02  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/src/KaxBlock.cpp: libmatroska: add support for\r
+         the invisible flag\r
+\r
+2005-03-28 14:49  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxInfoData.h: libmatroska: make all\r
+         segment UID derive from the same class for easier handling\r
+\r
+2005-03-19 11:14  mosu\r
+\r
+       * trunk/libmatroska/src/KaxChapters.cpp: Wrong element ID according\r
+         to the specs.\r
+\r
+2005-03-19 10:37  mosu\r
+\r
+       * trunk/libmatroska/make/linux: Ignore the shared libs.\r
+\r
+2005-03-19 10:36  mosu\r
+\r
+       * trunk/libmatroska/make/linux/Makefile: 'clean' should remove the\r
+         .los, too. Provide separate targets for the static and the shared\r
+         lib. 'lib' is obsolete.\r
+\r
+2005-03-17 09:36  robux4\r
+\r
+       * trunk/libebml/src/EbmlCrc32.cpp,\r
+         trunk/libmatroska/src/KaxTrackEntryData.cpp: some strings to\r
+         watermark the code\r
+\r
+2005-03-17 09:14  robux4\r
+\r
+       * trunk/libebml/src/EbmlHead.cpp,\r
+         trunk/libmatroska/src/KaxSegment.cpp: some strings to watermark\r
+         the code\r
+\r
+2005-03-16 18:30  robux4\r
+\r
+       * trunk/libebml/src/StdIOCallback.cpp,\r
+         trunk/libmatroska/matroska/KaxContexts.h,\r
+         trunk/mkxuncat/mkxuncat.cpp, trunk/mkxuncat/mkxuncat.vcproj: misc\r
+         compilation fixes\r
+\r
+2005-03-14 10:34  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxChapters.h,\r
+         trunk/libmatroska/matroska/KaxVersion.h,\r
+         trunk/libmatroska/src/KaxChapters.cpp: libmatroska: added\r
+         KaxChapterSegmentUID\r
+\r
+2005-03-13 10:49  robux4\r
+\r
+       * trunk/libebml/make/linux/Makefile,\r
+         trunk/libmatroska/make/linux/Makefile: libebml/libmatroska: allow\r
+         to build as shared libraries for Gentoo\r
+\r
+2005-03-03 13:13  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxChapters.h,\r
+         trunk/libmatroska/matroska/KaxInfoData.h,\r
+         trunk/libmatroska/matroska/KaxTrackEntryData.h,\r
+         trunk/libmatroska/matroska/KaxVersion.h,\r
+         trunk/libmatroska/src/KaxChapters.cpp,\r
+         trunk/libmatroska/src/KaxInfo.cpp,\r
+         trunk/libmatroska/src/KaxInfoData.cpp,\r
+         trunk/libmatroska/src/KaxTrackEntryData.cpp,\r
+         trunk/libmatroska/src/KaxTracks.cpp,\r
+         trunk/libmatroska/test/ebml/test0.cpp,\r
+         trunk/libmatroska/test/ebml/test00.cpp,\r
+         trunk/libmatroska/test/mux/test6.cpp,\r
+         trunk/libmatroska/test/utf8/test5.cpp: update the copyright dates\r
+\r
+2005-02-06 20:03  mosu\r
+\r
+       * trunk/libmatroska/debian/changelog,\r
+         trunk/libmatroska/matroska/KaxVersion.h: Bumped the version number\r
+         to 0.7.5.\r
+\r
+2005-02-06 19:51  mosu\r
+\r
+       * trunk/libmatroska/ChangeLog: Automatic ChangeLog update (with a\r
+         new program -- that's why the diff is so huge)\r
+\r
+2005-02-06 19:49  mosu\r
+\r
+       * trunk/libmatroska/debian/control: Let's require the latest libebml\r
+         for building.\r
+\r
+2005-02-06 18:12  mosu\r
+\r
+       * trunk/libmatroska/make/linux/Makefile: Output an error if a mingw\r
+         gcc is used with the Linux Makefile (I simply do that too often).\r
+\r
+2005-01-31 14:04  mosu\r
+\r
+       * trunk/libmatroska/make/linux/check_ids: Also output the\r
+         files/classes in which the duplicate IDs occur.\r
+\r
+2005-01-31 13:54  robux4\r
+\r
+       * trunk/libmatroska/src/KaxInfoData.cpp: libmatroska: fix the\r
+         segment family UID\r
+\r
+2005-01-31 13:48  mosu\r
+\r
+       * trunk/libmatroska/matroska/KaxTrackEntryData.h,\r
+         trunk/libmatroska/src/KaxTrackEntryData.cpp: The usual compilation\r
+         fixes.\r
+\r
+2005-01-31 13:39  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxTrackEntryData.h,\r
+         trunk/libmatroska/src/KaxTrackEntryData.cpp,\r
+         trunk/libmatroska/src/KaxTracks.cpp: libmatroska: no more\r
+         TrackAngle and new TrackTranslate elements\r
+\r
+2005-01-30 18:00  mosu\r
+\r
+       * trunk/libmatroska/src/KaxInfoData.cpp: Some leftovers from\r
+         renaming ChapterLink to ChapterTranslate.\r
+\r
+2005-01-28 12:10  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxInfoData.h,\r
+         trunk/libmatroska/src/KaxInfo.cpp,\r
+         trunk/libmatroska/src/KaxInfoData.cpp: libmatroska: rename\r
+         ChapterLink* to ChapterTranslate*\r
+\r
+2005-01-20 12:01  mosu\r
+\r
+       * trunk/libmatroska/make/mingw32/Makefile: Only remove files that\r
+         might have been built (and not e.g. libmatroska.dev).\r
+\r
+2005-01-17 13:48  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxInfoData.h,\r
+         trunk/libmatroska/src/KaxInfoData.cpp: libmatroska: add\r
+         KaxChapterLinkEditionUID\r
+\r
+2005-01-15 12:47  robux4\r
+\r
+       * trunk/libmatroska/src/KaxInfo.cpp: libmatroska: fix the\r
+         KaxSegmentFamily flags\r
+\r
+2005-01-13 17:51  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxInfoData.h,\r
+         trunk/libmatroska/src/KaxInfoData.cpp: libmatroska: the usual\r
+         post-commit fixes\r
+\r
+2005-01-13 16:41  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxInfoData.h,\r
+         trunk/libmatroska/src/KaxInfo.cpp,\r
+         trunk/libmatroska/src/KaxInfoData.cpp: libmatroska: added\r
+         KaxSegmentFamily, KaxChapterLink, KaxChapterLinkCodec and\r
+         KaxChapterLinkID\r
+\r
+2005-01-05 16:14  robux4\r
+\r
+       * trunk/libmatroska/make/linux/Makefile: patches from the VLC\r
+         repository\r
+\r
+2005-01-03 19:20  mosu\r
+\r
+       * trunk/libmatroska/src/KaxChapters.cpp: An element cannot require\r
+         itself to be a mandatory child element.\r
+\r
+2005-01-03 15:47  mosu\r
+\r
+       * trunk/libmatroska/matroska/KaxChapters.h,\r
+         trunk/libmatroska/src/KaxChapters.cpp: Look! Squirrels! (The usual\r
+         compilation fixes after one of robux' "I commit from work without\r
+         having compiled it first" commits :-) )\r
+\r
+2005-01-03 12:31  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxChapters.h,\r
+         trunk/libmatroska/src/KaxChapters.cpp: libmatroska: update with\r
+         latest changes in the chapter codecs (may not compile)\r
+\r
+2004-12-18 22:26  mosu\r
+\r
+       * trunk/libmatroska/src/KaxBlock.cpp: Move all of the (re-)activated\r
+         Matroska v1 elements out of "#if == 2" blocks.\r
+\r
+2004-12-18 17:52  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/matroska/KaxTrackEntryData.h,\r
+         trunk/libmatroska/src/KaxBlock.cpp,\r
+         trunk/libmatroska/src/KaxTrackEntryData.cpp,\r
+         trunk/libmatroska/src/KaxTracks.cpp: support for\r
+         KaxMaxBlockAdditionID and fix default values\r
+\r
+2004-12-18 08:49  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxBlock.h: BlockAdditions is in\r
+         Matroska 1 now\r
+\r
+2004-12-15 14:24  robux4\r
+\r
+       * trunk/libmatroska/matroska/c/libmatroska_t.h: added the button\r
+         track type\r
+\r
+2004-11-30 15:45  mosu\r
+\r
+       * trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/src/KaxBlock.cpp: Use malloc() and free()\r
+         instead of new[] and delete[] where the lib might deal with\r
+         pointers that have been allocated by the app, or where the app has\r
+         allocated the memory. Reason: new[]ed memory cannot be\r
+         realloc()ed.\r
+\r
+2004-11-28 17:43  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/src/KaxBlock.cpp: remove support for the gap\r
+         flag in the Block\r
+\r
+2004-11-28 15:24  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxCluster.h,\r
+         trunk/libmatroska/src/KaxCluster.cpp,\r
+         trunk/libmatroska/src/KaxClusterData.cpp: add almost automatic\r
+         handling of SilentTracks\r
+\r
+2004-11-19 12:17  mosu\r
+\r
+       * trunk/libmatroska/make/mingw32/Makefile: Compile libmatroska as a\r
+         DLL by default (is anyone except me using this mingw Makefile\r
+         anyway?). Do not remove the dependency file on "make clean".\r
+\r
+2004-11-17 14:51  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxTrackEntryData.h,\r
+         trunk/libmatroska/src/KaxTrackEntryData.cpp,\r
+         trunk/libmatroska/src/KaxTracks.cpp: added KaxTrackFlagForced\r
+\r
+2004-11-17 08:45  mosu\r
+\r
+       * trunk/libmatroska/make/linux/Makefile: Do not remove the .depend\r
+         file on "make clean".\r
+\r
+2004-11-14 10:40  mosu\r
+\r
+       * trunk/libmatroska/matroska/KaxVersion.h: Numbers starting with '0'\r
+         are octal numbers. Therefore a version like '0.8.4' cannot be\r
+         expressed as '000804'.\r
+\r
+2004-11-13 21:15  mosu\r
+\r
+       * trunk/libmatroska/make/mingw32,\r
+         trunk/libmatroska/make/mingw32/Makefile: Fixed "make depend".\r
+         Ignore a couple of files.\r
+\r
+2004-11-13 11:30  mosu\r
+\r
+       * trunk/libmatroska/make/linux: Ignore the .depend file created by\r
+         "make depend".\r
+\r
+2004-11-13 11:29  mosu\r
+\r
+       * trunk/libmatroska/make/linux/Makefile: Improved the dependency\r
+         calculation to be more portable (makedepend doesn't exist\r
+         everywhere, and it doesn't necessarily use the compiler we want).\r
+\r
+2004-10-02 16:02  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxTrackEntryData.h,\r
+         trunk/libmatroska/src/KaxTrackEntryData.cpp,\r
+         trunk/libmatroska/src/KaxTracks.cpp: added KaxTrackAngle and\r
+         various fixes\r
+\r
+2004-10-02 15:42  robux4\r
+\r
+       * trunk/libmatroska/src/KaxTracks.cpp: KaxTrackOverlay is not in\r
+         "Matroska 2"\r
+\r
+2004-10-02 15:40  robux4\r
+\r
+       * trunk/libmatroska/src/KaxCluster.cpp,\r
+         trunk/libmatroska/src/KaxClusterData.cpp: correct the\r
+         unique/multiple attribute\r
+\r
+2004-10-02 15:39  robux4\r
+\r
+       * trunk/libmatroska/src/KaxTracks.cpp: TrackOverlay is now multiple\r
+\r
+2004-10-02 15:08  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxClusterData.h,\r
+         trunk/libmatroska/src/KaxCluster.cpp,\r
+         trunk/libmatroska/src/KaxClusterData.cpp: added\r
+         KaxClusterSilentTracks and KaxClusterSilentTrackNumber\r
+\r
+2004-09-26 10:34  mosu\r
+\r
+       * trunk/libmatroska/ChangeLog: Automatic ChangeLog update\r
+\r
+2004-09-26 10:21  mosu\r
+\r
+       * trunk/libmatroska/debian/changelog,\r
+         trunk/libmatroska/debian/control: Bumped the version number to\r
+         0.7.4 and the libebml build requirements to 0.7.2 in the Debian\r
+         build system.\r
+\r
+2004-09-26 10:20  mosu\r
+\r
+       * trunk/libmatroska/make/linux/check_ids: Added a small script that\r
+         looks for duplicate EBML IDs in all of libmatroska's source files.\r
+\r
+2004-09-11 17:42  mosu\r
+\r
+       * trunk/libmatroska/matroska/KaxChapters.h: EditionProcessed has a\r
+         default value (0) according to the specs.\r
+\r
+2004-09-04 16:29  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxChapters.h,\r
+         trunk/libmatroska/src/KaxChapters.cpp: KaxEditionManaged becomes\r
+         KaxEditionProcessed and mandatory KaxEditionManagedPrivate becomes\r
+         KaxChapterManagedPrivate and moves\r
+\r
+2004-09-03 13:38  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxTrackAudio.h: no more automatic\r
+         OutputSamplingFrequency default value\r
+\r
+2004-09-02 14:17  mosu\r
+\r
+       * trunk/libmatroska/src/KaxChapters.cpp: The usual after-robux4\r
+         compilation fix ;-)\r
+\r
+2004-09-02 11:08  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxChapters.h,\r
+         trunk/libmatroska/src/KaxChapters.cpp: add support for\r
+         KaxChapterProcessCommand and KaxEditionManagedPrivate\r
+\r
+2004-08-31 17:02  mosu\r
+\r
+       * trunk/libmatroska/matroska/KaxAttached.h: The ValidateSize\r
+         function is neither needed nor correct (probably copy & paste from\r
+         somewhere). Integers of all sizes are accepted as in all the other\r
+         UID cases.\r
+\r
+2004-08-30 18:52  mosu\r
+\r
+       * trunk/libmatroska/src/KaxTracks.cpp: MinCache IS mandatory. My\r
+         bad.\r
+\r
+2004-08-30 18:17  mosu\r
+\r
+       * trunk/libmatroska/src/KaxTracks.cpp: MinCache is not mandatory.\r
+\r
+2004-08-30 09:21  robux4\r
+\r
+       * trunk/libmatroska/src/KaxChapters.cpp,\r
+         trunk/libmatroska/src/KaxTrackVideo.cpp,\r
+         trunk/libmatroska/src/KaxTracks.cpp: flags are mandatory\r
+\r
+2004-08-28 14:04  robux4\r
+\r
+       * trunk/libmatroska/make/vc7/lib/dll,\r
+         trunk/libmatroska/make/vc7/lib/dll/libmatroskadll.v71.vcproj,\r
+         trunk/libmatroska/make/vc7/vc7.sln: allow DLL building with MSVC7\r
+         (not compatible with the MinGW DLLs)\r
+\r
+2004-08-27 18:58  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxTag.h: KaxTagTargetTypeValue default\r
+         to 50\r
+\r
+2004-08-27 12:25  robux4\r
+\r
+       * trunk/libmatroska/src/KaxTag.cpp: TargetTypeValue is no longer\r
+         mandatory\r
+\r
+2004-08-27 10:01  mosu\r
+\r
+       * trunk/libmatroska/src/KaxChapters.cpp: Fixed the wrong element\r
+         names.\r
+\r
+2004-08-27 09:31  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxTag.h,\r
+         trunk/libmatroska/src/KaxTag.cpp: add KaxTagTargetTypeValue as in\r
+         the specs\r
+\r
+2004-08-27 09:22  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxChapters.h,\r
+         trunk/libmatroska/src/KaxChapters.cpp: add KaxChapterPhysicalEquiv\r
+         as in the new specs\r
+\r
+2004-08-25 14:56  mosu\r
+\r
+       * trunk/libmatroska/matroska/KaxTrackVideo.h,\r
+         trunk/libmatroska/src/KaxChapters.cpp: Fixed the compilation.\r
+\r
+2004-08-25 14:48  mosu\r
+\r
+       * trunk/libmatroska/matroska/KaxVersion.h: Pushed the version\r
+         number.\r
+\r
+2004-08-25 14:44  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxChapters.h,\r
+         trunk/libmatroska/src/KaxChapters.cpp: add KaxChapterProcess and\r
+         KaxChapterProcessTime\r
+\r
+2004-08-25 14:22  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxTrackVideo.h,\r
+         trunk/libmatroska/src/KaxTrackVideo.cpp: add the new PixelCropXXX\r
+         elements\r
+\r
+2004-08-21 20:18  mosu\r
+\r
+       * trunk/libmatroska/ChangeLog: Updates\r
+\r
+2004-08-19 20:08  mosu\r
+\r
+       * trunk/libmatroska/src/KaxChapters.cpp: Wrong element ID.\r
+\r
+2004-08-19 17:16  robux4\r
+\r
+       * trunk/libmatroska/src/KaxChapters.cpp: I always forget to update\r
+         the table size\r
+\r
+2004-08-19 17:15  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxChapters.h,\r
+         trunk/libmatroska/src/KaxChapters.cpp: added KaxEditionFlagDefault\r
+         and KaxEditionManaged\r
+\r
+2004-08-19 08:54  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxTag.h,\r
+         trunk/libmatroska/src/KaxTag.cpp: add the new TargetType element\r
+         in tags\r
+\r
+2004-08-16 21:22  mosu\r
+\r
+       * trunk/libmatroska/ChangeLog: Updates\r
+\r
+2004-08-16 21:04  mosu\r
+\r
+       * trunk/libmatroska/matroska/KaxTag.h: Set the default value for\r
+         KaxTagLangue to "und" complying with the specs.\r
+\r
+2004-08-16 20:49  mosu\r
+\r
+       * trunk/libmatroska/debian/changelog,\r
+         trunk/libmatroska/matroska/KaxVersion.h: New version number 0.7.3\r
+         because of the changes / additions to the tags.\r
+\r
+2004-08-10 15:49  robux4\r
+\r
+       * trunk/libmatroska/src/KaxTag.cpp: never make the same mistake\r
+         twice...\r
+\r
+2004-08-10 14:03  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxTag.h,\r
+         trunk/libmatroska/src/KaxTag.cpp: rename the new KaxTagLanguage to\r
+         KaxTagLangue\r
+\r
+2004-08-10 12:58  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxTag.h,\r
+         trunk/libmatroska/src/KaxTag.cpp,\r
+         trunk/libmatroska/src/KaxTags.cpp: fix mandatory values add\r
+         support for TagLanguage and TagDefault\r
+\r
+2004-08-06 07:34  mosu\r
+\r
+       * trunk/libmatroska/ChangeLog: Updates\r
+\r
+2004-08-05 11:59  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxChapters.h,\r
+         trunk/libmatroska/src/KaxChapters.cpp: support for\r
+         EditionFlagHidden (not compiled!)\r
+\r
+2004-08-04 17:49  mosu\r
+\r
+       * trunk/libmatroska/ChangeLog, trunk/libmatroska/debian/changelog:\r
+         Updated the ChangeLog and bumped the version number on the Debian\r
+         package to 0.7.2.\r
+\r
+2004-08-01 15:33  mosu\r
+\r
+       * trunk/libmatroska/matroska/KaxInfoData.h: Use a double for the\r
+         KaxDuration element and not only a float. Otherwise the duration\r
+         might be off a couple of samples for large values due to the\r
+         limited resolution of a float.\r
+\r
+2004-07-31 09:01  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxTag.h: The default value of 0 makes\r
+         sense again at the container level (not binary content)\r
+\r
+2004-07-30 20:31  mosu\r
+\r
+       * trunk/libmatroska/src/KaxChapters.cpp,\r
+         trunk/libmatroska/src/KaxTag.cpp: Never commit code without having\r
+         compiled it before :) When adding elements to an array the array\r
+         size has to be adjusted.\r
+\r
+2004-07-30 12:47  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxVersion.h: push the version number\r
+         to avoid confusion if beta softwares are released in public\r
+\r
+2004-07-30 12:45  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxChapters.h,\r
+         trunk/libmatroska/matroska/KaxTag.h,\r
+         trunk/libmatroska/src/KaxChapters.cpp,\r
+         trunk/libmatroska/src/KaxTag.cpp: add an edition UID and clean the\r
+         code according to the specs (I haven't tried to compile !!!)\r
+\r
+2004-07-27 07:56  mosu\r
+\r
+       * trunk/libmatroska/test/mux/test8.cpp: Fix for compilation on\r
+         NetBSD. Patch by Lubomir Sedlacik (salo at Xtrmntr dot org).\r
+\r
+2004-07-26 17:53  mosu\r
+\r
+       * trunk/libmatroska/make/mingw32/Makefile: Proper description for\r
+         the SHARED option. Make building the lib statically the default\r
+         just like it is for libembl.\r
+\r
+2004-07-25 10:37  mosu\r
+\r
+       * trunk/libmatroska/debian/changelog,\r
+         trunk/libmatroska/debian/control,\r
+         trunk/libmatroska/matroska/KaxVersion.h: Bumped the version number\r
+         to 0.7.1. Same for libebml dependencies for the Debian package.\r
+\r
+2004-07-22 20:28  mosu\r
+\r
+       * trunk/libmatroska/make/mingw32/Makefile: Do not build the test\r
+         apps by default.\r
+\r
+2004-07-19 16:43  mosu\r
+\r
+       * trunk/libmatroska/make/linux/Makefile: Let the user specify his\r
+         own CXXFLAGS and CPPFLAGS.\r
+\r
+2004-07-14 13:29  mosu\r
+\r
+       * trunk/libmatroska/src/KaxCues.cpp: I hate tabs. They suck.\r
+         Especially in multi user development.\r
+\r
+2004-07-14 13:27  mosu\r
+\r
+       * trunk/libmatroska/src/KaxCues.cpp: Do not let the user add a\r
+         BlockGroup more than once to the cues. KaxCluster::Render() does\r
+         call KaxCues::PositionSet(), but PositionSet() only cleans the\r
+         first occurence. This will lead to an assert() in the KaxCues\r
+         d\tor.\r
+\r
+2004-07-09 21:19  mosu\r
+\r
+       * trunk/libmatroska/debian/rules: debian/rules should be executable.\r
+\r
+2004-07-09 21:10  mosu\r
+\r
+       * trunk/libmatroska/make/linux,\r
+         trunk/libmatroska/make/linux/.cvsignore: Use the svn:ignore\r
+         property instead of the .cvsignore file.\r
+\r
+2004-07-09 21:07  mosu\r
+\r
+       * trunk/libmatroska/make/linux/Makefile: Do not compile the test\r
+         apps with the "all" target. gcc 3.4.0 does not like the non-ASCII\r
+         cahrs in one of them, and only libmatroska devs need them anyway.\r
+\r
+2004-07-09 21:05  mosu\r
+\r
+       * trunk/libmatroska/ChangeLog, trunk/libmatroska/LICENSE.LGPL,\r
+         trunk/libmatroska/debian/changelog,\r
+         trunk/libmatroska/debian/control,\r
+         trunk/libmatroska/debian/copyright, trunk/libmatroska/debian/dirs,\r
+         trunk/libmatroska/debian/docs,\r
+         trunk/libmatroska/debian/libmatroska-dev.dirs,\r
+         trunk/libmatroska/debian/libmatroska-dev.files,\r
+         trunk/libmatroska/debian/rules, trunk/libmatroska/make/Doxyfile,\r
+         trunk/libmatroska/make/cygwin/Makefile,\r
+         trunk/libmatroska/make/cygwin/Makefile.rule,\r
+         trunk/libmatroska/make/linux/Makefile,\r
+         trunk/libmatroska/make/linux/Makefile.rule,\r
+         trunk/libmatroska/make/makedoc.bat,\r
+         trunk/libmatroska/make/makedoc.sh,\r
+         trunk/libmatroska/make/mingw32/Makefile,\r
+         trunk/libmatroska/make/mingw32/test/Makefile,\r
+         trunk/libmatroska/make/mingw32/test/test6.dev,\r
+         trunk/libmatroska/make/mingw32/test/test8.dev,\r
+         trunk/libmatroska/src/FileKax.cpp,\r
+         trunk/libmatroska/src/KaxAttached.cpp,\r
+         trunk/libmatroska/src/KaxAttachments.cpp,\r
+         trunk/libmatroska/src/KaxBlock.cpp,\r
+         trunk/libmatroska/src/KaxBlockData.cpp,\r
+         trunk/libmatroska/src/KaxChapters.cpp,\r
+         trunk/libmatroska/src/KaxCluster.cpp,\r
+         trunk/libmatroska/src/KaxClusterData.cpp,\r
+         trunk/libmatroska/src/KaxContentEncoding.cpp,\r
+         trunk/libmatroska/src/KaxContexts.cpp,\r
+         trunk/libmatroska/src/KaxCues.cpp,\r
+         trunk/libmatroska/src/KaxCuesData.cpp,\r
+         trunk/libmatroska/src/KaxInfo.cpp,\r
+         trunk/libmatroska/src/KaxInfoData.cpp,\r
+         trunk/libmatroska/src/KaxSeekHead.cpp,\r
+         trunk/libmatroska/src/KaxSegment.cpp,\r
+         trunk/libmatroska/src/KaxTag.cpp,\r
+         trunk/libmatroska/src/KaxTagMulti.cpp,\r
+         trunk/libmatroska/src/KaxTags.cpp,\r
+         trunk/libmatroska/src/KaxTrackAudio.cpp,\r
+         trunk/libmatroska/src/KaxTrackEntryData.cpp,\r
+         trunk/libmatroska/src/KaxTrackVideo.cpp,\r
+         trunk/libmatroska/src/KaxTracks.cpp,\r
+         trunk/libmatroska/src/KaxVersion.cpp,\r
+         trunk/libmatroska/test/Makefile,\r
+         trunk/libmatroska/test/ebml/Makefile,\r
+         trunk/libmatroska/test/ebml/test0.cpp,\r
+         trunk/libmatroska/test/ebml/test00.cpp,\r
+         trunk/libmatroska/test/mux/test6.cpp,\r
+         trunk/libmatroska/test/mux/test8.cpp,\r
+         trunk/libmatroska/test/tags/test9.cpp,\r
+         trunk/libmatroska/test/utf8/test5.cpp: Set eol-style and keywords\r
+         properties.\r
+\r
+2004-07-09 09:16  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxVersion.h: test SSL authentication\r
+\r
+2004-07-08 12:02  \r
+\r
+       * trunk/libmatroska/matroska/KaxVersion.h: Test changes\r
+\r
+2004-05-11 20:33  mosu\r
+\r
+       * trunk/libmatroska/make/beos,\r
+         trunk/libmatroska/make/linux/Makefile,\r
+         trunk/libmatroska/test/mux/test8.cpp: Compilation on BeOS. Patch\r
+         by Vegard W&#65533;rp <devel@vegardw.com>\r
+\r
+2004-04-26 19:35  robux4\r
+\r
+       * trunk/libebml/make/vc7/Makefile,\r
+         trunk/libmatroska/make/vc7/Makefile: Makefile to use the free\r
+         VS.Net 2003 command-line compiler\r
+\r
+2004-04-24 09:09  mosu\r
+\r
+       * trunk/libebml/make/linux/Makefile,\r
+         trunk/libmatroska/make/linux/Makefile: Set LD to CXX by default.\r
+\r
+2004-04-23 16:46  mosu\r
+\r
+       * trunk/libmatroska/debian/changelog,\r
+         trunk/libmatroska/debian/control,\r
+         trunk/libmatroska/matroska/KaxVersion.h: Bumped version number to\r
+         0.7.0.\r
+\r
+2004-04-21 19:55  mosu\r
+\r
+       * trunk/libebml/ChangeLog, trunk/libmatroska/ChangeLog: Updates\r
+\r
+2004-04-21 19:50  mosu\r
+\r
+       * trunk/libmatroska/matroska/KaxClusterData.h,\r
+         trunk/libmatroska/src/KaxCluster.cpp,\r
+         trunk/libmatroska/src/KaxClusterData.cpp: KaxClusterPosition is\r
+         already in use and therefore a v1 element.\r
+\r
+2004-04-14 23:26  robux4\r
+\r
+       * trunk/libmatroska/matroska/FileKax.h,\r
+         trunk/libmatroska/matroska/KaxAttached.h,\r
+         trunk/libmatroska/matroska/KaxAttachments.h,\r
+         trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/matroska/KaxBlockData.h,\r
+         trunk/libmatroska/matroska/KaxChapters.h,\r
+         trunk/libmatroska/matroska/KaxCluster.h,\r
+         trunk/libmatroska/matroska/KaxClusterData.h,\r
+         trunk/libmatroska/matroska/KaxConfig.h,\r
+         trunk/libmatroska/matroska/KaxContentEncoding.h,\r
+         trunk/libmatroska/matroska/KaxContexts.h,\r
+         trunk/libmatroska/matroska/KaxCues.h,\r
+         trunk/libmatroska/matroska/KaxCuesData.h,\r
+         trunk/libmatroska/matroska/KaxInfo.h,\r
+         trunk/libmatroska/matroska/KaxInfoData.h,\r
+         trunk/libmatroska/matroska/KaxSeekHead.h,\r
+         trunk/libmatroska/matroska/KaxSegment.h,\r
+         trunk/libmatroska/matroska/KaxTag.h,\r
+         trunk/libmatroska/matroska/KaxTagMulti.h,\r
+         trunk/libmatroska/matroska/KaxTags.h,\r
+         trunk/libmatroska/matroska/KaxTrackAudio.h,\r
+         trunk/libmatroska/matroska/KaxTrackEntryData.h,\r
+         trunk/libmatroska/matroska/KaxTrackVideo.h,\r
+         trunk/libmatroska/matroska/KaxTracks.h,\r
+         trunk/libmatroska/matroska/KaxTypes.h,\r
+         trunk/libmatroska/matroska/KaxVersion.h,\r
+         trunk/libmatroska/matroska/c/libmatroska.h,\r
+         trunk/libmatroska/matroska/c/libmatroska_t.h,\r
+         trunk/libmatroska/src/FileKax.cpp,\r
+         trunk/libmatroska/src/KaxAttached.cpp,\r
+         trunk/libmatroska/src/KaxAttachments.cpp,\r
+         trunk/libmatroska/src/KaxBlock.cpp,\r
+         trunk/libmatroska/src/KaxBlockData.cpp,\r
+         trunk/libmatroska/src/KaxChapters.cpp,\r
+         trunk/libmatroska/src/KaxCluster.cpp,\r
+         trunk/libmatroska/src/KaxClusterData.cpp,\r
+         trunk/libmatroska/src/KaxContentEncoding.cpp,\r
+         trunk/libmatroska/src/KaxContexts.cpp,\r
+         trunk/libmatroska/src/KaxCues.cpp,\r
+         trunk/libmatroska/src/KaxCuesData.cpp,\r
+         trunk/libmatroska/src/KaxInfo.cpp,\r
+         trunk/libmatroska/src/KaxInfoData.cpp,\r
+         trunk/libmatroska/src/KaxSeekHead.cpp,\r
+         trunk/libmatroska/src/KaxSegment.cpp,\r
+         trunk/libmatroska/src/KaxTag.cpp,\r
+         trunk/libmatroska/src/KaxTagMulti.cpp,\r
+         trunk/libmatroska/src/KaxTags.cpp,\r
+         trunk/libmatroska/src/KaxTrackAudio.cpp,\r
+         trunk/libmatroska/src/KaxTrackEntryData.cpp,\r
+         trunk/libmatroska/src/KaxTrackVideo.cpp,\r
+         trunk/libmatroska/src/KaxTracks.cpp,\r
+         trunk/libmatroska/src/KaxVersion.cpp,\r
+         trunk/libmatroska/test/mux/test6.cpp,\r
+         trunk/libmatroska/test/mux/test8.cpp: Switch to LGPL license\r
+\r
+2004-04-14 23:04  robux4\r
+\r
+       * trunk/libebml/LICENSE.GPL, trunk/libebml/LICENSE.LGPL,\r
+         trunk/libebml/LICENSE.QPL, trunk/libmatroska/LICENSE.GPL,\r
+         trunk/libmatroska/LICENSE.LGPL, trunk/libmatroska/LICENSE.QPL:\r
+         Switch to LGPL license\r
+\r
+2004-01-31 13:43  robux4\r
+\r
+       * trunk/libebml/ebml/EbmlConfig.h, trunk/libebml/ebml/EbmlTypes.h,\r
+         trunk/libebml/ebml/c/libebml_t.h,\r
+         trunk/libmatroska/matroska/KaxConfig.h,\r
+         trunk/libmatroska/matroska/c/libmatroska_t.h: Simplify and change\r
+         the copyright holder (nothing left from Ingo)\r
+\r
+2004-01-19 10:33  mosu\r
+\r
+       * trunk/libebml/ChangeLog, trunk/libmatroska/ChangeLog: Updated the\r
+         ChangeLog.\r
+\r
+2004-01-17 21:40  mosu\r
+\r
+       * trunk/libmatroska/make/mingw32/Makefile,\r
+         trunk/libmatroska/matroska/FileKax.h,\r
+         trunk/libmatroska/matroska/KaxAttached.h,\r
+         trunk/libmatroska/matroska/KaxAttachments.h,\r
+         trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/matroska/KaxBlockData.h,\r
+         trunk/libmatroska/matroska/KaxChapters.h,\r
+         trunk/libmatroska/matroska/KaxCluster.h,\r
+         trunk/libmatroska/matroska/KaxClusterData.h,\r
+         trunk/libmatroska/matroska/KaxConfig.h,\r
+         trunk/libmatroska/matroska/KaxContentEncoding.h,\r
+         trunk/libmatroska/matroska/KaxContexts.h,\r
+         trunk/libmatroska/matroska/KaxCues.h,\r
+         trunk/libmatroska/matroska/KaxCuesData.h,\r
+         trunk/libmatroska/matroska/KaxInfo.h,\r
+         trunk/libmatroska/matroska/KaxInfoData.h,\r
+         trunk/libmatroska/matroska/KaxSeekHead.h,\r
+         trunk/libmatroska/matroska/KaxSegment.h,\r
+         trunk/libmatroska/matroska/KaxTag.h,\r
+         trunk/libmatroska/matroska/KaxTagMulti.h,\r
+         trunk/libmatroska/matroska/KaxTags.h,\r
+         trunk/libmatroska/matroska/KaxTrackAudio.h,\r
+         trunk/libmatroska/matroska/KaxTrackEntryData.h,\r
+         trunk/libmatroska/matroska/KaxTrackVideo.h,\r
+         trunk/libmatroska/matroska/KaxTracks.h: Readded the code for DLL\r
+         builds on Windows.\r
+\r
+2004-01-17 16:33  robux4\r
+\r
+       * trunk/libmatroska/test/mux/test6.cpp,\r
+         trunk/libmatroska/test/mux/test8.cpp: Fix minor things in test\r
+         examples\r
+\r
+2004-01-17 13:38  robux4\r
+\r
+       * trunk/libmatroska/src/KaxTrackAudio.cpp: Fix a problem when\r
+         MATROSKA_VERSION is set to 2\r
+\r
+2004-01-15 20:47  cyrius\r
+\r
+       * trunk/libmatroska/src/KaxBlock.cpp: Fix for partial XipH lacing\r
+         reading\r
+\r
+2004-01-15 15:17  mosu\r
+\r
+       * trunk/libmatroska/ChangeLog: Updated the ChangeLog.\r
+\r
+2004-01-10 16:50  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/matroska/KaxBlockData.h,\r
+         trunk/libmatroska/matroska/KaxClusterData.h,\r
+         trunk/libmatroska/matroska/KaxConfig.h,\r
+         trunk/libmatroska/matroska/KaxCuesData.h,\r
+         trunk/libmatroska/matroska/KaxTrackAudio.h,\r
+         trunk/libmatroska/matroska/KaxTrackEntryData.h,\r
+         trunk/libmatroska/matroska/KaxTrackVideo.h,\r
+         trunk/libmatroska/src/KaxBlock.cpp,\r
+         trunk/libmatroska/src/KaxBlockData.cpp,\r
+         trunk/libmatroska/src/KaxCluster.cpp,\r
+         trunk/libmatroska/src/KaxClusterData.cpp,\r
+         trunk/libmatroska/src/KaxCuesData.cpp,\r
+         trunk/libmatroska/src/KaxTrackAudio.cpp,\r
+         trunk/libmatroska/src/KaxTrackEntryData.cpp,\r
+         trunk/libmatroska/src/KaxTrackVideo.cpp,\r
+         trunk/libmatroska/src/KaxTracks.cpp,\r
+         trunk/libmatroska/test/mux/test6.cpp,\r
+         trunk/libmatroska/test/mux/test8.cpp: Handle MATROSKA_VERSION to\r
+         enable/disable some future additions\r
+\r
+2004-01-10 15:57  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/matroska/KaxTrackAudio.h,\r
+         trunk/libmatroska/src/KaxBlock.cpp,\r
+         trunk/libmatroska/src/KaxTrackAudio.cpp: No more new elements for\r
+         sample accurate seeking\r
+\r
+2004-01-10 15:31  robux4\r
+\r
+       * trunk/libebml/ebml/Debug.h, trunk/libebml/ebml/EbmlBinary.h,\r
+         trunk/libebml/ebml/EbmlConfig.h,\r
+         trunk/libebml/ebml/EbmlContexts.h, trunk/libebml/ebml/EbmlCrc32.h,\r
+         trunk/libebml/ebml/EbmlDate.h, trunk/libebml/ebml/EbmlDummy.h,\r
+         trunk/libebml/ebml/EbmlElement.h, trunk/libebml/ebml/EbmlEndian.h,\r
+         trunk/libebml/ebml/EbmlFloat.h, trunk/libebml/ebml/EbmlHead.h,\r
+         trunk/libebml/ebml/EbmlId.h, trunk/libebml/ebml/EbmlMaster.h,\r
+         trunk/libebml/ebml/EbmlSInteger.h,\r
+         trunk/libebml/ebml/EbmlStream.h, trunk/libebml/ebml/EbmlString.h,\r
+         trunk/libebml/ebml/EbmlSubHead.h, trunk/libebml/ebml/EbmlTypes.h,\r
+         trunk/libebml/ebml/EbmlUInteger.h,\r
+         trunk/libebml/ebml/EbmlUnicodeString.h,\r
+         trunk/libebml/ebml/EbmlVersion.h, trunk/libebml/ebml/EbmlVoid.h,\r
+         trunk/libebml/ebml/IOCallback.h,\r
+         trunk/libebml/ebml/MemIOCallback.h,\r
+         trunk/libebml/ebml/StdIOCallback.h, trunk/libebml/src/Debug.cpp,\r
+         trunk/libebml/src/EbmlBinary.cpp,\r
+         trunk/libebml/src/EbmlContexts.cpp,\r
+         trunk/libebml/src/EbmlCrc32.cpp, trunk/libebml/src/EbmlDate.cpp,\r
+         trunk/libebml/src/EbmlDummy.cpp,\r
+         trunk/libebml/src/EbmlElement.cpp,\r
+         trunk/libebml/src/EbmlFloat.cpp, trunk/libebml/src/EbmlHead.cpp,\r
+         trunk/libebml/src/EbmlMaster.cpp,\r
+         trunk/libebml/src/EbmlSInteger.cpp,\r
+         trunk/libebml/src/EbmlStream.cpp,\r
+         trunk/libebml/src/EbmlString.cpp,\r
+         trunk/libebml/src/EbmlSubHead.cpp,\r
+         trunk/libebml/src/EbmlUInteger.cpp,\r
+         trunk/libebml/src/EbmlUnicodeString.cpp,\r
+         trunk/libebml/src/EbmlVersion.cpp, trunk/libebml/src/EbmlVoid.cpp,\r
+         trunk/libebml/src/IOCallback.cpp,\r
+         trunk/libebml/src/StdIOCallback.cpp,\r
+         trunk/libmatroska/matroska/FileKax.h,\r
+         trunk/libmatroska/matroska/KaxAttached.h,\r
+         trunk/libmatroska/matroska/KaxAttachments.h,\r
+         trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/matroska/KaxBlockData.h,\r
+         trunk/libmatroska/matroska/KaxChapters.h,\r
+         trunk/libmatroska/matroska/KaxCluster.h,\r
+         trunk/libmatroska/matroska/KaxClusterData.h,\r
+         trunk/libmatroska/matroska/KaxConfig.h,\r
+         trunk/libmatroska/matroska/KaxContentEncoding.h,\r
+         trunk/libmatroska/matroska/KaxContexts.h,\r
+         trunk/libmatroska/matroska/KaxCues.h,\r
+         trunk/libmatroska/matroska/KaxCuesData.h,\r
+         trunk/libmatroska/matroska/KaxInfo.h,\r
+         trunk/libmatroska/matroska/KaxInfoData.h,\r
+         trunk/libmatroska/matroska/KaxSeekHead.h,\r
+         trunk/libmatroska/matroska/KaxSegment.h,\r
+         trunk/libmatroska/matroska/KaxTag.h,\r
+         trunk/libmatroska/matroska/KaxTagMulti.h,\r
+         trunk/libmatroska/matroska/KaxTags.h,\r
+         trunk/libmatroska/matroska/KaxTrackAudio.h,\r
+         trunk/libmatroska/matroska/KaxTrackEntryData.h,\r
+         trunk/libmatroska/matroska/KaxTrackVideo.h,\r
+         trunk/libmatroska/matroska/KaxTracks.h,\r
+         trunk/libmatroska/matroska/KaxVersion.h,\r
+         trunk/libmatroska/src/KaxAttached.cpp,\r
+         trunk/libmatroska/src/KaxAttachments.cpp,\r
+         trunk/libmatroska/src/KaxBlock.cpp,\r
+         trunk/libmatroska/src/KaxBlockData.cpp,\r
+         trunk/libmatroska/src/KaxChapters.cpp,\r
+         trunk/libmatroska/src/KaxCluster.cpp,\r
+         trunk/libmatroska/src/KaxClusterData.cpp,\r
+         trunk/libmatroska/src/KaxContentEncoding.cpp,\r
+         trunk/libmatroska/src/KaxContexts.cpp,\r
+         trunk/libmatroska/src/KaxCues.cpp,\r
+         trunk/libmatroska/src/KaxCuesData.cpp,\r
+         trunk/libmatroska/src/KaxInfo.cpp,\r
+         trunk/libmatroska/src/KaxInfoData.cpp,\r
+         trunk/libmatroska/src/KaxSeekHead.cpp,\r
+         trunk/libmatroska/src/KaxSegment.cpp,\r
+         trunk/libmatroska/src/KaxTag.cpp,\r
+         trunk/libmatroska/src/KaxTagMulti.cpp,\r
+         trunk/libmatroska/src/KaxTags.cpp,\r
+         trunk/libmatroska/src/KaxTrackAudio.cpp,\r
+         trunk/libmatroska/src/KaxTrackEntryData.cpp,\r
+         trunk/libmatroska/src/KaxTrackVideo.cpp,\r
+         trunk/libmatroska/src/KaxTracks.cpp,\r
+         trunk/libmatroska/src/KaxVersion.cpp,\r
+         trunk/libmatroska/test/mux/test8.cpp,\r
+         trunk/libmatroska/test/tags/test9.cpp: Update the copyright years\r
+\r
+2004-01-10 15:19  robux4\r
+\r
+       * trunk/libmatroska/test/mux/test8.cpp: Fix a behaviour incompatible\r
+         with the checking of the max size\r
+\r
+2004-01-10 14:26  mosu\r
+\r
+       * trunk/libmatroska/matroska/FileKax.h,\r
+         trunk/libmatroska/matroska/KaxAttached.h,\r
+         trunk/libmatroska/matroska/KaxAttachments.h,\r
+         trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/matroska/KaxBlockData.h,\r
+         trunk/libmatroska/matroska/KaxChapters.h,\r
+         trunk/libmatroska/matroska/KaxCluster.h,\r
+         trunk/libmatroska/matroska/KaxClusterData.h,\r
+         trunk/libmatroska/matroska/KaxConfig.h,\r
+         trunk/libmatroska/matroska/KaxContentEncoding.h,\r
+         trunk/libmatroska/matroska/KaxContexts.h,\r
+         trunk/libmatroska/matroska/KaxCues.h,\r
+         trunk/libmatroska/matroska/KaxCuesData.h,\r
+         trunk/libmatroska/matroska/KaxInfo.h,\r
+         trunk/libmatroska/matroska/KaxInfoData.h,\r
+         trunk/libmatroska/matroska/KaxSeekHead.h,\r
+         trunk/libmatroska/matroska/KaxSegment.h,\r
+         trunk/libmatroska/matroska/KaxTag.h,\r
+         trunk/libmatroska/matroska/KaxTagMulti.h,\r
+         trunk/libmatroska/matroska/KaxTags.h,\r
+         trunk/libmatroska/matroska/KaxTrackAudio.h,\r
+         trunk/libmatroska/matroska/KaxTrackEntryData.h,\r
+         trunk/libmatroska/matroska/KaxTrackVideo.h,\r
+         trunk/libmatroska/matroska/KaxTracks.h: Added code that allows\r
+         libmatroska to be built as a DLL on Windows.\r
+\r
+2004-01-10 14:19  mosu\r
+\r
+       * trunk/libebml/make/mingw32/Makefile,\r
+         trunk/libmatroska/make/mingw32/Makefile: Updated the MinGW build\r
+         system.\r
+\r
+2004-01-06 22:29  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxVersion.h: Ooops, did I do something\r
+         wrong ?\r
+\r
+2004-01-06 22:15  robux4\r
+\r
+       * trunk/libebml/make/vc6/lib/static/libebml.dsp,\r
+         trunk/libmatroska/make/vc6/lib/static/libmatroska.dsp:\r
+         StdInclude.h doesn't exist anymore\r
+\r
+2004-01-06 22:05  robux4\r
+\r
+       * trunk/libmatroska/src/KaxAttached.cpp,\r
+         trunk/libmatroska/src/KaxAttachments.cpp,\r
+         trunk/libmatroska/src/KaxBlock.cpp,\r
+         trunk/libmatroska/src/KaxBlockData.cpp,\r
+         trunk/libmatroska/src/KaxChapters.cpp,\r
+         trunk/libmatroska/src/KaxCluster.cpp,\r
+         trunk/libmatroska/src/KaxClusterData.cpp,\r
+         trunk/libmatroska/src/KaxContentEncoding.cpp,\r
+         trunk/libmatroska/src/KaxContexts.cpp,\r
+         trunk/libmatroska/src/KaxCues.cpp,\r
+         trunk/libmatroska/src/KaxCuesData.cpp,\r
+         trunk/libmatroska/src/KaxInfo.cpp,\r
+         trunk/libmatroska/src/KaxInfoData.cpp,\r
+         trunk/libmatroska/src/KaxSeekHead.cpp,\r
+         trunk/libmatroska/src/KaxSegment.cpp,\r
+         trunk/libmatroska/src/KaxTag.cpp,\r
+         trunk/libmatroska/src/KaxTagMulti.cpp,\r
+         trunk/libmatroska/src/KaxTags.cpp,\r
+         trunk/libmatroska/src/KaxTrackAudio.cpp,\r
+         trunk/libmatroska/src/KaxTrackEntryData.cpp,\r
+         trunk/libmatroska/src/KaxTrackVideo.cpp,\r
+         trunk/libmatroska/src/KaxTracks.cpp,\r
+         trunk/libmatroska/src/KaxVersion.cpp,\r
+         trunk/libmatroska/src/StdInclude.h: No more StdInclude\r
+\r
+2004-01-06 21:02  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/matroska/KaxTrackAudio.h,\r
+         trunk/libmatroska/src/KaxBlock.cpp,\r
+         trunk/libmatroska/src/KaxTrackAudio.cpp: Add support for\r
+         SampleScale and BlockSamples\r
+\r
+2004-01-05 18:56  mosu\r
+\r
+       * trunk/libmatroska/debian/changelog: Updated the version from 0.6.2\r
+         to 0.6.3.\r
+\r
+2004-01-05 18:46  robux4\r
+\r
+       * trunk/libmatroska/src/KaxCuesData.cpp: Changed the ID of the new\r
+         CueBlockNumber\r
+\r
+2004-01-05 11:39  mosu\r
+\r
+       * trunk/libmatroska/matroska/KaxChapters.h,\r
+         trunk/libmatroska/src/KaxChapters.cpp: Fixes for wrong C++ syntax\r
+         ("not enough sleep" syndrome).\r
+\r
+2004-01-05 11:28  mosu\r
+\r
+       * trunk/libmatroska/make/linux/Makefile,\r
+         trunk/libmatroska/test/mux/test8.cpp: Fixed a couple of warnings.\r
+\r
+2004-01-05 11:28  mosu\r
+\r
+       * trunk/libmatroska/debian/control: Updated the dependencies.\r
+\r
+2004-01-04 21:39  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxChapters.h,\r
+         trunk/libmatroska/matroska/KaxVersion.h,\r
+         trunk/libmatroska/src/KaxChapters.cpp: Added 2 flags for Chapters\r
+\r
+2004-01-01 13:28  mosu\r
+\r
+       * trunk/libebml/debian/rules, trunk/libmatroska/debian/rules: Also\r
+         install the ChangeLog.\r
+\r
+2004-01-01 13:20  mosu\r
+\r
+       * trunk/libebml/ChangeLog, trunk/libmatroska/ChangeLog,\r
+         trunk/libmatroska/ChangeLog.txt: Added a ChangeLog.\r
+\r
+2003-12-30 10:00  mosu\r
+\r
+       * trunk/libmatroska/debian/changelog: Bumped version number.\r
+\r
+2003-12-28 16:20  mosu\r
+\r
+       * trunk/libmatroska/test/tags/test9.cpp: Added test cases for the\r
+         new simple tags.\r
+\r
+2003-12-28 16:20  mosu\r
+\r
+       * trunk/libmatroska/src/KaxTag.cpp: Made KaxTagSimple a possible\r
+         child for itself - otherwise reading nested tags does not work.\r
+\r
+2003-12-28 16:07  mosu\r
+\r
+       * trunk/libmatroska/matroska/KaxVersion.h: Updated the version\r
+         number from 0.6.1 to 0.6.2.\r
+\r
+2003-12-28 01:08  jcsston\r
+\r
+       * trunk/libmatroska/matroska/KaxTag.h,\r
+         trunk/libmatroska/src/KaxTag.cpp: The new Simple Tagging system\r
+\r
+2003-12-03 16:17  cyrius\r
+\r
+       * trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/src/KaxBlock.cpp: Fixes\r
+\r
+2003-11-16 10:58  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/src/KaxBlock.cpp: Added the possibility to\r
+         retrieve the position/size of each frame in the data stream\r
+         (usefull for people using SCOPE_PARTIAL_DATA and then only reading\r
+         the data they need)\r
+\r
+2003-11-16 09:36  robux4\r
+\r
+       * trunk/libmatroska/src/KaxBlock.cpp: Fixed a serious bug in Block\r
+         reading\r
+\r
+2003-11-03 22:17  robux4\r
+\r
+       * trunk/libebml/ebml/EbmlBinary.h, trunk/libebml/ebml/EbmlCrc32.h,\r
+         trunk/libebml/ebml/EbmlDate.h, trunk/libebml/ebml/EbmlElement.h,\r
+         trunk/libebml/ebml/EbmlFloat.h, trunk/libebml/ebml/EbmlMaster.h,\r
+         trunk/libebml/ebml/EbmlSInteger.h,\r
+         trunk/libebml/ebml/EbmlString.h,\r
+         trunk/libebml/ebml/EbmlUInteger.h,\r
+         trunk/libebml/ebml/EbmlUnicodeString.h,\r
+         trunk/libebml/src/EbmlBinary.cpp, trunk/libebml/src/EbmlCrc32.cpp,\r
+         trunk/libebml/src/EbmlDate.cpp, trunk/libebml/src/EbmlElement.cpp,\r
+         trunk/libebml/src/EbmlFloat.cpp, trunk/libebml/src/EbmlMaster.cpp,\r
+         trunk/libebml/src/EbmlSInteger.cpp,\r
+         trunk/libebml/src/EbmlString.cpp,\r
+         trunk/libebml/src/EbmlUInteger.cpp,\r
+         trunk/libebml/src/EbmlUnicodeString.cpp,\r
+         trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/src/KaxBlock.cpp,\r
+         trunk/libmatroska/test/mux/test8.cpp: Better handling of scope\r
+         reading\r
+\r
+2003-10-31 12:34  mosu\r
+\r
+       * trunk/libmatroska/matroska/KaxBlock.h: Added default value for\r
+         ReadData.\r
+\r
+2003-10-31 08:59  mosu\r
+\r
+       * trunk/libmatroska/matroska/KaxAttached.h,\r
+         trunk/libmatroska/matroska/KaxAttachments.h,\r
+         trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/matroska/KaxBlockData.h,\r
+         trunk/libmatroska/matroska/KaxChapters.h,\r
+         trunk/libmatroska/matroska/KaxCluster.h,\r
+         trunk/libmatroska/matroska/KaxClusterData.h,\r
+         trunk/libmatroska/matroska/KaxCues.h,\r
+         trunk/libmatroska/matroska/KaxCuesData.h,\r
+         trunk/libmatroska/matroska/KaxInfo.h,\r
+         trunk/libmatroska/matroska/KaxInfoData.h,\r
+         trunk/libmatroska/matroska/KaxSeekHead.h,\r
+         trunk/libmatroska/matroska/KaxSegment.h,\r
+         trunk/libmatroska/matroska/KaxTag.h,\r
+         trunk/libmatroska/matroska/KaxTagMulti.h,\r
+         trunk/libmatroska/matroska/KaxTags.h,\r
+         trunk/libmatroska/matroska/KaxTrackAudio.h,\r
+         trunk/libmatroska/matroska/KaxTrackEntryData.h,\r
+         trunk/libmatroska/matroska/KaxTrackVideo.h,\r
+         trunk/libmatroska/matroska/KaxTracks.h,\r
+         trunk/libmatroska/src/KaxCluster.cpp,\r
+         trunk/libmatroska/src/KaxSegment.cpp: Fixed the new line/carriage\r
+         return mess.\r
+\r
+2003-10-31 08:55  mosu\r
+\r
+       * trunk/libmatroska/debian/control: Updated dependency to libebml\r
+         0.6.2.\r
+\r
+2003-10-30 23:07  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/src/KaxBlock.cpp,\r
+         trunk/libmatroska/test/mux/test8.cpp: Allow KaxBlock not to be\r
+         fully read\r
+\r
+2003-10-30 12:56  mosu\r
+\r
+       * trunk/libmatroska/matroska/KaxBlock.h: Set LACING_AUTO as the\r
+         default value for the AddFrame() functions. The re-establishes API\r
+         compatibility with < 0.6.0.\r
+\r
+2003-10-30 12:50  mosu\r
+\r
+       * trunk/libmatroska/debian/changelog,\r
+         trunk/libmatroska/matroska/KaxVersion.h: Updated version number to\r
+         0.6.1.\r
+\r
+2003-10-28 22:09  mosu\r
+\r
+       * trunk/libmatroska/debian/changelog: New version number.\r
+\r
+2003-10-28 20:59  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxCluster.h,\r
+         trunk/libmatroska/matroska/KaxVersion.h: Update the version\r
+         number, LACING_AUTO is the default value\r
+\r
+2003-10-28 20:55  robux4\r
+\r
+       * trunk/libebml/ebml/EbmlElement.h,\r
+         trunk/libebml/src/EbmlElement.cpp,\r
+         trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/src/KaxBlock.cpp: EBML-size handling is more\r
+         general and handle the Unknown Size\r
+\r
+2003-10-25 15:09  mosu\r
+\r
+       * trunk/libebml/make/mingw32/Makefile,\r
+         trunk/libmatroska/make/mingw32/Makefile: Support the same targest\r
+         as the Linux Makefile.\r
+\r
+2003-10-24 22:05  mosu\r
+\r
+       * trunk/libmatroska/src/KaxBlock.cpp: Fixed an off-by-one error.\r
+         Fixed the building of the size list for the lacing. Fixed some of\r
+         my own mistakes introduced in the last revision resulting in wrong\r
+         data being read for Ebml lacing.\r
+\r
+2003-10-24 19:22  mosu\r
+\r
+       * trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/src/KaxBlock.cpp: Implemented LACING_AUTO:\r
+         automatic use of the best lacing method (Xiph, Ebml or fixed).\r
+\r
+2003-10-24 16:08  mosu\r
+\r
+       * trunk/libmatroska/src/KaxBlock.cpp: Reversed my so-called "fix"\r
+         which only broke things.\r
+\r
+2003-10-24 15:52  mosu\r
+\r
+       * trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/src/KaxBlock.cpp: Fixed some warnings. Added\r
+         some safety fallbacks instead of undefined behaviour for\r
+         unimplemented lacing schemes (fixes some more warnings).\r
+\r
+2003-10-24 08:40  jcsston\r
+\r
+       * trunk/libmatroska/make/vc7/lib/static/libmatroska.v71.vcproj,\r
+         trunk/libmatroska/make/vc7/lib/static/libmatroska.vcproj: Missing\r
+         KaxContentEncoding.cpp\r
+\r
+2003-10-22 14:18  pamel\r
+\r
+       * trunk/libebml/ebml/EbmlElement.h,\r
+         trunk/libebml/src/EbmlElement.cpp,\r
+         trunk/libmatroska/matroska/KaxTypes.h,\r
+         trunk/libmatroska/src/KaxBlock.cpp: New lacing modes reading.\r
+\r
+2003-10-21 21:27  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/matroska/KaxCluster.h,\r
+         trunk/libmatroska/matroska/KaxTypes.h,\r
+         trunk/libmatroska/src/KaxBlock.cpp,\r
+         trunk/libmatroska/src/KaxCluster.cpp,\r
+         trunk/libmatroska/test/mux/test6.cpp: New lacing modes writing\r
+\r
+2003-10-21 19:42  robux4\r
+\r
+       * trunk/libmatroska/make/vc6/lib/static/libmatroska.dsp,\r
+         trunk/libmatroska/make/vc7/lib/static/libmatroska.v71.vcproj,\r
+         trunk/libmatroska/make/vc7/lib/static/libmatroska.vcproj: Fix\r
+         windows makefiles for the encoding settings\r
+\r
+2003-10-21 18:22  mosu\r
+\r
+       * trunk/doc/website/technical/specs/index.html,\r
+         trunk/libmatroska/matroska/KaxContentEncoding.h,\r
+         trunk/libmatroska/src/KaxContentEncoding.cpp,\r
+         trunk/libmatroska/src/KaxTracks.cpp,\r
+         trunk/libmatroska/test/mux/test6.cpp: Moved the content encoding\r
+         elements under a new parent, KaxContentEncodings.\r
+\r
+2003-10-19 16:09  mosu\r
+\r
+       * trunk/libmatroska/matroska/KaxContentEncoding.h: Changing default\r
+         value to match the specs.\r
+\r
+2003-10-19 15:23  mosu\r
+\r
+       * trunk/libmatroska/ChangeLog.txt: Updated ChangeLog.\r
+\r
+2003-10-19 15:22  mosu\r
+\r
+       * trunk/libmatroska/make/mingw32/Makefile,\r
+         trunk/libmatroska/matroska/KaxContentEncoding.h,\r
+         trunk/libmatroska/matroska/KaxVersion.h,\r
+         trunk/libmatroska/src/KaxContentEncoding.cpp,\r
+         trunk/libmatroska/src/KaxTracks.cpp,\r
+         trunk/libmatroska/test/mux/test6.cpp: Added the new track elements\r
+         for content encoding (compression/encryption).\r
+\r
+2003-10-19 15:17  mosu\r
+\r
+       * trunk/libmatroska/make/linux/.cvsignore: Added the resulting test\r
+         binaries to the CVS ignore list.\r
+\r
+2003-10-19 15:11  mosu\r
+\r
+       * trunk/libmatroska/ChangeLog.txt: Added a ChangeLog (generated\r
+         automatically from the CVS log messages, but should be updated by\r
+         ourselves).\r
+\r
+2003-10-15 20:34  mosu\r
+\r
+       * trunk/libebml/make/linux/Makefile,\r
+         trunk/libmatroska/make/linux/Makefile: Removed -pedantic due to\r
+         problems on FreeBSD.\r
+\r
+2003-09-17 20:22  mosu\r
+\r
+       * trunk/libmatroska/debian/changelog,\r
+         trunk/libmatroska/debian/control: Updated Debian dependencies.\r
+\r
+2003-09-14 08:20  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxVersion.h: New version to reflect\r
+         additions\r
+\r
+2003-09-14 08:19  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/matroska/KaxCluster.h,\r
+         trunk/libmatroska/matroska/KaxSegment.h,\r
+         trunk/libmatroska/src/KaxBlock.cpp,\r
+         trunk/libmatroska/src/KaxCluster.cpp,\r
+         trunk/libmatroska/src/KaxSegment.cpp: Add the possibility to Clone\r
+         Blocks and correct the parent when needed\r
+\r
+2003-09-13 20:40  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/src/KaxBlock.cpp: Added a Clone() method to the\r
+         Blocked data (impossible for now)\r
+\r
+2003-09-13 17:48  robux4\r
+\r
+       * trunk/libebml/ebml/EbmlHead.h, trunk/libebml/ebml/EbmlSubHead.h,\r
+         trunk/libmatroska/matroska/KaxAttached.h,\r
+         trunk/libmatroska/matroska/KaxAttachments.h,\r
+         trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/matroska/KaxBlockData.h,\r
+         trunk/libmatroska/matroska/KaxChapters.h,\r
+         trunk/libmatroska/matroska/KaxCluster.h,\r
+         trunk/libmatroska/matroska/KaxClusterData.h,\r
+         trunk/libmatroska/matroska/KaxCues.h,\r
+         trunk/libmatroska/matroska/KaxCuesData.h,\r
+         trunk/libmatroska/matroska/KaxInfo.h,\r
+         trunk/libmatroska/matroska/KaxInfoData.h,\r
+         trunk/libmatroska/matroska/KaxSeekHead.h,\r
+         trunk/libmatroska/matroska/KaxSegment.h,\r
+         trunk/libmatroska/matroska/KaxTag.h,\r
+         trunk/libmatroska/matroska/KaxTagMulti.h,\r
+         trunk/libmatroska/matroska/KaxTags.h,\r
+         trunk/libmatroska/matroska/KaxTrackAudio.h,\r
+         trunk/libmatroska/matroska/KaxTrackEntryData.h,\r
+         trunk/libmatroska/matroska/KaxTrackVideo.h,\r
+         trunk/libmatroska/matroska/KaxTracks.h,\r
+         trunk/libmatroska/test/mux/test6.cpp: Added a Clone() method and a\r
+         IsMaster() method\r
+\r
+2003-09-12 16:57  mosu\r
+\r
+       * trunk/libmatroska/src/KaxTrackEntryData.cpp: Fixed wrong length\r
+         for KaxTrackTimecodeScale_TheId.\r
+\r
+2003-09-01 15:37  jcsston\r
+\r
+       * trunk/libmatroska/matroska/KaxBlockData.h,\r
+         trunk/libmatroska/src/KaxBlockData.cpp: Added a protected method\r
+         to update the reference timecode\r
+\r
+2003-09-01 11:43  mosu\r
+\r
+       * trunk/libmatroska/debian/changelog: New version number.\r
+\r
+2003-08-21 17:25  mosu\r
+\r
+       * trunk/libmatroska/matroska/KaxVersion.h: Bumped version number to\r
+         make conditional compilation possible for newly added elements\r
+         (like KaxAudioOutputSamplingFreq).\r
+\r
+2003-08-20 03:36  spyder\r
+\r
+       * trunk/libmatroska/src/KaxTrackAudio.cpp: Fixed a small coding\r
+         error where an array of 4 objects was initialized with 5 values.\r
+\r
+2003-08-08 17:42  robux4\r
+\r
+       * trunk/doc/website/technical/specs/index.html,\r
+         trunk/libmatroska/matroska/KaxTrackAudio.h,\r
+         trunk/libmatroska/src/KaxTrackAudio.cpp: New Output sampling\r
+         frequency parameter\r
+\r
+2003-08-04 07:36  robux4\r
+\r
+       * trunk/libebml/ebml/EbmlVersion.h,\r
+         trunk/libmatroska/matroska/KaxVersion.h: Remove some old TODO\r
+\r
+2003-08-01 19:21  robux4\r
+\r
+       * trunk/libmatroska/make/Doxyfile: Version 0.5.0 of the lib\r
+\r
+2003-08-01 12:03  robux4\r
+\r
+       * trunk/libebml/make/vc7/lib/libebml.v71.vcproj,\r
+         trunk/libmatroska/make/vc7/lib/static/libmatroska.v71.vcproj,\r
+         trunk/mkxds/mkxds.v71.sln, trunk/mkxds/mkxds.v71.vcproj: Added\r
+         VC7.1 (VS.Net 2003) projects\r
+\r
+2003-08-01 02:26  jcsston\r
+\r
+       * trunk/libmatroska/make/Doxyfile: Updated to new source tree\r
+         structure\r
+\r
+2003-07-31 19:42  robux4\r
+\r
+       * trunk/libebml/ebml/EbmlCrc32.h, trunk/libebml/ebml/EbmlDate.h,\r
+         trunk/libebml/ebml/EbmlSInteger.h,\r
+         trunk/libebml/ebml/EbmlUInteger.h, trunk/libebml/ebml/EbmlVoid.h,\r
+         trunk/libebml/src/EbmlCrc32.cpp,\r
+         trunk/libebml/src/EbmlSInteger.cpp,\r
+         trunk/libebml/src/EbmlVoid.cpp,\r
+         trunk/libebml/src/platform/win32/WinIOCallback.cpp,\r
+         trunk/libmatroska/src/KaxBlock.cpp: Some fixes for better casting\r
+         / type checking\r
+\r
+2003-07-30 08:01  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/matroska/KaxBlockData.h,\r
+         trunk/libmatroska/src/KaxBlock.cpp,\r
+         trunk/libmatroska/src/KaxBlockData.cpp: UpdateSize actually\r
+         overrides the default one\r
+\r
+2003-07-29 21:43  robux4\r
+\r
+       * trunk/libebml/ebml/EbmlBinary.h, trunk/libebml/ebml/EbmlCrc32.h,\r
+         trunk/libebml/ebml/EbmlDate.h, trunk/libebml/ebml/EbmlElement.h,\r
+         trunk/libebml/ebml/EbmlFloat.h, trunk/libebml/ebml/EbmlMaster.h,\r
+         trunk/libebml/ebml/EbmlSInteger.h,\r
+         trunk/libebml/ebml/EbmlString.h,\r
+         trunk/libebml/ebml/EbmlUInteger.h,\r
+         trunk/libebml/ebml/EbmlUnicodeString.h,\r
+         trunk/libebml/ebml/EbmlVoid.h, trunk/libebml/src/EbmlBinary.cpp,\r
+         trunk/libebml/src/EbmlCrc32.cpp, trunk/libebml/src/EbmlDate.cpp,\r
+         trunk/libebml/src/EbmlElement.cpp,\r
+         trunk/libebml/src/EbmlFloat.cpp, trunk/libebml/src/EbmlMaster.cpp,\r
+         trunk/libebml/src/EbmlSInteger.cpp,\r
+         trunk/libebml/src/EbmlString.cpp,\r
+         trunk/libebml/src/EbmlUInteger.cpp,\r
+         trunk/libebml/src/EbmlUnicodeString.cpp,\r
+         trunk/libebml/src/EbmlVoid.cpp,\r
+         trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/matroska/KaxTrackVideo.h,\r
+         trunk/libmatroska/src/KaxBlock.cpp,\r
+         trunk/libmatroska/src/KaxTrackVideo.cpp: Checksum now doesn't care\r
+         about mandatory data\r
+\r
+2003-07-28 23:04  robux4\r
+\r
+       * trunk/libmatroska/src/KaxChapters.cpp: Chapter end time is not\r
+         mandatory\r
+\r
+2003-07-28 22:55  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxTag.h: Fix the size of the video\r
+         genre\r
+\r
+2003-07-28 08:49  mosu\r
+\r
+       * trunk/libebml/debian/changelog,\r
+         trunk/libmatroska/debian/changelog,\r
+         trunk/libmatroska/debian/control: Updated version information.\r
+\r
+2003-07-27 20:28  mosu\r
+\r
+       * trunk/libebml/make/mingw32/Makefile,\r
+         trunk/libmatroska/make/mingw32/Makefile: Necessary fixes for\r
+         compilation with mingw.\r
+\r
+2003-07-25 19:25  robux4\r
+\r
+       * trunk/doc/website/technical/specs/index.html,\r
+         trunk/doc/website/technical/specs/tagging/index.html,\r
+         trunk/doc/website/technical/specs/tagging/multi/multititles.html,\r
+         trunk/libmatroska/src/KaxTag.cpp,\r
+         trunk/libmatroska/src/KaxTagMulti.cpp: Fixes some IDs\r
+\r
+2003-07-24 17:05  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxTagMulti.h,\r
+         trunk/libmatroska/src/KaxTagMulti.cpp: New LegalContent element +\r
+         fixed some mandatory values\r
+\r
+2003-07-19 20:31  robux4\r
+\r
+       * trunk/libmatroska/matroska/KaxAttached.h,\r
+         trunk/libmatroska/matroska/KaxTagMulti.h,\r
+         trunk/libmatroska/matroska/KaxTrackEntryData.h,\r
+         trunk/libmatroska/src/KaxAttached.cpp,\r
+         trunk/libmatroska/src/KaxTag.cpp,\r
+         trunk/libmatroska/src/KaxTagMulti.cpp: Added attachment links with\r
+         tags, fix a bad default value\r
+\r
+2003-07-17 09:48  mosu\r
+\r
+       * trunk/libebml/make/linux/Makefile,\r
+         trunk/libmatroska/make/linux/Makefile: Proper Makefile that also\r
+         installs the header files.\r
+\r
+2003-07-16 16:31  mosu\r
+\r
+       * trunk/libmatroska/matroska/KaxAttachments.h,\r
+         trunk/libmatroska/matroska/KaxContexts.h,\r
+         trunk/libmatroska/src/KaxAttached.cpp,\r
+         trunk/libmatroska/src/KaxAttachments.cpp,\r
+         trunk/libmatroska/src/KaxSegment.cpp,\r
+         trunk/libmatroska/test/ebml/test00.cpp: Fixed the following\r
+         spelling error: Attachements --> Attachments\r
+\r
+2003-07-16 16:21  mosu\r
+\r
+       * trunk/libebml/make/linux/Makefile,\r
+         trunk/libmatroska/make/linux/Makefile: Removed old stuff.\r
+\r
+2003-07-16 15:46  robux4\r
+\r
+       * trunk/libmatroska, trunk/libmatroska/LICENSE.GPL,\r
+         trunk/libmatroska/LICENSE.QPL, trunk/libmatroska/debian,\r
+         trunk/libmatroska/debian/changelog,\r
+         trunk/libmatroska/debian/control,\r
+         trunk/libmatroska/debian/copyright, trunk/libmatroska/debian/dirs,\r
+         trunk/libmatroska/debian/docs,\r
+         trunk/libmatroska/debian/libmatroska-dev.dirs,\r
+         trunk/libmatroska/debian/libmatroska-dev.files,\r
+         trunk/libmatroska/debian/rules, trunk/libmatroska/make,\r
+         trunk/libmatroska/make/Doxyfile, trunk/libmatroska/make/beos,\r
+         trunk/libmatroska/make/beos/Makefile,\r
+         trunk/libmatroska/make/cygwin,\r
+         trunk/libmatroska/make/cygwin/Makefile,\r
+         trunk/libmatroska/make/cygwin/Makefile.rule,\r
+         trunk/libmatroska/make/linux,\r
+         trunk/libmatroska/make/linux/Makefile,\r
+         trunk/libmatroska/make/linux/Makefile.rule,\r
+         trunk/libmatroska/make/macosx,\r
+         trunk/libmatroska/make/macosx/macosx.pbproj,\r
+         trunk/libmatroska/make/macosx/macosx.pbproj/project.pbxproj,\r
+         trunk/libmatroska/make/makedoc.bat,\r
+         trunk/libmatroska/make/makedoc.sh, trunk/libmatroska/make/mingw32,\r
+         trunk/libmatroska/make/mingw32/Makefile,\r
+         trunk/libmatroska/make/mingw32/libmatroska.dev,\r
+         trunk/libmatroska/make/mingw32/test,\r
+         trunk/libmatroska/make/mingw32/test/Makefile,\r
+         trunk/libmatroska/make/mingw32/test/test6.dev,\r
+         trunk/libmatroska/make/mingw32/test/test8.dev,\r
+         trunk/libmatroska/make/vc6, trunk/libmatroska/make/vc6/lib,\r
+         trunk/libmatroska/make/vc6/lib/static,\r
+         trunk/libmatroska/make/vc6/lib/static/libmatroska.dsp,\r
+         trunk/libmatroska/make/vc6/test,\r
+         trunk/libmatroska/make/vc6/test/test0.dsp,\r
+         trunk/libmatroska/make/vc6/test/test00.dsp,\r
+         trunk/libmatroska/make/vc6/test/test1.dsp,\r
+         trunk/libmatroska/make/vc6/test/test2.dsp,\r
+         trunk/libmatroska/make/vc6/test/test3.dsp,\r
+         trunk/libmatroska/make/vc6/test/test4.dsp,\r
+         trunk/libmatroska/make/vc6/test/test5.dsp,\r
+         trunk/libmatroska/make/vc6/test/test6.dsp,\r
+         trunk/libmatroska/make/vc6/test/test6c.dsp,\r
+         trunk/libmatroska/make/vc6/test/test7.dsp,\r
+         trunk/libmatroska/make/vc6/test/test8.dsp,\r
+         trunk/libmatroska/make/vc6/test/test8c.dsp,\r
+         trunk/libmatroska/make/vc6/test/test9.dsp,\r
+         trunk/libmatroska/make/vc6/vc6.dsw, trunk/libmatroska/make/vc7,\r
+         trunk/libmatroska/make/vc7/lib,\r
+         trunk/libmatroska/make/vc7/lib/static,\r
+         trunk/libmatroska/make/vc7/lib/static/libmatroska.vcproj,\r
+         trunk/libmatroska/make/vc7/test,\r
+         trunk/libmatroska/make/vc7/test/test0.vcproj,\r
+         trunk/libmatroska/make/vc7/test/test00.vcproj,\r
+         trunk/libmatroska/make/vc7/test/test6.vcproj,\r
+         trunk/libmatroska/make/vc7/test/test8.vcproj,\r
+         trunk/libmatroska/make/vc7/test/test9.vcproj,\r
+         trunk/libmatroska/make/vc7/vc7.sln, trunk/libmatroska/matroska,\r
+         trunk/libmatroska/matroska/FileKax.h,\r
+         trunk/libmatroska/matroska/KaxAttached.h,\r
+         trunk/libmatroska/matroska/KaxAttachments.h,\r
+         trunk/libmatroska/matroska/KaxBlock.h,\r
+         trunk/libmatroska/matroska/KaxBlockData.h,\r
+         trunk/libmatroska/matroska/KaxChapters.h,\r
+         trunk/libmatroska/matroska/KaxCluster.h,\r
+         trunk/libmatroska/matroska/KaxClusterData.h,\r
+         trunk/libmatroska/matroska/KaxConfig.h,\r
+         trunk/libmatroska/matroska/KaxContexts.h,\r
+         trunk/libmatroska/matroska/KaxCues.h,\r
+         trunk/libmatroska/matroska/KaxCuesData.h,\r
+         trunk/libmatroska/matroska/KaxInfo.h,\r
+         trunk/libmatroska/matroska/KaxInfoData.h,\r
+         trunk/libmatroska/matroska/KaxSeekHead.h,\r
+         trunk/libmatroska/matroska/KaxSegment.h,\r
+         trunk/libmatroska/matroska/KaxTag.h,\r
+         trunk/libmatroska/matroska/KaxTagMulti.h,\r
+         trunk/libmatroska/matroska/KaxTags.h,\r
+         trunk/libmatroska/matroska/KaxTrackAudio.h,\r
+         trunk/libmatroska/matroska/KaxTrackEntryData.h,\r
+         trunk/libmatroska/matroska/KaxTrackVideo.h,\r
+         trunk/libmatroska/matroska/KaxTracks.h,\r
+         trunk/libmatroska/matroska/KaxTypes.h,\r
+         trunk/libmatroska/matroska/KaxVersion.h,\r
+         trunk/libmatroska/matroska/c,\r
+         trunk/libmatroska/matroska/c/libmatroska.h,\r
+         trunk/libmatroska/matroska/c/libmatroska_t.h,\r
+         trunk/libmatroska/src, trunk/libmatroska/src/FileKax.cpp,\r
+         trunk/libmatroska/src/KaxAttached.cpp,\r
+         trunk/libmatroska/src/KaxAttachments.cpp,\r
+         trunk/libmatroska/src/KaxBlock.cpp,\r
+         trunk/libmatroska/src/KaxBlockData.cpp,\r
+         trunk/libmatroska/src/KaxChapters.cpp,\r
+         trunk/libmatroska/src/KaxCluster.cpp,\r
+         trunk/libmatroska/src/KaxClusterData.cpp,\r
+         trunk/libmatroska/src/KaxContexts.cpp,\r
+         trunk/libmatroska/src/KaxCues.cpp,\r
+         trunk/libmatroska/src/KaxCuesData.cpp,\r
+         trunk/libmatroska/src/KaxInfo.cpp,\r
+         trunk/libmatroska/src/KaxInfoData.cpp,\r
+         trunk/libmatroska/src/KaxSeekHead.cpp,\r
+         trunk/libmatroska/src/KaxSegment.cpp,\r
+         trunk/libmatroska/src/KaxTag.cpp,\r
+         trunk/libmatroska/src/KaxTagMulti.cpp,\r
+         trunk/libmatroska/src/KaxTags.cpp,\r
+         trunk/libmatroska/src/KaxTrackAudio.cpp,\r
+         trunk/libmatroska/src/KaxTrackEntryData.cpp,\r
+         trunk/libmatroska/src/KaxTrackVideo.cpp,\r
+         trunk/libmatroska/src/KaxTracks.cpp,\r
+         trunk/libmatroska/src/KaxVersion.cpp,\r
+         trunk/libmatroska/src/StdInclude.h, trunk/libmatroska/test,\r
+         trunk/libmatroska/test/Makefile, trunk/libmatroska/test/ebml,\r
+         trunk/libmatroska/test/ebml/Makefile,\r
+         trunk/libmatroska/test/ebml/test0.cpp,\r
+         trunk/libmatroska/test/ebml/test00.cpp,\r
+         trunk/libmatroska/test/mux, trunk/libmatroska/test/mux/test6.cpp,\r
+         trunk/libmatroska/test/mux/test8.cpp, trunk/libmatroska/test/tags,\r
+         trunk/libmatroska/test/tags/test9.cpp,\r
+         trunk/libmatroska/test/utf8,\r
+         trunk/libmatroska/test/utf8/test5.cpp: Initial CVS version after\r
+         the crash\r
+\r
diff --git a/LICENSE.LGPL b/LICENSE.LGPL
new file mode 100644 (file)
index 0000000..cbee875
--- /dev/null
@@ -0,0 +1,504 @@
+                 GNU LESSER GENERAL PUBLIC LICENSE\r
+                      Version 2.1, February 1999\r
+\r
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.\r
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
+ Everyone is permitted to copy and distribute verbatim copies\r
+ of this license document, but changing it is not allowed.\r
+\r
+[This is the first released version of the Lesser GPL.  It also counts\r
+ as the successor of the GNU Library Public License, version 2, hence\r
+ the version number 2.1.]\r
+\r
+                           Preamble\r
+\r
+  The licenses for most software are designed to take away your\r
+freedom to share and change it.  By contrast, the GNU General Public\r
+Licenses are intended to guarantee your freedom to share and change\r
+free software--to make sure the software is free for all its users.\r
+\r
+  This license, the Lesser General Public License, applies to some\r
+specially designated software packages--typically libraries--of the\r
+Free Software Foundation and other authors who decide to use it.  You\r
+can use it too, but we suggest you first think carefully about whether\r
+this license or the ordinary General Public License is the better\r
+strategy to use in any particular case, based on the explanations below.\r
+\r
+  When we speak of free software, we are referring to freedom of use,\r
+not price.  Our General Public Licenses are designed to make sure that\r
+you have the freedom to distribute copies of free software (and charge\r
+for this service if you wish); that you receive source code or can get\r
+it if you want it; that you can change the software and use pieces of\r
+it in new free programs; and that you are informed that you can do\r
+these things.\r
+\r
+  To protect your rights, we need to make restrictions that forbid\r
+distributors to deny you these rights or to ask you to surrender these\r
+rights.  These restrictions translate to certain responsibilities for\r
+you if you distribute copies of the library or if you modify it.\r
+\r
+  For example, if you distribute copies of the library, whether gratis\r
+or for a fee, you must give the recipients all the rights that we gave\r
+you.  You must make sure that they, too, receive or can get the source\r
+code.  If you link other code with the library, you must provide\r
+complete object files to the recipients, so that they can relink them\r
+with the library after making changes to the library and recompiling\r
+it.  And you must show them these terms so they know their rights.\r
+\r
+  We protect your rights with a two-step method: (1) we copyright the\r
+library, and (2) we offer you this license, which gives you legal\r
+permission to copy, distribute and/or modify the library.\r
+\r
+  To protect each distributor, we want to make it very clear that\r
+there is no warranty for the free library.  Also, if the library is\r
+modified by someone else and passed on, the recipients should know\r
+that what they have is not the original version, so that the original\r
+author's reputation will not be affected by problems that might be\r
+introduced by others.\r
+\f\r
+  Finally, software patents pose a constant threat to the existence of\r
+any free program.  We wish to make sure that a company cannot\r
+effectively restrict the users of a free program by obtaining a\r
+restrictive license from a patent holder.  Therefore, we insist that\r
+any patent license obtained for a version of the library must be\r
+consistent with the full freedom of use specified in this license.\r
+\r
+  Most GNU software, including some libraries, is covered by the\r
+ordinary GNU General Public License.  This license, the GNU Lesser\r
+General Public License, applies to certain designated libraries, and\r
+is quite different from the ordinary General Public License.  We use\r
+this license for certain libraries in order to permit linking those\r
+libraries into non-free programs.\r
+\r
+  When a program is linked with a library, whether statically or using\r
+a shared library, the combination of the two is legally speaking a\r
+combined work, a derivative of the original library.  The ordinary\r
+General Public License therefore permits such linking only if the\r
+entire combination fits its criteria of freedom.  The Lesser General\r
+Public License permits more lax criteria for linking other code with\r
+the library.\r
+\r
+  We call this license the "Lesser" General Public License because it\r
+does Less to protect the user's freedom than the ordinary General\r
+Public License.  It also provides other free software developers Less\r
+of an advantage over competing non-free programs.  These disadvantages\r
+are the reason we use the ordinary General Public License for many\r
+libraries.  However, the Lesser license provides advantages in certain\r
+special circumstances.\r
+\r
+  For example, on rare occasions, there may be a special need to\r
+encourage the widest possible use of a certain library, so that it becomes\r
+a de-facto standard.  To achieve this, non-free programs must be\r
+allowed to use the library.  A more frequent case is that a free\r
+library does the same job as widely used non-free libraries.  In this\r
+case, there is little to gain by limiting the free library to free\r
+software only, so we use the Lesser General Public License.\r
+\r
+  In other cases, permission to use a particular library in non-free\r
+programs enables a greater number of people to use a large body of\r
+free software.  For example, permission to use the GNU C Library in\r
+non-free programs enables many more people to use the whole GNU\r
+operating system, as well as its variant, the GNU/Linux operating\r
+system.\r
+\r
+  Although the Lesser General Public License is Less protective of the\r
+users' freedom, it does ensure that the user of a program that is\r
+linked with the Library has the freedom and the wherewithal to run\r
+that program using a modified version of the Library.\r
+\r
+  The precise terms and conditions for copying, distribution and\r
+modification follow.  Pay close attention to the difference between a\r
+"work based on the library" and a "work that uses the library".  The\r
+former contains code derived from the library, whereas the latter must\r
+be combined with the library in order to run.\r
+\f\r
+                 GNU LESSER GENERAL PUBLIC LICENSE\r
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\r
+\r
+  0. This License Agreement applies to any software library or other\r
+program which contains a notice placed by the copyright holder or\r
+other authorized party saying it may be distributed under the terms of\r
+this Lesser General Public License (also called "this License").\r
+Each licensee is addressed as "you".\r
+\r
+  A "library" means a collection of software functions and/or data\r
+prepared so as to be conveniently linked with application programs\r
+(which use some of those functions and data) to form executables.\r
+\r
+  The "Library", below, refers to any such software library or work\r
+which has been distributed under these terms.  A "work based on the\r
+Library" means either the Library or any derivative work under\r
+copyright law: that is to say, a work containing the Library or a\r
+portion of it, either verbatim or with modifications and/or translated\r
+straightforwardly into another language.  (Hereinafter, translation is\r
+included without limitation in the term "modification".)\r
+\r
+  "Source code" for a work means the preferred form of the work for\r
+making modifications to it.  For a library, complete source code means\r
+all the source code for all modules it contains, plus any associated\r
+interface definition files, plus the scripts used to control compilation\r
+and installation of the library.\r
+\r
+  Activities other than copying, distribution and modification are not\r
+covered by this License; they are outside its scope.  The act of\r
+running a program using the Library is not restricted, and output from\r
+such a program is covered only if its contents constitute a work based\r
+on the Library (independent of the use of the Library in a tool for\r
+writing it).  Whether that is true depends on what the Library does\r
+and what the program that uses the Library does.\r
+  \r
+  1. You may copy and distribute verbatim copies of the Library's\r
+complete source code as you receive it, in any medium, provided that\r
+you conspicuously and appropriately publish on each copy an\r
+appropriate copyright notice and disclaimer of warranty; keep intact\r
+all the notices that refer to this License and to the absence of any\r
+warranty; and distribute a copy of this License along with the\r
+Library.\r
+\r
+  You may charge a fee for the physical act of transferring a copy,\r
+and you may at your option offer warranty protection in exchange for a\r
+fee.\r
+\f\r
+  2. You may modify your copy or copies of the Library or any portion\r
+of it, thus forming a work based on the Library, and copy and\r
+distribute such modifications or work under the terms of Section 1\r
+above, provided that you also meet all of these conditions:\r
+\r
+    a) The modified work must itself be a software library.\r
+\r
+    b) You must cause the files modified to carry prominent notices\r
+    stating that you changed the files and the date of any change.\r
+\r
+    c) You must cause the whole of the work to be licensed at no\r
+    charge to all third parties under the terms of this License.\r
+\r
+    d) If a facility in the modified Library refers to a function or a\r
+    table of data to be supplied by an application program that uses\r
+    the facility, other than as an argument passed when the facility\r
+    is invoked, then you must make a good faith effort to ensure that,\r
+    in the event an application does not supply such function or\r
+    table, the facility still operates, and performs whatever part of\r
+    its purpose remains meaningful.\r
+\r
+    (For example, a function in a library to compute square roots has\r
+    a purpose that is entirely well-defined independent of the\r
+    application.  Therefore, Subsection 2d requires that any\r
+    application-supplied function or table used by this function must\r
+    be optional: if the application does not supply it, the square\r
+    root function must still compute square roots.)\r
+\r
+These requirements apply to the modified work as a whole.  If\r
+identifiable sections of that work are not derived from the Library,\r
+and can be reasonably considered independent and separate works in\r
+themselves, then this License, and its terms, do not apply to those\r
+sections when you distribute them as separate works.  But when you\r
+distribute the same sections as part of a whole which is a work based\r
+on the Library, the distribution of the whole must be on the terms of\r
+this License, whose permissions for other licensees extend to the\r
+entire whole, and thus to each and every part regardless of who wrote\r
+it.\r
+\r
+Thus, it is not the intent of this section to claim rights or contest\r
+your rights to work written entirely by you; rather, the intent is to\r
+exercise the right to control the distribution of derivative or\r
+collective works based on the Library.\r
+\r
+In addition, mere aggregation of another work not based on the Library\r
+with the Library (or with a work based on the Library) on a volume of\r
+a storage or distribution medium does not bring the other work under\r
+the scope of this License.\r
+\r
+  3. You may opt to apply the terms of the ordinary GNU General Public\r
+License instead of this License to a given copy of the Library.  To do\r
+this, you must alter all the notices that refer to this License, so\r
+that they refer to the ordinary GNU General Public License, version 2,\r
+instead of to this License.  (If a newer version than version 2 of the\r
+ordinary GNU General Public License has appeared, then you can specify\r
+that version instead if you wish.)  Do not make any other change in\r
+these notices.\r
+\f\r
+  Once this change is made in a given copy, it is irreversible for\r
+that copy, so the ordinary GNU General Public License applies to all\r
+subsequent copies and derivative works made from that copy.\r
+\r
+  This option is useful when you wish to copy part of the code of\r
+the Library into a program that is not a library.\r
+\r
+  4. You may copy and distribute the Library (or a portion or\r
+derivative of it, under Section 2) in object code or executable form\r
+under the terms of Sections 1 and 2 above provided that you accompany\r
+it with the complete corresponding machine-readable source code, which\r
+must be distributed under the terms of Sections 1 and 2 above on a\r
+medium customarily used for software interchange.\r
+\r
+  If distribution of object code is made by offering access to copy\r
+from a designated place, then offering equivalent access to copy the\r
+source code from the same place satisfies the requirement to\r
+distribute the source code, even though third parties are not\r
+compelled to copy the source along with the object code.\r
+\r
+  5. A program that contains no derivative of any portion of the\r
+Library, but is designed to work with the Library by being compiled or\r
+linked with it, is called a "work that uses the Library".  Such a\r
+work, in isolation, is not a derivative work of the Library, and\r
+therefore falls outside the scope of this License.\r
+\r
+  However, linking a "work that uses the Library" with the Library\r
+creates an executable that is a derivative of the Library (because it\r
+contains portions of the Library), rather than a "work that uses the\r
+library".  The executable is therefore covered by this License.\r
+Section 6 states terms for distribution of such executables.\r
+\r
+  When a "work that uses the Library" uses material from a header file\r
+that is part of the Library, the object code for the work may be a\r
+derivative work of the Library even though the source code is not.\r
+Whether this is true is especially significant if the work can be\r
+linked without the Library, or if the work is itself a library.  The\r
+threshold for this to be true is not precisely defined by law.\r
+\r
+  If such an object file uses only numerical parameters, data\r
+structure layouts and accessors, and small macros and small inline\r
+functions (ten lines or less in length), then the use of the object\r
+file is unrestricted, regardless of whether it is legally a derivative\r
+work.  (Executables containing this object code plus portions of the\r
+Library will still fall under Section 6.)\r
+\r
+  Otherwise, if the work is a derivative of the Library, you may\r
+distribute the object code for the work under the terms of Section 6.\r
+Any executables containing that work also fall under Section 6,\r
+whether or not they are linked directly with the Library itself.\r
+\f\r
+  6. As an exception to the Sections above, you may also combine or\r
+link a "work that uses the Library" with the Library to produce a\r
+work containing portions of the Library, and distribute that work\r
+under terms of your choice, provided that the terms permit\r
+modification of the work for the customer's own use and reverse\r
+engineering for debugging such modifications.\r
+\r
+  You must give prominent notice with each copy of the work that the\r
+Library is used in it and that the Library and its use are covered by\r
+this License.  You must supply a copy of this License.  If the work\r
+during execution displays copyright notices, you must include the\r
+copyright notice for the Library among them, as well as a reference\r
+directing the user to the copy of this License.  Also, you must do one\r
+of these things:\r
+\r
+    a) Accompany the work with the complete corresponding\r
+    machine-readable source code for the Library including whatever\r
+    changes were used in the work (which must be distributed under\r
+    Sections 1 and 2 above); and, if the work is an executable linked\r
+    with the Library, with the complete machine-readable "work that\r
+    uses the Library", as object code and/or source code, so that the\r
+    user can modify the Library and then relink to produce a modified\r
+    executable containing the modified Library.  (It is understood\r
+    that the user who changes the contents of definitions files in the\r
+    Library will not necessarily be able to recompile the application\r
+    to use the modified definitions.)\r
+\r
+    b) Use a suitable shared library mechanism for linking with the\r
+    Library.  A suitable mechanism is one that (1) uses at run time a\r
+    copy of the library already present on the user's computer system,\r
+    rather than copying library functions into the executable, and (2)\r
+    will operate properly with a modified version of the library, if\r
+    the user installs one, as long as the modified version is\r
+    interface-compatible with the version that the work was made with.\r
+\r
+    c) Accompany the work with a written offer, valid for at\r
+    least three years, to give the same user the materials\r
+    specified in Subsection 6a, above, for a charge no more\r
+    than the cost of performing this distribution.\r
+\r
+    d) If distribution of the work is made by offering access to copy\r
+    from a designated place, offer equivalent access to copy the above\r
+    specified materials from the same place.\r
+\r
+    e) Verify that the user has already received a copy of these\r
+    materials or that you have already sent this user a copy.\r
+\r
+  For an executable, the required form of the "work that uses the\r
+Library" must include any data and utility programs needed for\r
+reproducing the executable from it.  However, as a special exception,\r
+the materials to be distributed need not include anything that is\r
+normally distributed (in either source or binary form) with the major\r
+components (compiler, kernel, and so on) of the operating system on\r
+which the executable runs, unless that component itself accompanies\r
+the executable.\r
+\r
+  It may happen that this requirement contradicts the license\r
+restrictions of other proprietary libraries that do not normally\r
+accompany the operating system.  Such a contradiction means you cannot\r
+use both them and the Library together in an executable that you\r
+distribute.\r
+\f\r
+  7. You may place library facilities that are a work based on the\r
+Library side-by-side in a single library together with other library\r
+facilities not covered by this License, and distribute such a combined\r
+library, provided that the separate distribution of the work based on\r
+the Library and of the other library facilities is otherwise\r
+permitted, and provided that you do these two things:\r
+\r
+    a) Accompany the combined library with a copy of the same work\r
+    based on the Library, uncombined with any other library\r
+    facilities.  This must be distributed under the terms of the\r
+    Sections above.\r
+\r
+    b) Give prominent notice with the combined library of the fact\r
+    that part of it is a work based on the Library, and explaining\r
+    where to find the accompanying uncombined form of the same work.\r
+\r
+  8. You may not copy, modify, sublicense, link with, or distribute\r
+the Library except as expressly provided under this License.  Any\r
+attempt otherwise to copy, modify, sublicense, link with, or\r
+distribute the Library is void, and will automatically terminate your\r
+rights under this License.  However, parties who have received copies,\r
+or rights, from you under this License will not have their licenses\r
+terminated so long as such parties remain in full compliance.\r
+\r
+  9. You are not required to accept this License, since you have not\r
+signed it.  However, nothing else grants you permission to modify or\r
+distribute the Library or its derivative works.  These actions are\r
+prohibited by law if you do not accept this License.  Therefore, by\r
+modifying or distributing the Library (or any work based on the\r
+Library), you indicate your acceptance of this License to do so, and\r
+all its terms and conditions for copying, distributing or modifying\r
+the Library or works based on it.\r
+\r
+  10. Each time you redistribute the Library (or any work based on the\r
+Library), the recipient automatically receives a license from the\r
+original licensor to copy, distribute, link with or modify the Library\r
+subject to these terms and conditions.  You may not impose any further\r
+restrictions on the recipients' exercise of the rights granted herein.\r
+You are not responsible for enforcing compliance by third parties with\r
+this License.\r
+\f\r
+  11. If, as a consequence of a court judgment or allegation of patent\r
+infringement or for any other reason (not limited to patent issues),\r
+conditions are imposed on you (whether by court order, agreement or\r
+otherwise) that contradict the conditions of this License, they do not\r
+excuse you from the conditions of this License.  If you cannot\r
+distribute so as to satisfy simultaneously your obligations under this\r
+License and any other pertinent obligations, then as a consequence you\r
+may not distribute the Library at all.  For example, if a patent\r
+license would not permit royalty-free redistribution of the Library by\r
+all those who receive copies directly or indirectly through you, then\r
+the only way you could satisfy both it and this License would be to\r
+refrain entirely from distribution of the Library.\r
+\r
+If any portion of this section is held invalid or unenforceable under any\r
+particular circumstance, the balance of the section is intended to apply,\r
+and the section as a whole is intended to apply in other circumstances.\r
+\r
+It is not the purpose of this section to induce you to infringe any\r
+patents or other property right claims or to contest validity of any\r
+such claims; this section has the sole purpose of protecting the\r
+integrity of the free software distribution system which is\r
+implemented by public license practices.  Many people have made\r
+generous contributions to the wide range of software distributed\r
+through that system in reliance on consistent application of that\r
+system; it is up to the author/donor to decide if he or she is willing\r
+to distribute software through any other system and a licensee cannot\r
+impose that choice.\r
+\r
+This section is intended to make thoroughly clear what is believed to\r
+be a consequence of the rest of this License.\r
+\r
+  12. If the distribution and/or use of the Library is restricted in\r
+certain countries either by patents or by copyrighted interfaces, the\r
+original copyright holder who places the Library under this License may add\r
+an explicit geographical distribution limitation excluding those countries,\r
+so that distribution is permitted only in or among countries not thus\r
+excluded.  In such case, this License incorporates the limitation as if\r
+written in the body of this License.\r
+\r
+  13. The Free Software Foundation may publish revised and/or new\r
+versions of the Lesser General Public License from time to time.\r
+Such new versions will be similar in spirit to the present version,\r
+but may differ in detail to address new problems or concerns.\r
+\r
+Each version is given a distinguishing version number.  If the Library\r
+specifies a version number of this License which applies to it and\r
+"any later version", you have the option of following the terms and\r
+conditions either of that version or of any later version published by\r
+the Free Software Foundation.  If the Library does not specify a\r
+license version number, you may choose any version ever published by\r
+the Free Software Foundation.\r
+\f\r
+  14. If you wish to incorporate parts of the Library into other free\r
+programs whose distribution conditions are incompatible with these,\r
+write to the author to ask for permission.  For software which is\r
+copyrighted by the Free Software Foundation, write to the Free\r
+Software Foundation; we sometimes make exceptions for this.  Our\r
+decision will be guided by the two goals of preserving the free status\r
+of all derivatives of our free software and of promoting the sharing\r
+and reuse of software generally.\r
+\r
+                           NO WARRANTY\r
+\r
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\r
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\r
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\r
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY\r
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\r
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\r
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\r
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\r
+\r
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\r
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\r
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\r
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\r
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\r
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\r
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\r
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\r
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\r
+DAMAGES.\r
+\r
+                    END OF TERMS AND CONDITIONS\r
+\f\r
+           How to Apply These Terms to Your New Libraries\r
+\r
+  If you develop a new library, and you want it to be of the greatest\r
+possible use to the public, we recommend making it free software that\r
+everyone can redistribute and change.  You can do so by permitting\r
+redistribution under these terms (or, alternatively, under the terms of the\r
+ordinary General Public License).\r
+\r
+  To apply these terms, attach the following notices to the library.  It is\r
+safest to attach them to the start of each source file to most effectively\r
+convey the exclusion of warranty; and each file should have at least the\r
+"copyright" line and a pointer to where the full notice is found.\r
+\r
+    <one line to give the library's name and a brief idea of what it does.>\r
+    Copyright (C) <year>  <name of author>\r
+\r
+    This library is free software; you can redistribute it and/or\r
+    modify it under the terms of the GNU Lesser General Public\r
+    License as published by the Free Software Foundation; either\r
+    version 2.1 of the License, or (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
+    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; if not, write to the Free Software\r
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
+\r
+Also add information on how to contact you by electronic and paper mail.\r
+\r
+You should also get your employer (if you work as a programmer) or your\r
+school, if any, to sign a "copyright disclaimer" for the library, if\r
+necessary.  Here is a sample; alter the names:\r
+\r
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the\r
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.\r
+\r
+  <signature of Ty Coon>, 1 April 1990\r
+  Ty Coon, President of Vice\r
+\r
+That's all there is to it!\r
+\r
+\r
diff --git a/debian/changelog b/debian/changelog
new file mode 100644 (file)
index 0000000..4c2b5e3
--- /dev/null
@@ -0,0 +1,174 @@
+libmatroska (0.8.1-1) unstable; urgency=low\r
+\r
+  * New version.\r
+\r
+ -- Moritz Bunkus <moritz@bunkus.org>  Mon, 16 Jan 2007 17:00:30 +0100\r
+\r
+libmatroska (0.8.0-1) unstable; urgency=low\r
+\r
+  * New version.\r
+\r
+ -- Moritz Bunkus <moritz@bunkus.org>  Tue, 18 Oct 2005 20:00:18 +0200\r
+\r
+libmatroska (0.7.7-2) unstable; urgency=low\r
+\r
+  * Rebuilt with g++ 4.0.2.\r
+\r
+ -- Moritz Bunkus <moritz@bunkus.org>  Sat, 15 Oct 2005 14:25:46 +0200\r
+\r
+libmatroska (0.7.7-1) unstable; urgency=low\r
+\r
+  * New version.\r
+\r
+ -- Moritz Bunkus <moritz@bunkus.org>  Fri, 20 May 2005 16:28:21 +0200\r
+\r
+libmatroska (0.7.6-1) unstable; urgency=low\r
+\r
+  * New version.\r
+\r
+ -- Moritz Bunkus <moritz@bunkus.org>  Sat, 16 Apr 2005 13:24:30 +0200\r
+\r
+libmatroska (0.7.5-1) unstable; urgency=low\r
+\r
+  * New version.\r
+\r
+ -- Moritz Bunkus <moritz@bunkus.org>  Sun,  6 Feb 2005 21:02:42 +0100\r
+\r
+libmatroska (0.7.4-1) unstable; urgency=low\r
+\r
+  * New version.\r
+\r
+ -- Moritz Bunkus <moritz@bunkus.org>  Sun, 26 Sep 2004 12:35:05 +0200\r
+\r
+libmatroska (0.7.3-1) unstable; urgency=low\r
+\r
+  * New version.\r
+\r
+ -- Moritz Bunkus <moritz@bunkus.org>  Mon, 16 Aug 2004 22:52:57 +0200\r
+\r
+libmatroska (0.7.2-1) unstable; urgency=low\r
+\r
+  * New version.\r
+\r
+ -- Moritz Bunkus <moritz@bunkus.org>  Wed,  4 Aug 2004 19:49:25 +0200\r
+\r
+libmatroska (0.7.1-1) unstable; urgency=low\r
+\r
+  * New version.\r
+\r
+ -- Moritz Bunkus <moritz@bunkus.org>  Sun, 25 Jul 2004 12:41:11 +0200\r
+\r
+libmatroska (0.7.0-1) unstable; urgency=low\r
+\r
+  * New version.\r
+\r
+ -- Moritz Bunkus <moritz@bunkus.org>  Fri, 23 Apr 2004 18:45:32 +0200\r
+\r
+libmatroska (0.6.3-1) unstable; urgency=low\r
+\r
+  * New version.\r
+\r
+ -- Moritz Bunkus <moritz@bunkus.org>  Mon,  5 Jan 2004 19:55:59 +0100\r
+\r
+libmatroska (0.6.2-1) unstable; urgency=low\r
+\r
+  * New version.\r
+\r
+ -- Moritz Bunkus <moritz@bunkus.org>  Tue, 30 Dec 2003 10:59:47 +0100\r
+\r
+libmatroska (0.6.1-1) unstable; urgency=low\r
+\r
+  * New version.\r
+\r
+ -- Moritz Bunkus <moritz@bunkus.org>  Thu, 30 Oct 2003 13:49:33 +0100\r
+\r
+libmatroska (0.6.0-1) unstable; urgency=low\r
+\r
+  * New version.\r
+\r
+ -- Moritz Bunkus <moritz@bunkus.org>  Tue, 28 Oct 2003 23:09:34 +0100\r
+\r
+libmatroska (0.5.3-1) unstable; urgency=low\r
+\r
+  * New version.\r
+\r
+ -- Moritz Bunkus <moritz@bunkus.org>  Wed, 22 Oct 2003 19:22:10 +0200\r
+\r
+libmatroska (0.5.2-1) unstable; urgency=low\r
+\r
+  * New version.\r
+\r
+ -- Moritz Bunkus <moritz@bunkus.org>  Wed, 17 Sep 2003 22:22:10 +0200\r
+\r
+libmatroska (0.5.1-1) unstable; urgency=low\r
+\r
+  * New version.\r
+\r
+ -- Moritz Bunkus <moritz@bunkus.org>  Mon,  1 Sep 2003 13:42:56 +0200\r
+\r
+libmatroska (0.5.0-1) unstable; urgency=low\r
+\r
+  * New version.\r
+\r
+ -- Moritz Bunkus <moritz@bunkus.org>  Mon, 28 Jul 2003 10:49:27 +0200\r
+\r
+libmatroska (0.4.4-2) unstable; urgency=low\r
+\r
+  * New version.\r
+\r
+ -- Moritz Bunkus <moritz@bunkus.org>  Sat, 14 Jun 2003 17:40:11 +0200\r
+\r
+libmatroska (0.4.4-1) unstable; urgency=low\r
+\r
+  * New version.\r
+\r
+ -- Moritz Bunkus <moritz@bunkus.org>  Wed, 11 Jun 2003 20:32:09 +0200\r
+\r
+libmatroska (0.4.3-1) unstable; urgency=low\r
+\r
+  * New version with API changes.\r
+\r
+ -- Moritz Bunkus <moritz@bunkus.org>  Wed, 21 May 2003 22:35:52 +0200\r
+\r
+libmatroska (0.4.2-1) unstable; urgency=low\r
+\r
+  * New version with API changes.\r
+\r
+ -- Moritz Bunkus <moritz@bunkus.org>  Tue,  6 May 2003 22:33:44 +0200\r
+\r
+libmatroska (0.4.1-2) unstable; urgency=low\r
+\r
+  * Compiled with gcc 3.2.3\r
+\r
+ -- Moritz Bunkus <moritz@bunkus.org>  Sun, 04 May 2003 22:11:33 +0200\r
+\r
+libmatroska (0.4.1-1) unstable; urgency=low\r
+\r
+  * Some bugfixes, memleak fixed.\r
+\r
+ -- Moritz Bunkus <moritz@bunkus.org>  Sat, 03 May 2003 23:07:33 +0200\r
+\r
+libmatroska (0.4.0-1) unstable; urgency=low\r
+\r
+  * First alpha release :)\r
+\r
+ -- Moritz Bunkus <moritz@bunkus.org>  Wed, 30 Apr 2003 10:44:33 +0200\r
+\r
+libmatroska (0.2.0.20030425) unstable; urgency=low\r
+\r
+  * New version with bugfixes by Steve.\r
+\r
+ -- Moritz Bunkus <moritz@bunkus.org>  Fri, 25 Apr 2003 20:01:49 +0200\r
+\r
+libmatroska (0.2.0.20030421) unstable; urgency=low\r
+\r
+  * Separated libebml from libmatroska like in the upstream sources.)\r
+\r
+ -- Moritz Bunkus <moritz@bunkus.org>  Mon, 21 Apr 2003 16:33:36 +0200\r
+\r
+libmatroska (0.0.20030225) unstable; urgency=low\r
+\r
+  * Initial Release.\r
+\r
+ -- Moritz Bunkus <moritz@bunkus.org>  Tue, 25 Feb 2003 18:28:52 +0100\r
+\r
diff --git a/debian/control b/debian/control
new file mode 100644 (file)
index 0000000..30873be
--- /dev/null
@@ -0,0 +1,16 @@
+Source: libmatroska\r
+Priority: optional\r
+Maintainer: Moritz Bunkus <moritz@bunkus.org>\r
+Build-Depends: debhelper (>> 3.0.0), libebml-dev (>= 0.7.3-1)\r
+Standards-Version: 3.5.8\r
+\r
+Package: libmatroska-dev\r
+Section: devel\r
+Architecture: any\r
+Depends: libebml-dev (>= 0.7.2-1)\r
+Description: an extensible open standard Audio/Video container format\r
+ Matroska is aiming to become the standard of Multimedia\r
+ Container Formats one day. It is based on EBML (Extensible Binary\r
+ Meta Language), a kind of binary version of XML. This way the\r
+ significant advantages in terms of future format extensability\r
+ are gained without breaking file support in old parsers.\r
diff --git a/debian/copyright b/debian/copyright
new file mode 100644 (file)
index 0000000..e1ad1fa
--- /dev/null
@@ -0,0 +1,26 @@
+This package was debianized by Moritz Bunkus <moritz@bunkus.org> on\r
+Mon, 21 Apr 2003 12:49:33 +0200.\r
+\r
+It was downloaded from http://www.matroska.org/\r
+\r
+Upstream Author: Steve Lhomme <steve.lhomme@free.fr>\r
+\r
+Copyright (C) 2002-2003 Steve Lhomme.  All rights reserved.\r
+\r
+This file may be distributed under the terms of the Q Public License\r
+as defined by Trolltech AS of Norway and appearing in the file\r
+LICENSE.QPL included in the packaging of this file.\r
+\r
+This proram is also licensed under the GPL. See\r
+/usr/share/common-licenses/GPL for details.\r
+\r
+Licensees holding an other license may use this file in accordance with \r
+the Agreement provided with the Software.\r
+\r
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE\r
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.\r
+\r
+See http://www.matroska.org/license/qpl/ for QPL licensing information.\r
+\r
+Contact license@matroska.org if any conditions of this licensing are\r
+not clear to you.\r
diff --git a/debian/dirs b/debian/dirs
new file mode 100644 (file)
index 0000000..454f267
--- /dev/null
@@ -0,0 +1,2 @@
+usr/bin\r
+usr/sbin\r
diff --git a/debian/docs b/debian/docs
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/debian/libmatroska-dev.dirs b/debian/libmatroska-dev.dirs
new file mode 100644 (file)
index 0000000..db1be84
--- /dev/null
@@ -0,0 +1,2 @@
+usr/lib\r
+usr/include\r
diff --git a/debian/libmatroska-dev.files b/debian/libmatroska-dev.files
new file mode 100644 (file)
index 0000000..b87d815
--- /dev/null
@@ -0,0 +1,2 @@
+usr/include/*\r
+usr/lib/lib*.a\r
diff --git a/debian/rules b/debian/rules
new file mode 100644 (file)
index 0000000..969a37d
--- /dev/null
@@ -0,0 +1,95 @@
+#!/usr/bin/make -f\r
+# Sample debian/rules that uses debhelper.\r
+# GNU copyright 1997 to 1999 by Joey Hess.\r
+\r
+# Uncomment this to turn on verbose mode.\r
+#export DH_VERBOSE=1\r
+\r
+# This is the debhelper compatibility version to use.\r
+export DH_COMPAT=4\r
+\r
+# shared library versions, option 1\r
+version=2.0.5\r
+major=2\r
+# option 2, assuming the library is created as src/.libs/libfoo.so.2.0.5 or so\r
+#version=`ls src/.libs/lib*.so.* | \\r
+# awk '{if (match($$0,/[0-9]+\.[0-9]+\.[0-9]+$$/)) print substr($$0,RSTART)}'`\r
+#major=`ls src/.libs/lib*.so.* | \\r
+# awk '{if (match($$0,/\.so\.[0-9]+$$/)) print substr($$0,RSTART+4)}'`\r
+\r
+# configure: configure-stamp\r
+# configure-stamp:\r
+#      dh_testdir\r
+#      # Add here commands to configure the package.\r
+\r
+#      touch configure-stamp\r
+\r
+\r
+build: build-stamp\r
+build-stamp:\r
+       dh_testdir\r
+\r
+       # Add here commands to compile the package.\r
+       $(MAKE) -C make/linux $(DEB_BUILD_OPTIONS) LIBEBML_INCLUDE_DIR=/usr/include/ebml staticlib\r
+\r
+       touch build-stamp\r
+\r
+clean:\r
+       dh_testdir\r
+       dh_testroot\r
+       rm -f build-stamp\r
+\r
+       # Add here commands to clean up after the build process.\r
+       -$(MAKE) -C make/linux $(DEB_BUILD_OPTIONS) clean\r
+\r
+       dh_clean\r
+\r
+install: build\r
+       dh_testdir\r
+       dh_testroot\r
+       dh_clean -k\r
+       dh_installdirs\r
+\r
+       # Add here commands to install the package into debian/tmp\r
+       $(MAKE) -C make/linux prefix=$(CURDIR)/debian/tmp/usr \\r
+               install_headers install_staticlib\r
+\r
+\r
+# Build architecture-independent files here.\r
+binary-indep: build install\r
+# We have nothing to do by default.\r
+\r
+# Build architecture-dependent files here.\r
+binary-arch: build install\r
+       dh_testdir\r
+       dh_testroot\r
+       dh_movefiles\r
+\r
+#      dh_installdebconf       \r
+       dh_installdocs\r
+#      dh_installexamples\r
+#      dh_installmenu\r
+#      dh_installlogrotate\r
+#      dh_installemacsen\r
+#      dh_installpam\r
+#      dh_installmime\r
+#      dh_installinit\r
+#      dh_installcron\r
+#      dh_installman\r
+#      dh_installinfo\r
+#      dh_undocumented\r
+       dh_installchangelogs ChangeLog\r
+       dh_link\r
+#      dh_strip\r
+       dh_compress\r
+       dh_fixperms\r
+       dh_makeshlibs\r
+       dh_installdeb\r
+#      dh_perl\r
+       dh_shlibdeps\r
+       dh_gencontrol\r
+       dh_md5sums\r
+       dh_builddeb\r
+\r
+binary: binary-indep binary-arch\r
+.PHONY: build clean binary-indep binary-arch binary install configure\r
diff --git a/libmatroska.proj b/libmatroska.proj
new file mode 100644 (file)
index 0000000..d6af00a
--- /dev/null
@@ -0,0 +1,68 @@
+Include "*/*.proj"
+
+LIB matroska
+{
+  INCLUDE .
+  INCLUDE ../libebml
+
+  USE ebml
+
+//  OPTIMIZE_GLOBALLY .
+  FAVOR_MAX_SPEED .
+  REDUCE_SIZE .
+  FASTER_FLOAT .
+  
+  SOURCE src/FileKax.cpp
+  SOURCE src/KaxAttached.cpp
+  SOURCE src/KaxAttachments.cpp
+  SOURCE src/KaxBlock.cpp
+  SOURCE src/KaxBlockData.cpp
+  SOURCE src/KaxChapters.cpp
+  SOURCE src/KaxCluster.cpp
+  SOURCE src/KaxClusterData.cpp
+  SOURCE src/KaxContentEncoding.cpp
+  SOURCE src/KaxContexts.cpp
+  SOURCE src/KaxCues.cpp
+  SOURCE src/KaxCuesData.cpp
+  SOURCE src/KaxInfo.cpp
+  SOURCE src/KaxInfoData.cpp
+  SOURCE src/KaxSeekHead.cpp
+  SOURCE src/KaxSegment.cpp
+  SOURCE src/KaxTag.cpp
+  SOURCE src/KaxTagMulti.cpp
+  SOURCE src/KaxTags.cpp
+  SOURCE src/KaxTrackAudio.cpp
+  SOURCE src/KaxTrackEntryData.cpp
+  SOURCE src/KaxTrackVideo.cpp
+  SOURCE src/KaxTracks.cpp
+  SOURCE src/KaxVersion.cpp
+
+  HEADER matroska/FileKax.h
+  HEADER matroska/KaxAttached.h
+  HEADER matroska/KaxAttachments.h
+  HEADER matroska/KaxBlock.h
+  HEADER matroska/KaxBlockData.h
+  HEADER matroska/KaxChapters.h
+  HEADER matroska/KaxCluster.h
+  HEADER matroska/KaxClusterData.h
+  HEADER matroska/KaxConfig.h
+  HEADER matroska/KaxContentEncoding.h
+  HEADER matroska/KaxContexts.h
+  HEADER matroska/KaxCues.h
+  HEADER matroska/KaxCuesData.h
+  HEADER matroska/KaxInfo.h
+  HEADER matroska/KaxInfoData.h
+  HEADER matroska/KaxSeekHead.h
+  HEADER matroska/KaxSegment.h
+  HEADER matroska/KaxTag.h
+  HEADER matroska/KaxTagMulti.h
+  HEADER matroska/KaxTags.h
+  HEADER matroska/KaxTrackAudio.h
+  HEADER matroska/KaxTrackEntryData.h
+  HEADER matroska/KaxTrackVideo.h
+  HEADER matroska/KaxTracks.h
+  HEADER matroska/KaxTypes.h
+  HEADER matroska/KaxVersion.h
+  HEADER matroska/c/libmatroska_t.h
+  HEADER matroska/c/libmatroska.h
+}
diff --git a/make/Doxyfile b/make/Doxyfile
new file mode 100644 (file)
index 0000000..e9e0cb9
--- /dev/null
@@ -0,0 +1,211 @@
+# Doxyfile 1.3\r
+\r
+#---------------------------------------------------------------------------\r
+# General configuration options\r
+#---------------------------------------------------------------------------\r
+PROJECT_NAME           = libmatroska\r
+PROJECT_NUMBER         = 0.5.0\r
+OUTPUT_DIRECTORY       = ../../doc/src\r
+OUTPUT_LANGUAGE        = English\r
+USE_WINDOWS_ENCODING   = YES\r
+EXTRACT_ALL            = YES\r
+EXTRACT_PRIVATE        = NO\r
+EXTRACT_STATIC         = YES\r
+EXTRACT_LOCAL_CLASSES  = YES\r
+HIDE_UNDOC_MEMBERS     = NO\r
+HIDE_UNDOC_CLASSES     = NO\r
+HIDE_FRIEND_COMPOUNDS  = NO\r
+HIDE_IN_BODY_DOCS      = NO\r
+BRIEF_MEMBER_DESC      = YES\r
+REPEAT_BRIEF           = YES\r
+ALWAYS_DETAILED_SEC    = NO\r
+INLINE_INHERITED_MEMB  = YES\r
+FULL_PATH_NAMES        = NO\r
+STRIP_FROM_PATH        = \r
+INTERNAL_DOCS          = NO\r
+CASE_SENSE_NAMES       = YES\r
+SHORT_NAMES            = NO\r
+HIDE_SCOPE_NAMES       = NO\r
+VERBATIM_HEADERS       = YES\r
+SHOW_INCLUDE_FILES     = NO\r
+JAVADOC_AUTOBRIEF      = YES\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+DETAILS_AT_TOP         = YES\r
+INHERIT_DOCS           = YES\r
+INLINE_INFO            = YES\r
+SORT_MEMBER_DOCS       = NO\r
+DISTRIBUTE_GROUP_DOC   = NO\r
+TAB_SIZE               = 2\r
+GENERATE_TODOLIST      = YES\r
+GENERATE_TESTLIST      = YES\r
+GENERATE_BUGLIST       = YES\r
+GENERATE_DEPRECATEDLIST= YES\r
+ALIASES                = \r
+ENABLED_SECTIONS       = \r
+MAX_INITIALIZER_LINES  = 30\r
+OPTIMIZE_OUTPUT_FOR_C  = NO\r
+OPTIMIZE_OUTPUT_JAVA   = NO\r
+SHOW_USED_FILES        = YES\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+QUIET                  = NO\r
+WARNINGS               = YES\r
+WARN_IF_UNDOCUMENTED   = YES\r
+WARN_IF_DOC_ERROR      = YES\r
+WARN_FORMAT            = "$file:$line: $text"\r
+WARN_LOGFILE           = \r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+INPUT                  = ../../libebml/src \\r
+                         ../../libebml/src/platform/win32 \\r
+                         ../../libebml/ebml \\r
+                         ../../libebml/ebml/c \\r
+                         ../src \\r
+                                                                                                ../matroska \\r
+                         ../matroska/c\r
+FILE_PATTERNS          = *.cpp \\r
+                         *.h\r
+RECURSIVE              = NO\r
+EXCLUDE                = \r
+EXCLUDE_SYMLINKS       = NO\r
+EXCLUDE_PATTERNS       = \r
+EXAMPLE_PATH           = \r
+EXAMPLE_PATTERNS       = \r
+EXAMPLE_RECURSIVE      = NO\r
+IMAGE_PATH             = \r
+INPUT_FILTER           = \r
+FILTER_SOURCE_FILES    = NO\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+SOURCE_BROWSER         = YES\r
+INLINE_SOURCES         = NO\r
+STRIP_CODE_COMMENTS    = YES\r
+REFERENCED_BY_RELATION = NO\r
+REFERENCES_RELATION    = YES\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+ALPHABETICAL_INDEX     = NO\r
+COLS_IN_ALPHA_INDEX    = 5\r
+IGNORE_PREFIX          = \r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+GENERATE_HTML          = YES\r
+HTML_OUTPUT            = html\r
+HTML_FILE_EXTENSION    = .html\r
+HTML_HEADER            = \r
+HTML_FOOTER            = \r
+HTML_STYLESHEET        = libmatroska.css\r
+HTML_ALIGN_MEMBERS     = YES\r
+GENERATE_HTMLHELP      = NO\r
+CHM_FILE               = \r
+HHC_LOCATION           = \r
+GENERATE_CHI           = NO\r
+BINARY_TOC             = NO\r
+TOC_EXPAND             = NO\r
+DISABLE_INDEX          = NO\r
+ENUM_VALUES_PER_LINE   = 4\r
+GENERATE_TREEVIEW      = NO\r
+TREEVIEW_WIDTH         = 250\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+GENERATE_LATEX         = YES\r
+LATEX_OUTPUT           = latex\r
+LATEX_CMD_NAME         = latex\r
+MAKEINDEX_CMD_NAME     = makeindex\r
+COMPACT_LATEX          = YES\r
+PAPER_TYPE             = a4wide\r
+EXTRA_PACKAGES         = \r
+LATEX_HEADER           = \r
+PDF_HYPERLINKS         = YES\r
+USE_PDFLATEX           = YES\r
+LATEX_BATCHMODE        = NO\r
+LATEX_HIDE_INDICES     = NO\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+GENERATE_RTF           = YES\r
+RTF_OUTPUT             = rtf\r
+COMPACT_RTF            = NO\r
+RTF_HYPERLINKS         = YES\r
+RTF_STYLESHEET_FILE    = \r
+RTF_EXTENSIONS_FILE    = \r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+GENERATE_MAN           = NO\r
+MAN_OUTPUT             = man\r
+MAN_EXTENSION          = .3\r
+MAN_LINKS              = YES\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+GENERATE_XML           = NO\r
+XML_SCHEMA             = \r
+XML_DTD                = \r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+GENERATE_AUTOGEN_DEF   = NO\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+GENERATE_PERLMOD       = NO\r
+PERLMOD_LATEX          = NO\r
+PERLMOD_PRETTY         = YES\r
+PERLMOD_MAKEVAR_PREFIX = \r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor   \r
+#---------------------------------------------------------------------------\r
+ENABLE_PREPROCESSING   = YES\r
+MACRO_EXPANSION        = NO\r
+EXPAND_ONLY_PREDEF     = NO\r
+SEARCH_INCLUDES        = YES\r
+INCLUDE_PATH           = \r
+INCLUDE_FILE_PATTERNS  = \r
+PREDEFINED             = \r
+EXPAND_AS_DEFINED      = \r
+SKIP_FUNCTION_MACROS   = YES\r
+#---------------------------------------------------------------------------\r
+# Configuration::addtions related to external references   \r
+#---------------------------------------------------------------------------\r
+TAGFILES               = \r
+GENERATE_TAGFILE       = \r
+ALLEXTERNALS           = NO\r
+EXTERNAL_GROUPS        = YES\r
+PERL_PATH              = /usr/bin/perl\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool   \r
+#---------------------------------------------------------------------------\r
+CLASS_DIAGRAMS         = YES\r
+HIDE_UNDOC_RELATIONS   = YES\r
+HAVE_DOT               = NO\r
+CLASS_GRAPH            = YES\r
+COLLABORATION_GRAPH    = YES\r
+TEMPLATE_RELATIONS     = YES\r
+INCLUDE_GRAPH          = YES\r
+INCLUDED_BY_GRAPH      = YES\r
+GRAPHICAL_HIERARCHY    = YES\r
+DOT_IMAGE_FORMAT       = png\r
+DOT_PATH               = \r
+DOTFILE_DIRS           = \r
+MAX_DOT_GRAPH_WIDTH    = 1024\r
+MAX_DOT_GRAPH_HEIGHT   = 1024\r
+MAX_DOT_GRAPH_DEPTH    = 0\r
+GENERATE_LEGEND        = YES\r
+DOT_CLEANUP            = YES\r
+#---------------------------------------------------------------------------\r
+# Configuration::addtions related to the search engine   \r
+#---------------------------------------------------------------------------\r
+SEARCHENGINE           = NO\r
+CGI_NAME               = search.cgi\r
+CGI_URL                = \r
+DOC_URL                = \r
+DOC_ABSPATH            = \r
+BIN_ABSPATH            = /usr/local/bin/\r
+EXT_DOC_PATHS          = \r
diff --git a/make/cygwin/Makefile b/make/cygwin/Makefile
new file mode 100644 (file)
index 0000000..b0d8308
--- /dev/null
@@ -0,0 +1,60 @@
+# libmatroska core Makefile (used in cygwin)\r
+# $Id: Makefile 640 2004-07-09 21:05:36Z mosu $\r
+\r
+# Options\r
+EXTENSION=.cpp\r
+CXXFLAGS=-g -DDEBUG -Wall -Wno-unknown-pragmas -DWIN32 -DNO_NAMESPACE\r
+LDFLAGS=\r
+\r
+SRC_DIR=../../src/\r
+\r
+# Programs\r
+CXX=g++ -c\r
+LD=g++\r
+DEP=$(CXX) -MM\r
+DEPEND = makedepend\r
+AR = ar rcvu\r
+RANLIB = ranlib\r
+\r
+# Librarires\r
+INCLUDE=\r
+LIBS=\r
+\r
+# Names\r
+PROGRAM=libmatroska.a\r
+\r
+# source-files\r
+sources:=$(wildcard ${SRC_DIR}*$(EXTENSION))\r
+\r
+# header files; replace .cxx extension with .h\r
+headers:=$(patsubst %$(EXTENSION),%.hpp,$(sources))\r
+\r
+# files holding dependency information; replace .cxx extension with .dep\r
+dependencies:=$(patsubst %$(EXTENSION),%.dep,$(sources))\r
+\r
+# object files; replace .cxx extension with .o\r
+objects:=$(patsubst %$(EXTENSION),%.o,$(sources))\r
+\r
+DEPENDFLAGS  = ${CXXFLAGS} ${INCLUDE}\r
+\r
+# Build rules\r
+%.o: %$(EXTENSION)\r
+       $(CXX) $(CXXFLAGS) $(INCLUDE) -o $@ $<\r
+\r
+$(PROGRAM): $(objects)\r
+       $(AR) $@ $(objects)\r
+       $(RANLIB) $@\r
+#      $(LD) $(LDFLAGS) -o $@ $^ $(LIBS)\r
+#      ${LD} -o $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS}\r
+\r
+clean:\r
+       rm -f ${SRC_DIR}$(objects)\r
+       rm -f ${SRC_DIR}$(dependencies)\r
+       rm -f ${SRC_DIR}$(PROGRAM)\r
+       rm -f CORE\r
+\r
+# what are the source dependencies\r
+depend: $(sources)\r
+       $(DEPEND) $(DEPENDFLAGS) $(sources)\r
+\r
+# DO NOT DELETE\r
diff --git a/make/cygwin/Makefile.rule b/make/cygwin/Makefile.rule
new file mode 100644 (file)
index 0000000..2b9b7e2
--- /dev/null
@@ -0,0 +1,98 @@
+##\r
+## This Makefile is made for cygwin, but might probably work on any standard UNIX too\r
+##\r
+\r
+#****************************************************************************\r
+\r
+# DEBUG can be set to YES to include debugging info, or NO otherwise\r
+DEBUG          = YES\r
+\r
+# PROFILE can be set to YES to include profiling info, or NO otherwise\r
+PROFILE        = NO\r
+\r
+#****************************************************************************\r
+\r
+CC     = gcc\r
+CXX    = g++\r
+LD     = gcc\r
+AR     = ar rcvu\r
+RANLIB = ranlib\r
+DEPEND = makedepend\r
+INDENT =indent --gnu-style -ut -ts6 -br -npsl -npcs\r
+DELETE =rm -f\r
+\r
+GLOBAL_CFLAGS   = -Wall -Wno-unknown-pragmas -Wno-format \r
+DEBUG_CFLAGS    = -g -O0 -DDEBUG ${GLOBAL_CFLAGS}\r
+RELEASE_CFLAGS  =  -O2 ${GLOBAL_CFLAGS}\r
+\r
+P_OPTIONS = -pedantic\r
+\r
+LIBS =\r
+\r
+DEBUG_CXXFLAGS   = ${DEBUG_CFLAGS}\r
+RELEASE_CXXFLAGS = ${RELEASE_CFLAGS}\r
+\r
+DEBUG_LDFLAGS    = -g\r
+RELEASE_LDFLAGS  =\r
+\r
+ifeq (YES, ${DEBUG})\r
+   CFLAGS       = ${DEBUG_CFLAGS} ${INCS} ${P_OPTIONS}\r
+   CXXFLAGS     = ${DEBUG_CXXFLAGS} ${INCS} ${P_OPTIONS}\r
+   LDFLAGS      = ${DEBUG_LDFLAGS}\r
+   DEPENDFLAGS  = ${DEBUG_CFLAGS} ${INCS}\r
+else\r
+   CFLAGS       = ${RELEASE_CFLAGS} ${INCS} ${P_OPTIONS}\r
+   CXXFLAGS     = ${RELEASE_CXXFLAGS} ${INCS} ${P_OPTIONS}\r
+   LDFLAGS      = ${RELEASE_LDFLAGS}\r
+   DEPENDFLAGS  = ${RELEASE_CFLAGS} ${INCS}\r
+endif\r
+\r
+ifeq (YES, ${PROFILE})\r
+   CFLAGS   := ${CFLAGS} -pg\r
+   CXXFLAGS := ${CXXFLAGS} -pg\r
+   LDFLAGS  := ${LDFLAGS} -pg\r
+endif\r
+\r
+#****************************************************************************\r
+# Preprocessor directives\r
+#****************************************************************************\r
+\r
+ifeq (YES, ${PROFILE})\r
+  DEFS =\r
+else\r
+  DEFS =\r
+endif\r
+\r
+#****************************************************************************\r
+# Include paths\r
+#****************************************************************************\r
+\r
+#INCS := -I/usr/include/g++-2 -I/usr/local/include\r
+#INCS =\r
+\r
+\r
+#****************************************************************************\r
+# Makefile code common to all platforms\r
+#****************************************************************************\r
+\r
+CFLAGS   := ${CFLAGS}   ${DEFS}\r
+CXXFLAGS := ${CXXFLAGS} ${DEFS}\r
+\r
+#****************************************************************************\r
+# General rules\r
+#****************************************************************************\r
+\r
+indent:\r
+       $(INDENT) --line-length 100 ${SRCS} ${SRCS_HEADERS}\r
+       $(DELETE) *.*~\r
+\r
+indent80:\r
+       $(INDENT) --line-length 80 ${SRCS} ${SRCS_HEADERS}\r
+       $(DELETE) *.*~\r
+\r
+clean:\r
+       rm -f core *.o *.so *.a *.exe\r
+\r
+# what are the source dependencies\r
+depend: $(SRCS)\r
+       $(DEPEND) $(DEPENDFLAGS) $(SRCS)\r
diff --git a/make/linux/Makefile b/make/linux/Makefile
new file mode 100644 (file)
index 0000000..52be013
--- /dev/null
@@ -0,0 +1,181 @@
+# libmatroska core Makefile (used in cygwin)\r
+# $Id: Makefile 1254 2006-06-02 14:32:52Z mosu $\r
+# Author: Steve Lhomme <robux4 @ users.sf.net>\r
+# Author: Moritz Bunkus <moritz @ bunkus.org>\r
+\r
+#\r
+# The library is built without debug information. If you want\r
+# debug information to be included then compile with\r
+# 'make DEBUG=yes'.\r
+#\r
+\r
+# Paths\r
+# BeOS wants the libs and headers in /boot/home/config\r
+ifeq (BeOS,$(shell uname -s))\r
+prefix=/boot/home/config\r
+else\r
+prefix=/usr/local\r
+endif\r
+libdir=$(prefix)/lib\r
+includedir=$(prefix)/include/matroska\r
+\r
+# Programs\r
+CXX=g++\r
+LD=$(CXX)\r
+AR = ar rcvu\r
+RANLIB = ranlib\r
+INSTALL = install\r
+INSTALL_OPTS = -m 644\r
+INSTALL_OPTS_LIB = -m 644\r
+INSTALL_DIR_OPTS = -m 755\r
+\r
+ifneq (,$(shell $(CXX) -v 2>&1 | tail -n 1 | grep -i mingw))\r
+$(error Please use the Makefile in ../mingw32)\r
+endif\r
+\r
+CWD=$(shell pwd)\r
+\r
+# Options\r
+LIBEBML_INCLUDE_DIR=$(CWD)/../../../libebml\r
+LIBEBML_LIB_DIR=$(CWD)/../../../libebml/make/linux\r
+EXTENSION=.cpp\r
+\r
+ifeq (yes,$(DEBUG))\r
+DEBUGFLAGS=-g -DDEBUG\r
+endif\r
+\r
+SRC_DIR=$(CWD)/../../src/\r
+INCLUDE_DIR=$(CWD)/../../matroska\r
+MUX_SRC_DIR=$(CWD)/../../test/mux/\r
+TAG_SRC_DIR=$(CWD)/../../test/tags/\r
+\r
+# Librarires\r
+INCLUDE=-I$(CWD)/../.. -I$(LIBEBML_INCLUDE_DIR)\r
+LIBS=\r
+MUX_LIBS=-lmatroska -lebml $(LIBICONV)\r
+\r
+# Names\r
+LIBRARY=libmatroska.a\r
+LIBRARY_SO=libmatroska.so\r
+LIBRARY_SO_VER=libmatroska.so.0\r
+\r
+# source-files\r
+sources:=$(wildcard ${SRC_DIR}*$(EXTENSION))\r
+\r
+# header files; replace .cxx extension with .h\r
+headers:=$(patsubst %$(EXTENSION),%.h,$(sources))\r
+\r
+# object files; replace .cxx extension with .o\r
+objects:=$(patsubst %$(EXTENSION),%.o,$(sources))\r
+\r
+objects_so:=$(patsubst %$(EXTENSION),%.lo,$(sources))\r
+\r
+WARNINGFLAGS=-Wall -Wno-unknown-pragmas -ansi -fno-gnu-keywords -D_GNU_SOURCE \\r
+               -Wshadow\r
+COMPILEFLAGS=$(DEBUGFLAGS) $(CXXFLAGS) $(CPPFLAGS) $(WARNINGFLAGS) $(INCLUDE)\r
+LINKFLAGS=-L. -L$(LIBEBML_LIB_DIR) $(LDFLAGS)\r
+DEPENDFLAGS  = $(CXXFLAGS) $(INCLUDE)\r
+\r
+ifeq (Darwin,$(shell uname -s))\r
+all: staticlib\r
+else\r
+all: staticlib sharedlib\r
+endif\r
+\r
+staticlib: $(LIBRARY)\r
+\r
+sharedlib: $(LIBRARY_SO)\r
+\r
+lib:\r
+       @echo "Use the 'staticlib', 'sharedlib' or 'all' targets."\r
+       @false\r
+\r
+# Build rules\r
+%.o: %$(EXTENSION)\r
+       $(CXX) -c $(COMPILEFLAGS) -o $@ $<\r
+\r
+%.lo: %$(EXTENSION)\r
+       $(CXX) -c $(COMPILEFLAGS) -fPIC -o $@ $<\r
+\r
+$(LIBRARY): $(objects)\r
+       $(AR) $@ $(objects)\r
+       $(RANLIB) $@\r
+\r
+$(LIBRARY_SO): $(objects_so)\r
+       $(CXX) -shared -Wl,-soname,$(LIBRARY_SO_VER) -o $(LIBRARY_SO_VER) $(objects_so) -lebml\r
+       rm -f $(LIBRARY_SO)\r
+       ln -s $(LIBRARY_SO_VER) $(LIBRARY_SO)\r
+\r
+clean: cleantest\r
+       rm -f $(objects) $(objects_so)\r
+       rm -f $(LIBRARY)\r
+       rm -f $(LIBRARY_SO)\r
+       rm -f $(LIBRARY_SO_VER)\r
+       rm -f CORE\r
+\r
+cleantest:\r
+       rm -f test6 test8 test9 test6.o test8.o test9.o\r
+\r
+distclean dist-clean: clean\r
+       rm -f .depend\r
+\r
+depend:\r
+       @echo Calculating dependecies:\r
+       @rm -f .depend\r
+       @touch .depend\r
+       @for i in $(sources); do \\r
+               o="`echo $$i | sed -e 's/\.c$$/.o/' -e 's/\.cpp$$/.o/'`" ; \\r
+               echo '  ' $$i: $$o ; \\r
+               $(CXX) $(DEPENDFLAGS) -MM -MT $$o $$i >> .depend ; \\r
+       done\r
+\r
+test: test6 test9\r
+\r
+test6: test6.o $(LIBRARY) $(LIBRARY_SO)\r
+       $(LD) -o $@ $(LINKFLAGS) $< $(MUX_LIBS)\r
+\r
+test6.o: $(MUX_SRC_DIR)test6.cpp\r
+       $(CXX) -c $(COMPILEFLAGS) -o $@ $<\r
+\r
+test8: test8.o $(LIBRARY) $(LIBRARY_SO)\r
+       $(LD) -o $@ $(LINKFLAGS) $< $(MUX_LIBS)\r
+\r
+test8.o: $(MUX_SRC_DIR)test8.cpp\r
+       $(CXX) -c $(COMPILEFLAGS) -o $@ $<\r
+\r
+test9: test9.o $(LIBRARY) $(LIBRARY_SO)\r
+       $(LD) -o $@ $(LINKFLAGS) $< $(MUX_LIBS)\r
+\r
+test9.o: $(TAG_SRC_DIR)test9.cpp\r
+       $(CXX) -c $(COMPILEFLAGS) -o $@ $<\r
+\r
+ifeq (Darwin,$(shell uname -s))\r
+install: install_staticlib install_headers\r
+else\r
+install: install_staticlib install_sharedlib install_headers\r
+endif\r
+\r
+install_headers:\r
+       $(INSTALL) $(INSTALL_DIR_OPTS) -d $(includedir)\r
+       for i in $(INCLUDE_DIR)/*.h; do \\r
+               $(INSTALL) $(INSTALL_OPTS) $$i $(includedir) ; \\r
+       done\r
+       $(INSTALL) $(INSTALL_DIR_OPTS) -d $(includedir)/c\r
+       for i in $(INCLUDE_DIR)/c/*.h; do \\r
+               $(INSTALL) $(INSTALL_OPTS) $$i $(includedir)/c ; \\r
+       done\r
+\r
+install_staticlib: $(LIBRARY)\r
+       $(INSTALL) $(INSTALL_DIR_OPTS) -d $(libdir)\r
+       $(INSTALL) $(INSTALL_OPTS_LIB) $(LIBRARY) $(libdir)\r
+\r
+install_sharedlib: $(LIBRARY_SO)\r
+       $(INSTALL) $(INSTALL_DIR_OPTS) -d $(libdir)\r
+       $(INSTALL) $(INSTALL_OPTS_LIB) $(LIBRARY_SO_VER) $(libdir)\r
+       ln -fs $(LIBRARY_SO_VER) $(libdir)/$(LIBRARY_SO)\r
+\r
+ifneq ($(wildcard .depend),)\r
+include .depend\r
+endif\r
+\r
+# DO NOT DELETE\r
diff --git a/make/linux/Makefile.rule b/make/linux/Makefile.rule
new file mode 100644 (file)
index 0000000..2b9b7e2
--- /dev/null
@@ -0,0 +1,98 @@
+##\r
+## This Makefile is made for cygwin, but might probably work on any standard UNIX too\r
+##\r
+\r
+#****************************************************************************\r
+\r
+# DEBUG can be set to YES to include debugging info, or NO otherwise\r
+DEBUG          = YES\r
+\r
+# PROFILE can be set to YES to include profiling info, or NO otherwise\r
+PROFILE        = NO\r
+\r
+#****************************************************************************\r
+\r
+CC     = gcc\r
+CXX    = g++\r
+LD     = gcc\r
+AR     = ar rcvu\r
+RANLIB = ranlib\r
+DEPEND = makedepend\r
+INDENT =indent --gnu-style -ut -ts6 -br -npsl -npcs\r
+DELETE =rm -f\r
+\r
+GLOBAL_CFLAGS   = -Wall -Wno-unknown-pragmas -Wno-format \r
+DEBUG_CFLAGS    = -g -O0 -DDEBUG ${GLOBAL_CFLAGS}\r
+RELEASE_CFLAGS  =  -O2 ${GLOBAL_CFLAGS}\r
+\r
+P_OPTIONS = -pedantic\r
+\r
+LIBS =\r
+\r
+DEBUG_CXXFLAGS   = ${DEBUG_CFLAGS}\r
+RELEASE_CXXFLAGS = ${RELEASE_CFLAGS}\r
+\r
+DEBUG_LDFLAGS    = -g\r
+RELEASE_LDFLAGS  =\r
+\r
+ifeq (YES, ${DEBUG})\r
+   CFLAGS       = ${DEBUG_CFLAGS} ${INCS} ${P_OPTIONS}\r
+   CXXFLAGS     = ${DEBUG_CXXFLAGS} ${INCS} ${P_OPTIONS}\r
+   LDFLAGS      = ${DEBUG_LDFLAGS}\r
+   DEPENDFLAGS  = ${DEBUG_CFLAGS} ${INCS}\r
+else\r
+   CFLAGS       = ${RELEASE_CFLAGS} ${INCS} ${P_OPTIONS}\r
+   CXXFLAGS     = ${RELEASE_CXXFLAGS} ${INCS} ${P_OPTIONS}\r
+   LDFLAGS      = ${RELEASE_LDFLAGS}\r
+   DEPENDFLAGS  = ${RELEASE_CFLAGS} ${INCS}\r
+endif\r
+\r
+ifeq (YES, ${PROFILE})\r
+   CFLAGS   := ${CFLAGS} -pg\r
+   CXXFLAGS := ${CXXFLAGS} -pg\r
+   LDFLAGS  := ${LDFLAGS} -pg\r
+endif\r
+\r
+#****************************************************************************\r
+# Preprocessor directives\r
+#****************************************************************************\r
+\r
+ifeq (YES, ${PROFILE})\r
+  DEFS =\r
+else\r
+  DEFS =\r
+endif\r
+\r
+#****************************************************************************\r
+# Include paths\r
+#****************************************************************************\r
+\r
+#INCS := -I/usr/include/g++-2 -I/usr/local/include\r
+#INCS =\r
+\r
+\r
+#****************************************************************************\r
+# Makefile code common to all platforms\r
+#****************************************************************************\r
+\r
+CFLAGS   := ${CFLAGS}   ${DEFS}\r
+CXXFLAGS := ${CXXFLAGS} ${DEFS}\r
+\r
+#****************************************************************************\r
+# General rules\r
+#****************************************************************************\r
+\r
+indent:\r
+       $(INDENT) --line-length 100 ${SRCS} ${SRCS_HEADERS}\r
+       $(DELETE) *.*~\r
+\r
+indent80:\r
+       $(INDENT) --line-length 80 ${SRCS} ${SRCS_HEADERS}\r
+       $(DELETE) *.*~\r
+\r
+clean:\r
+       rm -f core *.o *.so *.a *.exe\r
+\r
+# what are the source dependencies\r
+depend: $(SRCS)\r
+       $(DEPEND) $(DEPENDFLAGS) $(SRCS)\r
diff --git a/make/linux/check_ids b/make/linux/check_ids
new file mode 100644 (file)
index 0000000..26d27a9
--- /dev/null
@@ -0,0 +1,18 @@
+#!/bin/sh\r
+\r
+# A small script that looks for duplicate EBML IDs in all of libmatroska's\r
+# source files.\r
+\r
+echo 'Duplicate IDs:'\r
+grep -h '^EbmlId.*_TheId' ../../src/*cpp | \\r
+  sed -e 's/TheId/TheId /' | \\r
+  awk '{ print $3 }' | \\r
+  sed -e 's/(//' -e 's/,//' | \\r
+  sort  | \\r
+  uniq -d | \\r
+( while read id ; do\r
+    echo ''\r
+    echo ${id}:\r
+    grep -i $id ../../src/*cpp\r
+  done )\r
+\r
diff --git a/make/linux/fedora-core.spec b/make/linux/fedora-core.spec
new file mode 100644 (file)
index 0000000..be886d0
--- /dev/null
@@ -0,0 +1,61 @@
+# SPEC file for (at least) Fedora Core 1, 2, 3\r
+\r
+Name:          libmatroska\r
+Version: 0.8.1\r
+Release: 1\r
+License:       LGPL\r
+Summary:       Matroska Video Container\r
+Group:         System Environment/Libraries\r
+URL:           http://www.matroska.org/\r
+Vendor:         Moritz Bunkus <moritz@bunkus.org>\r
+Source:        http://dl.matroska.org/downloads/%{name}/%{name}-%{version}.tar.bz2\r
+BuildRoot:     %{_tmppath}/%{name}-root\r
+\r
+%description\r
+Matroska aims to become THE Standard of Multimedia Container Formats.\r
+It was derived from a project called MCF, but differentiates from it\r
+significantly because it is based on  EBML (Extensible Binary Meta\r
+Language), a binary derivative of XML. EBML enables the Matroska\r
+Development Team to gain significant advantages in terms of future\r
+format extensibility, without breaking file support in old parsers.\r
+\r
+%package devel\r
+Summary:       Matroska Video Container headers/development files\r
+Group:         Development/Libraries\r
+\r
+%description devel\r
+Headers for libmatroska.\r
+\r
+%prep\r
+%setup -q\r
+\r
+%build\r
+cd make/linux\r
+CFLAGS="$RPM_OPT_FLAGS" \\r
+make \\r
+prefix="%{_prefix}" \\r
+LIBEBML_INCLUDE_DIR=%{_includedir} \\r
+LIBEBML_LIB_DIR=%{_libdir} \\r
+staticlib\r
+cd ../..\r
+\r
+%install\r
+[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT\r
+cd make/linux\r
+make prefix=$RPM_BUILD_ROOT/%{_prefix} install_staticlib install_headers\r
+cd ../..\r
+\r
+%clean\r
+[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT\r
+\r
+%files devel\r
+%defattr(-, root, root)\r
+%{_includedir}/matroska/*.h\r
+%{_includedir}/matroska/c/*.h\r
+%{_libdir}/libmatroska.a\r
+\r
+%changelog\r
+* Sat Apr 16 2005 Moritz Bunkus <moritz@bunkus.org>\r
+- updated for the new libmatroska build targets\r
+* Fri May 15 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>\r
+- create spec file\r
diff --git a/make/linux/suse-libmatroska-makefile.diff b/make/linux/suse-libmatroska-makefile.diff
new file mode 100644 (file)
index 0000000..4b59a93
--- /dev/null
@@ -0,0 +1,14 @@
+--- libmatroska-0.7.3/make/linux/Makefile~     2004-07-19 18:43:44.000000000 +0200\r
++++ libmatroska-0.7.3/make/linux/Makefile      2004-09-01 22:36:35.696238264 +0200\r
+@@ -14,9 +14,9 @@\r
+ ifeq (BeOS,$(shell uname -s))\r
+ prefix=/boot/home/config\r
+ else\r
+-prefix=/usr/local\r
++prefix=$(PREFIX)\r
+ endif\r
+-libdir=$(prefix)/lib\r
++libdir=$(LIBDIR)\r
+ includedir=$(prefix)/include/matroska\r
\r
+ # Programs\r
diff --git a/make/linux/suse.spec b/make/linux/suse.spec
new file mode 100644 (file)
index 0000000..d5035e6
--- /dev/null
@@ -0,0 +1,75 @@
+#\r
+# spec file for package libmatroska for (at least) SuSE 9.0, 9.1\r
+#\r
+# Copyright (c) 2004 SUSE LINUX AG, Nuernberg, Germany.\r
+# This file and all modifications and additions to the pristine\r
+# package are under the same license as the package itself.\r
+#\r
+# Please submit bugfixes or comments via http://www.suse.de/feedback/\r
+#\r
+\r
+# neededforbuild  gcc-c++ libebml libstdc++-devel\r
+\r
+BuildRequires: bzip2 cpp libebml make patch tar zlib zlib-devel binutils gcc gcc-c++ libstdc++-devel perl rpm\r
+\r
+Name:         libmatroska\r
+URL:          http://dl.matroska.org/downloads/libmatroska/\r
+Version: 0.8.1\r
+Release: 1\r
+Summary:      library to deal with matroska files.\r
+License:      LGPL\r
+Group:        Development/Libraries/Other\r
+Source:       %{name}-%{version}.tar.bz2\r
+Patch:        suse-libmatroska-makefile.diff\r
+Summary:      library to deal with matroska files.\r
+BuildRoot:    %{_tmppath}/%{name}-%{version}-build\r
+Prefix:       /usr\r
+\r
+%description\r
+libmatroska is a C++ libary to parse Matroska files (.mkv and .mka). It\r
+depends on libebml to work. You only need this package to compile your\r
+own applications.\r
+\r
+\r
+\r
+Authors:\r
+--------\r
+    Steve Lhomme <steve.lhomme@free.fr>\r
+    Moritz Bunkus <moritz@bunkus.org>\r
+\r
+%prep\r
+rm -rf $RPM_BUILD_ROOT\r
+%setup\r
+%patch -p1\r
+\r
+%build\r
+export CFLAGS="$RPM_OPT_FLAGS"\r
+cd make/linux\r
+make PREFIX=$RPM_BUILD_ROOT/usr LIBDIR=%{_libdir} staticlib\r
+\r
+%install\r
+cd make/linux\r
+make install_staticlib install_headers PREFIX=$RPM_BUILD_ROOT/usr LIBDIR=$RPM_BUILD_ROOT/%{_libdir}\r
+\r
+%clean\r
+rm -rf $RPM_BUILD_ROOT\r
+\r
+%post\r
+%run_ldconfig\r
+\r
+%postun\r
+%run_ldconfig\r
+\r
+%files\r
+%defattr (-,root,root)\r
+%{_libdir}/libmatroska.a\r
+/usr/include/matroska\r
+# /usr/include/ebml/*\r
+\r
+%changelog -n libmatroska\r
+* Sat Apr 16 2005 - moritz@bunkus.org\r
+- updated for the new libmatroska build targets\r
+* Thu Sep 02 2004 - seife@suse.de\r
+- add libebml to neededforbuild\r
+* Wed Sep 01 2004 - seife@suse.de\r
+- initial submission\r
diff --git a/make/macosx/macosx.pbproj/project.pbxproj b/make/macosx/macosx.pbproj/project.pbxproj
new file mode 100644 (file)
index 0000000..9d9f2d9
--- /dev/null
@@ -0,0 +1,3160 @@
+// !$*UTF8*$!
+{
+       archiveVersion = 1;
+       classes = {
+       };
+       objectVersion = 38;
+       objects = {
+               014CEA460018CE2711CA2923 = {
+                       buildRules = (
+                       );
+                       buildSettings = {
+                               COPY_PHASE_STRIP = NO;
+                               OPTIMIZATION_CFLAGS = "-O0";
+                       };
+                       isa = PBXBuildStyle;
+                       name = Development;
+               };
+               014CEA470018CE2711CA2923 = {
+                       buildRules = (
+                       );
+                       buildSettings = {
+                               COPY_PHASE_STRIP = YES;
+                       };
+                       isa = PBXBuildStyle;
+                       name = Deployment;
+               };
+//010
+//011
+//012
+//013
+//014
+//020
+//021
+//022
+//023
+//024
+               0249A662FF388D9811CA2CEA = {
+                       children = (
+                               0249A663FF388D9811CA2CEA,
+                       );
+                       isa = PBXGroup;
+                       name = "External Frameworks and Libraries";
+                       refType = 4;
+               };
+               0249A663FF388D9811CA2CEA = {
+                       isa = PBXFileReference;
+                       name = "libstdc++.a";
+                       path = "/usr/lib/libstdc++.a";
+                       refType = 0;
+               };
+//020
+//021
+//022
+//023
+//024
+//080
+//081
+//082
+//083
+//084
+               08FB7793FE84155DC02AAC07 = {
+                       buildStyles = (
+                               014CEA460018CE2711CA2923,
+                               014CEA470018CE2711CA2923,
+                       );
+                       hasScannedForEncodings = 1;
+                       isa = PBXProject;
+                       mainGroup = 08FB7794FE84155DC02AAC07;
+                       projectDirPath = "";
+                       targets = (
+                               9091E15804C1CB5C0040EA6E,
+                               9091E15F04C1CBC10040EA6E,
+                               9091E16604C1CBD40040EA6E,
+                       );
+               };
+               08FB7794FE84155DC02AAC07 = {
+                       children = (
+                               08FB7795FE84155DC02AAC07,
+                               C6859E8C029090F304C91782,
+                               0249A662FF388D9811CA2CEA,
+                               1AB674ADFE9D54B511CA2CBB,
+                       );
+                       isa = PBXGroup;
+                       name = macosx;
+                       refType = 4;
+               };
+               08FB7795FE84155DC02AAC07 = {
+                       children = (
+                               9091E08104C1C8DB0040EA6E,
+                               9091E08204C1C8E60040EA6E,
+                               9091E08304C1C9520040EA6E,
+                               9091E08404C1C9520040EA6E,
+                               9091E08704C1C99A0040EA6E,
+                       );
+                       isa = PBXGroup;
+                       name = Source;
+                       refType = 4;
+               };
+//080
+//081
+//082
+//083
+//084
+//1A0
+//1A1
+//1A2
+//1A3
+//1A4
+               1AB674ADFE9D54B511CA2CBB = {
+                       children = (
+                               9091E15904C1CB5C0040EA6E,
+                               9091E16004C1CBC10040EA6E,
+                               9091E16704C1CBD40040EA6E,
+                       );
+                       isa = PBXGroup;
+                       name = Products;
+                       refType = 4;
+               };
+//1A0
+//1A1
+//1A2
+//1A3
+//1A4
+//900
+//901
+//902
+//903
+//904
+               9037F21F04C1E6F90076A2E7 = {
+                       fileRef = 9091E0F404C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9037F22004C1E7240076A2E7 = {
+                       fileEncoding = 12;
+                       isa = PBXFileReference;
+                       name = EbmlDummy.cpp;
+                       path = ../../../libebml/src/EbmlDummy.cpp;
+                       refType = 2;
+               };
+               9037F22104C1E7240076A2E7 = {
+                       fileEncoding = 12;
+                       isa = PBXFileReference;
+                       name = EbmlElement.cpp;
+                       path = ../../../libebml/src/EbmlElement.cpp;
+                       refType = 2;
+               };
+               9037F22204C1E7240076A2E7 = {
+                       fileRef = 9037F22004C1E7240076A2E7;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9037F22304C1E7240076A2E7 = {
+                       fileRef = 9037F22104C1E7240076A2E7;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9037F22404C1E7240076A2E7 = {
+                       fileRef = 9037F22004C1E7240076A2E7;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9037F22504C1E7240076A2E7 = {
+                       fileRef = 9037F22104C1E7240076A2E7;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9037F22604C1E7240076A2E7 = {
+                       fileRef = 9037F22004C1E7240076A2E7;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9037F22704C1E7240076A2E7 = {
+                       fileRef = 9037F22104C1E7240076A2E7;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9037F22804C1F5400076A2E7 = {
+                       fileRef = 0249A663FF388D9811CA2CEA;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9037F22904C1F5460076A2E7 = {
+                       fileRef = 0249A663FF388D9811CA2CEA;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9037F22A04C1F5490076A2E7 = {
+                       fileRef = 0249A663FF388D9811CA2CEA;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E08104C1C8DB0040EA6E = {
+                       children = (
+                               9091E08B04C1C9D80040EA6E,
+                               9091E08C04C1C9DF0040EA6E,
+                       );
+                       isa = PBXGroup;
+                       name = libebml;
+                       refType = 4;
+               };
+               9091E08204C1C8E60040EA6E = {
+                       children = (
+                               9091E08A04C1C9D00040EA6E,
+                               9091E08904C1C9C80040EA6E,
+                       );
+                       isa = PBXGroup;
+                       name = libmatroska;
+                       refType = 4;
+               };
+               9091E08304C1C9520040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = test6.cpp;
+                       path = ../../test/mux/test6.cpp;
+                       refType = 2;
+               };
+               9091E08404C1C9520040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = test8.cpp;
+                       path = ../../test/mux/test8.cpp;
+                       refType = 2;
+               };
+               9091E08704C1C99A0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = test9.cpp;
+                       path = ../../test/tags/test9.cpp;
+                       refType = 2;
+               };
+               9091E08904C1C9C80040EA6E = {
+                       children = (
+                               9091E0BB04C1CA1D0040EA6E,
+                               9091E0BC04C1CA1D0040EA6E,
+                               9091E0BD04C1CA1D0040EA6E,
+                               9091E0BE04C1CA1D0040EA6E,
+                               9091E0BF04C1CA1D0040EA6E,
+                               9091E0C004C1CA1D0040EA6E,
+                               9091E0C104C1CA1D0040EA6E,
+                               9091E0C204C1CA1D0040EA6E,
+                               9091E0C304C1CA1D0040EA6E,
+                               9091E0C404C1CA1D0040EA6E,
+                               9091E0C504C1CA1D0040EA6E,
+                               9091E0C604C1CA1D0040EA6E,
+                               9091E0C704C1CA1D0040EA6E,
+                               9091E0C804C1CA1D0040EA6E,
+                               9091E0C904C1CA1D0040EA6E,
+                               9091E0CA04C1CA1D0040EA6E,
+                               9091E0CB04C1CA1D0040EA6E,
+                               9091E0CC04C1CA1D0040EA6E,
+                               9091E0CD04C1CA1D0040EA6E,
+                               9091E0CE04C1CA1D0040EA6E,
+                               9091E0CF04C1CA1D0040EA6E,
+                               9091E0D004C1CA1D0040EA6E,
+                               9091E0D104C1CA1D0040EA6E,
+                               9091E0D204C1CA1D0040EA6E,
+                               9091E0D304C1CA1D0040EA6E,
+                       );
+                       isa = PBXGroup;
+                       name = headers;
+                       refType = 4;
+               };
+               9091E08A04C1C9D00040EA6E = {
+                       children = (
+                               9091E08D04C1C9FA0040EA6E,
+                               9091E08E04C1C9FA0040EA6E,
+                               9091E08F04C1C9FA0040EA6E,
+                               9091E09004C1C9FA0040EA6E,
+                               9091E09104C1C9FA0040EA6E,
+                               9091E09204C1C9FA0040EA6E,
+                               9091E09304C1C9FA0040EA6E,
+                               9091E09404C1C9FA0040EA6E,
+                               9091E09504C1C9FA0040EA6E,
+                               9091E09604C1C9FA0040EA6E,
+                               9091E09704C1C9FA0040EA6E,
+                               9091E09804C1C9FA0040EA6E,
+                               9091E09904C1C9FA0040EA6E,
+                               9091E09A04C1C9FA0040EA6E,
+                               9091E09B04C1C9FA0040EA6E,
+                               9091E09C04C1C9FA0040EA6E,
+                               9091E09D04C1C9FA0040EA6E,
+                               9091E09E04C1C9FA0040EA6E,
+                               9091E09F04C1C9FA0040EA6E,
+                               9091E0A004C1C9FA0040EA6E,
+                               9091E0A104C1C9FA0040EA6E,
+                               9091E0A204C1C9FA0040EA6E,
+                               9091E0A304C1C9FA0040EA6E,
+                       );
+                       isa = PBXGroup;
+                       name = sources;
+                       refType = 4;
+               };
+               9091E08B04C1C9D80040EA6E = {
+                       children = (
+                               9091E11D04C1CA760040EA6E,
+                               9091E11E04C1CA760040EA6E,
+                               9091E11F04C1CA760040EA6E,
+                               9091E12004C1CA760040EA6E,
+                               9091E12104C1CA760040EA6E,
+                               9037F22004C1E7240076A2E7,
+                               9037F22104C1E7240076A2E7,
+                               9091E12304C1CA760040EA6E,
+                               9091E12404C1CA760040EA6E,
+                               9091E12504C1CA760040EA6E,
+                               9091E12604C1CA760040EA6E,
+                               9091E12704C1CA760040EA6E,
+                               9091E12804C1CA760040EA6E,
+                               9091E12904C1CA760040EA6E,
+                               9091E12A04C1CA760040EA6E,
+                               9091E12B04C1CA760040EA6E,
+                               9091E12C04C1CA760040EA6E,
+                               9091E12D04C1CA760040EA6E,
+                               9091E12E04C1CA760040EA6E,
+                               9091E12F04C1CA760040EA6E,
+                               9091E13004C1CA760040EA6E,
+                       );
+                       isa = PBXGroup;
+                       name = sources;
+                       refType = 4;
+               };
+               9091E08C04C1C9DF0040EA6E = {
+                       children = (
+                               9091E0ED04C1CA580040EA6E,
+                               9091E0EE04C1CA580040EA6E,
+                               9091E0EF04C1CA580040EA6E,
+                               9091E0F004C1CA580040EA6E,
+                               9091E0F104C1CA580040EA6E,
+                               9091E0F204C1CA580040EA6E,
+                               9091E12204C1CA760040EA6E,
+                               9091E0F304C1CA580040EA6E,
+                               9091E0F404C1CA580040EA6E,
+                               9091E0F504C1CA580040EA6E,
+                               9091E0F604C1CA580040EA6E,
+                               9091E0F704C1CA580040EA6E,
+                               9091E0F804C1CA580040EA6E,
+                               9091E0F904C1CA580040EA6E,
+                               9091E0FA04C1CA580040EA6E,
+                               9091E0FB04C1CA580040EA6E,
+                               9091E0FC04C1CA580040EA6E,
+                               9091E0FD04C1CA580040EA6E,
+                               9091E0FE04C1CA580040EA6E,
+                               9091E0FF04C1CA590040EA6E,
+                               9091E10004C1CA590040EA6E,
+                               9091E10104C1CA590040EA6E,
+                               9091E10204C1CA590040EA6E,
+                               9091E10304C1CA590040EA6E,
+                               9091E10404C1CA590040EA6E,
+                       );
+                       isa = PBXGroup;
+                       name = headers;
+                       refType = 4;
+               };
+               9091E08D04C1C9FA0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = FileKax.cpp;
+                       path = ../../src/FileKax.cpp;
+                       refType = 2;
+               };
+               9091E08E04C1C9FA0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxAttached.cpp;
+                       path = ../../src/KaxAttached.cpp;
+                       refType = 2;
+               };
+               9091E08F04C1C9FA0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxAttachments.cpp;
+                       path = ../../src/KaxAttachments.cpp;
+                       refType = 2;
+               };
+               9091E09004C1C9FA0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxBlock.cpp;
+                       path = ../../src/KaxBlock.cpp;
+                       refType = 2;
+               };
+               9091E09104C1C9FA0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxBlockData.cpp;
+                       path = ../../src/KaxBlockData.cpp;
+                       refType = 2;
+               };
+               9091E09204C1C9FA0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxChapters.cpp;
+                       path = ../../src/KaxChapters.cpp;
+                       refType = 2;
+               };
+               9091E09304C1C9FA0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxCluster.cpp;
+                       path = ../../src/KaxCluster.cpp;
+                       refType = 2;
+               };
+               9091E09404C1C9FA0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxClusterData.cpp;
+                       path = ../../src/KaxClusterData.cpp;
+                       refType = 2;
+               };
+               9091E09504C1C9FA0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxContexts.cpp;
+                       path = ../../src/KaxContexts.cpp;
+                       refType = 2;
+               };
+               9091E09604C1C9FA0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxCues.cpp;
+                       path = ../../src/KaxCues.cpp;
+                       refType = 2;
+               };
+               9091E09704C1C9FA0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxCuesData.cpp;
+                       path = ../../src/KaxCuesData.cpp;
+                       refType = 2;
+               };
+               9091E09804C1C9FA0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxInfo.cpp;
+                       path = ../../src/KaxInfo.cpp;
+                       refType = 2;
+               };
+               9091E09904C1C9FA0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxInfoData.cpp;
+                       path = ../../src/KaxInfoData.cpp;
+                       refType = 2;
+               };
+               9091E09A04C1C9FA0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxSeekHead.cpp;
+                       path = ../../src/KaxSeekHead.cpp;
+                       refType = 2;
+               };
+               9091E09B04C1C9FA0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxSegment.cpp;
+                       path = ../../src/KaxSegment.cpp;
+                       refType = 2;
+               };
+               9091E09C04C1C9FA0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxTag.cpp;
+                       path = ../../src/KaxTag.cpp;
+                       refType = 2;
+               };
+               9091E09D04C1C9FA0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxTagMulti.cpp;
+                       path = ../../src/KaxTagMulti.cpp;
+                       refType = 2;
+               };
+               9091E09E04C1C9FA0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxTags.cpp;
+                       path = ../../src/KaxTags.cpp;
+                       refType = 2;
+               };
+               9091E09F04C1C9FA0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxTrackAudio.cpp;
+                       path = ../../src/KaxTrackAudio.cpp;
+                       refType = 2;
+               };
+               9091E0A004C1C9FA0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxTrackEntryData.cpp;
+                       path = ../../src/KaxTrackEntryData.cpp;
+                       refType = 2;
+               };
+               9091E0A104C1C9FA0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxTracks.cpp;
+                       path = ../../src/KaxTracks.cpp;
+                       refType = 2;
+               };
+               9091E0A204C1C9FA0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxTrackVideo.cpp;
+                       path = ../../src/KaxTrackVideo.cpp;
+                       refType = 2;
+               };
+               9091E0A304C1C9FA0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxVersion.cpp;
+                       path = ../../src/KaxVersion.cpp;
+                       refType = 2;
+               };
+               9091E0BB04C1CA1D0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = FileKax.h;
+                       path = ../../matroska/FileKax.h;
+                       refType = 2;
+               };
+               9091E0BC04C1CA1D0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxAttached.h;
+                       path = ../../matroska/KaxAttached.h;
+                       refType = 2;
+               };
+               9091E0BD04C1CA1D0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxAttachments.h;
+                       path = ../../matroska/KaxAttachments.h;
+                       refType = 2;
+               };
+               9091E0BE04C1CA1D0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxBlock.h;
+                       path = ../../matroska/KaxBlock.h;
+                       refType = 2;
+               };
+               9091E0BF04C1CA1D0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxBlockData.h;
+                       path = ../../matroska/KaxBlockData.h;
+                       refType = 2;
+               };
+               9091E0C004C1CA1D0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxChapters.h;
+                       path = ../../matroska/KaxChapters.h;
+                       refType = 2;
+               };
+               9091E0C104C1CA1D0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxCluster.h;
+                       path = ../../matroska/KaxCluster.h;
+                       refType = 2;
+               };
+               9091E0C204C1CA1D0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxClusterData.h;
+                       path = ../../matroska/KaxClusterData.h;
+                       refType = 2;
+               };
+               9091E0C304C1CA1D0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxConfig.h;
+                       path = ../../matroska/KaxConfig.h;
+                       refType = 2;
+               };
+               9091E0C404C1CA1D0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxContexts.h;
+                       path = ../../matroska/KaxContexts.h;
+                       refType = 2;
+               };
+               9091E0C504C1CA1D0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxCues.h;
+                       path = ../../matroska/KaxCues.h;
+                       refType = 2;
+               };
+               9091E0C604C1CA1D0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxCuesData.h;
+                       path = ../../matroska/KaxCuesData.h;
+                       refType = 2;
+               };
+               9091E0C704C1CA1D0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxInfo.h;
+                       path = ../../matroska/KaxInfo.h;
+                       refType = 2;
+               };
+               9091E0C804C1CA1D0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxInfoData.h;
+                       path = ../../matroska/KaxInfoData.h;
+                       refType = 2;
+               };
+               9091E0C904C1CA1D0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxSeekHead.h;
+                       path = ../../matroska/KaxSeekHead.h;
+                       refType = 2;
+               };
+               9091E0CA04C1CA1D0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxSegment.h;
+                       path = ../../matroska/KaxSegment.h;
+                       refType = 2;
+               };
+               9091E0CB04C1CA1D0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxTag.h;
+                       path = ../../matroska/KaxTag.h;
+                       refType = 2;
+               };
+               9091E0CC04C1CA1D0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxTagMulti.h;
+                       path = ../../matroska/KaxTagMulti.h;
+                       refType = 2;
+               };
+               9091E0CD04C1CA1D0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxTags.h;
+                       path = ../../matroska/KaxTags.h;
+                       refType = 2;
+               };
+               9091E0CE04C1CA1D0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxTrackAudio.h;
+                       path = ../../matroska/KaxTrackAudio.h;
+                       refType = 2;
+               };
+               9091E0CF04C1CA1D0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxTrackEntryData.h;
+                       path = ../../matroska/KaxTrackEntryData.h;
+                       refType = 2;
+               };
+               9091E0D004C1CA1D0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxTracks.h;
+                       path = ../../matroska/KaxTracks.h;
+                       refType = 2;
+               };
+               9091E0D104C1CA1D0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxTrackVideo.h;
+                       path = ../../matroska/KaxTrackVideo.h;
+                       refType = 2;
+               };
+               9091E0D204C1CA1D0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxTypes.h;
+                       path = ../../matroska/KaxTypes.h;
+                       refType = 2;
+               };
+               9091E0D304C1CA1D0040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = KaxVersion.h;
+                       path = ../../matroska/KaxVersion.h;
+                       refType = 2;
+               };
+               9091E0ED04C1CA580040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = Debug.h;
+                       path = ../../../libebml/ebml/Debug.h;
+                       refType = 2;
+               };
+               9091E0EE04C1CA580040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlBinary.h;
+                       path = ../../../libebml/ebml/EbmlBinary.h;
+                       refType = 2;
+               };
+               9091E0EF04C1CA580040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlConfig.h;
+                       path = ../../../libebml/ebml/EbmlConfig.h;
+                       refType = 2;
+               };
+               9091E0F004C1CA580040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlContexts.h;
+                       path = ../../../libebml/ebml/EbmlContexts.h;
+                       refType = 2;
+               };
+               9091E0F104C1CA580040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlCrc32.h;
+                       path = ../../../libebml/ebml/EbmlCrc32.h;
+                       refType = 2;
+               };
+               9091E0F204C1CA580040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlDate.h;
+                       path = ../../../libebml/ebml/EbmlDate.h;
+                       refType = 2;
+               };
+               9091E0F304C1CA580040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlElement.h;
+                       path = ../../../libebml/ebml/EbmlElement.h;
+                       refType = 2;
+               };
+               9091E0F404C1CA580040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlEndian.h;
+                       path = ../../../libebml/ebml/EbmlEndian.h;
+                       refType = 2;
+               };
+               9091E0F504C1CA580040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlFloat.h;
+                       path = ../../../libebml/ebml/EbmlFloat.h;
+                       refType = 2;
+               };
+               9091E0F604C1CA580040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlHead.h;
+                       path = ../../../libebml/ebml/EbmlHead.h;
+                       refType = 2;
+               };
+               9091E0F704C1CA580040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlId.h;
+                       path = ../../../libebml/ebml/EbmlId.h;
+                       refType = 2;
+               };
+               9091E0F804C1CA580040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlMaster.h;
+                       path = ../../../libebml/ebml/EbmlMaster.h;
+                       refType = 2;
+               };
+               9091E0F904C1CA580040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlSInteger.h;
+                       path = ../../../libebml/ebml/EbmlSInteger.h;
+                       refType = 2;
+               };
+               9091E0FA04C1CA580040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlStream.h;
+                       path = ../../../libebml/ebml/EbmlStream.h;
+                       refType = 2;
+               };
+               9091E0FB04C1CA580040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlString.h;
+                       path = ../../../libebml/ebml/EbmlString.h;
+                       refType = 2;
+               };
+               9091E0FC04C1CA580040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlSubHead.h;
+                       path = ../../../libebml/ebml/EbmlSubHead.h;
+                       refType = 2;
+               };
+               9091E0FD04C1CA580040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlTypes.h;
+                       path = ../../../libebml/ebml/EbmlTypes.h;
+                       refType = 2;
+               };
+               9091E0FE04C1CA580040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlUInteger.h;
+                       path = ../../../libebml/ebml/EbmlUInteger.h;
+                       refType = 2;
+               };
+               9091E0FF04C1CA590040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlUnicodeString.h;
+                       path = ../../../libebml/ebml/EbmlUnicodeString.h;
+                       refType = 2;
+               };
+               9091E10004C1CA590040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlVersion.h;
+                       path = ../../../libebml/ebml/EbmlVersion.h;
+                       refType = 2;
+               };
+               9091E10104C1CA590040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlVoid.h;
+                       path = ../../../libebml/ebml/EbmlVoid.h;
+                       refType = 2;
+               };
+               9091E10204C1CA590040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = IOCallback.h;
+                       path = ../../../libebml/ebml/IOCallback.h;
+                       refType = 2;
+               };
+               9091E10304C1CA590040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = MemIOCallback.h;
+                       path = ../../../libebml/ebml/MemIOCallback.h;
+                       refType = 2;
+               };
+               9091E10404C1CA590040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = StdIOCallback.h;
+                       path = ../../../libebml/ebml/StdIOCallback.h;
+                       refType = 2;
+               };
+               9091E11D04C1CA760040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = Debug.cpp;
+                       path = ../../../libebml/src/Debug.cpp;
+                       refType = 2;
+               };
+               9091E11E04C1CA760040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlBinary.cpp;
+                       path = ../../../libebml/src/EbmlBinary.cpp;
+                       refType = 2;
+               };
+               9091E11F04C1CA760040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlContexts.cpp;
+                       path = ../../../libebml/src/EbmlContexts.cpp;
+                       refType = 2;
+               };
+               9091E12004C1CA760040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlCrc32.cpp;
+                       path = ../../../libebml/src/EbmlCrc32.cpp;
+                       refType = 2;
+               };
+               9091E12104C1CA760040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlDate.cpp;
+                       path = ../../../libebml/src/EbmlDate.cpp;
+                       refType = 2;
+               };
+               9091E12204C1CA760040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlDummy.h;
+                       path = /Users/stevelhomme/Documents/Matroska/work/libebml/ebml/EbmlDummy.h;
+                       refType = 0;
+               };
+               9091E12304C1CA760040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlFloat.cpp;
+                       path = ../../../libebml/src/EbmlFloat.cpp;
+                       refType = 2;
+               };
+               9091E12404C1CA760040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlHead.cpp;
+                       path = ../../../libebml/src/EbmlHead.cpp;
+                       refType = 2;
+               };
+               9091E12504C1CA760040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlMaster.cpp;
+                       path = ../../../libebml/src/EbmlMaster.cpp;
+                       refType = 2;
+               };
+               9091E12604C1CA760040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlSInteger.cpp;
+                       path = ../../../libebml/src/EbmlSInteger.cpp;
+                       refType = 2;
+               };
+               9091E12704C1CA760040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlStream.cpp;
+                       path = ../../../libebml/src/EbmlStream.cpp;
+                       refType = 2;
+               };
+               9091E12804C1CA760040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlString.cpp;
+                       path = ../../../libebml/src/EbmlString.cpp;
+                       refType = 2;
+               };
+               9091E12904C1CA760040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlSubHead.cpp;
+                       path = ../../../libebml/src/EbmlSubHead.cpp;
+                       refType = 2;
+               };
+               9091E12A04C1CA760040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlUInteger.cpp;
+                       path = ../../../libebml/src/EbmlUInteger.cpp;
+                       refType = 2;
+               };
+               9091E12B04C1CA760040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlUnicodeString.cpp;
+                       path = ../../../libebml/src/EbmlUnicodeString.cpp;
+                       refType = 2;
+               };
+               9091E12C04C1CA760040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlVersion.cpp;
+                       path = ../../../libebml/src/EbmlVersion.cpp;
+                       refType = 2;
+               };
+               9091E12D04C1CA760040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = EbmlVoid.cpp;
+                       path = ../../../libebml/src/EbmlVoid.cpp;
+                       refType = 2;
+               };
+               9091E12E04C1CA760040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = IOCallback.cpp;
+                       path = ../../../libebml/src/IOCallback.cpp;
+                       refType = 2;
+               };
+               9091E12F04C1CA760040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = MemIOCallback.cpp;
+                       path = ../../../libebml/src/MemIOCallback.cpp;
+                       refType = 2;
+               };
+               9091E13004C1CA760040EA6E = {
+                       fileEncoding = 5;
+                       isa = PBXFileReference;
+                       name = StdIOCallback.cpp;
+                       path = ../../../libebml/src/StdIOCallback.cpp;
+                       refType = 2;
+               };
+               9091E15404C1CB5C0040EA6E = {
+                       buildActionMask = 2147483647;
+                       files = (
+                               9091E18104C1CC050040EA6E,
+                               9091E18204C1CC060040EA6E,
+                               9091E18304C1CC060040EA6E,
+                               9091E18404C1CC070040EA6E,
+                               9091E18504C1CC080040EA6E,
+                               9091E18604C1CC080040EA6E,
+                               9091E18704C1CC090040EA6E,
+                               9091E18804C1CC090040EA6E,
+                               9091E18904C1CC0A0040EA6E,
+                               9091E18A04C1CC0A0040EA6E,
+                               9091E18B04C1CC0B0040EA6E,
+                               9091E18C04C1CC0B0040EA6E,
+                               9091E18D04C1CC0C0040EA6E,
+                               9091E18E04C1CC0C0040EA6E,
+                               9091E18F04C1CC0E0040EA6E,
+                               9091E19004C1CC0F0040EA6E,
+                               9091E19104C1CC100040EA6E,
+                               9091E19204C1CC100040EA6E,
+                               9091E19304C1CC110040EA6E,
+                               9091E19404C1CC110040EA6E,
+                               9091E19504C1CC120040EA6E,
+                               9091E19604C1CC130040EA6E,
+                               9091E19704C1CC140040EA6E,
+                               9091E19804C1CC140040EA6E,
+                               9091E19904C1CC150040EA6E,
+                               9091E19A04C1CC270040EA6E,
+                               9091E19B04C1CC270040EA6E,
+                               9091E19C04C1CC280040EA6E,
+                               9091E19D04C1CC280040EA6E,
+                               9091E19E04C1CC310040EA6E,
+                               9091E19F04C1CC320040EA6E,
+                               9091E1A004C1CC330040EA6E,
+                               9091E1A104C1CC330040EA6E,
+                               9091E1A204C1CC340040EA6E,
+                               9091E1A304C1CC350040EA6E,
+                               9091E1A404C1CC350040EA6E,
+                               9091E1A504C1CC360040EA6E,
+                               9091E1A604C1CC360040EA6E,
+                               9091E1A704C1CC370040EA6E,
+                               9091E1A804C1CC380040EA6E,
+                               9091E1A904C1CC380040EA6E,
+                               9091E1AA04C1CC390040EA6E,
+                               9091E1AB04C1CC390040EA6E,
+                               9091E1AC04C1CC3A0040EA6E,
+                               9091E1AD04C1CC3B0040EA6E,
+                               9091E1AE04C1CC3B0040EA6E,
+                               9091E1AF04C1CC3C0040EA6E,
+                               9091E1B004C1CC3C0040EA6E,
+                               9091E1B104C1CC3D0040EA6E,
+                       );
+                       isa = PBXHeadersBuildPhase;
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               9091E15504C1CB5C0040EA6E = {
+                       buildActionMask = 2147483647;
+                       files = (
+                               9091E16904C1CBED0040EA6E,
+                               9091E16A04C1CBF30040EA6E,
+                               9091E16B04C1CBF40040EA6E,
+                               9091E16C04C1CBF60040EA6E,
+                               9091E16D04C1CBF60040EA6E,
+                               9091E16E04C1CBF70040EA6E,
+                               9091E16F04C1CBF70040EA6E,
+                               9091E17004C1CBF80040EA6E,
+                               9091E17104C1CBF90040EA6E,
+                               9091E17204C1CBFA0040EA6E,
+                               9091E17304C1CBFA0040EA6E,
+                               9091E17404C1CBFB0040EA6E,
+                               9091E17504C1CBFC0040EA6E,
+                               9091E17604C1CBFC0040EA6E,
+                               9091E17704C1CBFD0040EA6E,
+                               9091E17804C1CBFE0040EA6E,
+                               9091E17904C1CBFE0040EA6E,
+                               9091E17A04C1CBFF0040EA6E,
+                               9091E17B04C1CBFF0040EA6E,
+                               9091E17C04C1CC000040EA6E,
+                               9091E17D04C1CC000040EA6E,
+                               9091E17E04C1CC010040EA6E,
+                               9091E17F04C1CC010040EA6E,
+                               9091E18004C1CC020040EA6E,
+                               9091E1B204C1CC400040EA6E,
+                               9091E1B304C1CC410040EA6E,
+                               9091E1B404C1CC410040EA6E,
+                               9091E1B504C1CC420040EA6E,
+                               9091E1B604C1CC420040EA6E,
+                               9091E1B704C1CC430040EA6E,
+                               9091E1B804C1CC440040EA6E,
+                               9091E1B904C1CC440040EA6E,
+                               9091E1BA04C1CC450040EA6E,
+                               9091E1BB04C1CC450040EA6E,
+                               9091E1BC04C1CC460040EA6E,
+                               9091E1BD04C1CC470040EA6E,
+                               9091E1BE04C1CC480040EA6E,
+                               9091E1BF04C1CC490040EA6E,
+                               9091E1C004C1CC490040EA6E,
+                               9091E1C104C1CC4A0040EA6E,
+                               9091E1C204C1CC4A0040EA6E,
+                               9091E1C304C1CC4B0040EA6E,
+                               9091E1C404C1CC4B0040EA6E,
+                               9091E1C504C1CC4C0040EA6E,
+                               9037F22404C1E7240076A2E7,
+                               9037F22504C1E7240076A2E7,
+                       );
+                       isa = PBXSourcesBuildPhase;
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               9091E15604C1CB5C0040EA6E = {
+                       buildActionMask = 2147483647;
+                       files = (
+                               9037F22904C1F5460076A2E7,
+                       );
+                       isa = PBXFrameworksBuildPhase;
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               9091E15704C1CB5C0040EA6E = {
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       isa = PBXRezBuildPhase;
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               9091E15804C1CB5C0040EA6E = {
+                       buildPhases = (
+                               9091E15404C1CB5C0040EA6E,
+                               9091E15504C1CB5C0040EA6E,
+                               9091E15604C1CB5C0040EA6E,
+                               9091E15704C1CB5C0040EA6E,
+                       );
+                       buildSettings = {
+                               HEADER_SEARCH_PATHS = "../../../libebml ../..";
+                               LIBRARY_SEARCH_PATHS = /usr/lib/gcc/darwin/3.1;
+                               OTHER_CFLAGS = "";
+                               OTHER_LDFLAGS = "";
+                               OTHER_REZFLAGS = "";
+                               PRODUCT_NAME = test6;
+                               REZ_EXECUTABLE = YES;
+                               SECTORDER_FLAGS = "";
+                               WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas";
+                       };
+                       dependencies = (
+                       );
+                       isa = PBXToolTarget;
+                       name = test6;
+                       productInstallPath = /usr/local/bin;
+                       productName = test6;
+                       productReference = 9091E15904C1CB5C0040EA6E;
+               };
+               9091E15904C1CB5C0040EA6E = {
+                       isa = PBXExecutableFileReference;
+                       path = test6;
+                       refType = 3;
+               };
+               9091E15B04C1CBC10040EA6E = {
+                       buildActionMask = 2147483647;
+                       files = (
+                               9091E22604C1CDEE0040EA6E,
+                               9091E22704C1CDEE0040EA6E,
+                               9091E22804C1CDEF0040EA6E,
+                               9091E22904C1CDF00040EA6E,
+                               9091E22A04C1CDF10040EA6E,
+                               9091E22B04C1CDF10040EA6E,
+                               9091E22C04C1CDF20040EA6E,
+                               9091E22D04C1CDF90040EA6E,
+                               9091E22E04C1CDF90040EA6E,
+                               9091E22F04C1CDFA0040EA6E,
+                               9091E23004C1CDFA0040EA6E,
+                               9091E23104C1CDFB0040EA6E,
+                               9091E23204C1CDFB0040EA6E,
+                               9091E23304C1CDFC0040EA6E,
+                               9091E23404C1CDFD0040EA6E,
+                               9091E23504C1CDFD0040EA6E,
+                               9091E23604C1CDFE0040EA6E,
+                               9091E23704C1CDFE0040EA6E,
+                               9091E23804C1CDFF0040EA6E,
+                               9091E23904C1CDFF0040EA6E,
+                               9091E23A04C1CE000040EA6E,
+                               9091E23B04C1CE010040EA6E,
+                               9091E23C04C1CE020040EA6E,
+                               9091E26804C1CE2B0040EA6E,
+                               9091E26904C1CE2D0040EA6E,
+                               9091E26A04C1CE2D0040EA6E,
+                               9091E26B04C1CE2E0040EA6E,
+                               9091E26C04C1CE2E0040EA6E,
+                               9091E26D04C1CE2F0040EA6E,
+                               9091E26E04C1CE300040EA6E,
+                               9091E26F04C1CE300040EA6E,
+                               9091E27004C1CE310040EA6E,
+                               9091E27104C1CE310040EA6E,
+                               9091E27204C1CE320040EA6E,
+                               9091E27304C1CE320040EA6E,
+                               9091E27404C1CE330040EA6E,
+                               9091E27504C1CE340040EA6E,
+                               9091E27604C1CE340040EA6E,
+                               9091E27704C1CE350040EA6E,
+                               9091E27804C1CE360040EA6E,
+                               9091E27904C1CE360040EA6E,
+                               9091E27A04C1CE370040EA6E,
+                               9091E27B04C1CE370040EA6E,
+                               9091E27C04C1CE380040EA6E,
+                               9091E27D04C1CE380040EA6E,
+                               9091E27E04C1CE380040EA6E,
+                               9091E27F04C1CE390040EA6E,
+                               9091E28004C1CE390040EA6E,
+                               9037F21F04C1E6F90076A2E7,
+                       );
+                       isa = PBXHeadersBuildPhase;
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               9091E15C04C1CBC10040EA6E = {
+                       buildActionMask = 2147483647;
+                       files = (
+                               9091E1C604C1CD700040EA6E,
+                               9091E23D04C1CE050040EA6E,
+                               9091E23E04C1CE050040EA6E,
+                               9091E23F04C1CE060040EA6E,
+                               9091E24004C1CE070040EA6E,
+                               9091E24104C1CE080040EA6E,
+                               9091E24204C1CE090040EA6E,
+                               9091E24304C1CE0A0040EA6E,
+                               9091E24404C1CE0A0040EA6E,
+                               9091E24504C1CE0B0040EA6E,
+                               9091E24604C1CE0C0040EA6E,
+                               9091E24704C1CE0C0040EA6E,
+                               9091E24804C1CE0D0040EA6E,
+                               9091E24904C1CE0D0040EA6E,
+                               9091E24A04C1CE0E0040EA6E,
+                               9091E24B04C1CE0E0040EA6E,
+                               9091E24C04C1CE0F0040EA6E,
+                               9091E24D04C1CE0F0040EA6E,
+                               9091E24E04C1CE100040EA6E,
+                               9091E24F04C1CE120040EA6E,
+                               9091E25004C1CE130040EA6E,
+                               9091E25104C1CE190040EA6E,
+                               9091E25204C1CE190040EA6E,
+                               9091E25304C1CE1A0040EA6E,
+                               9091E25404C1CE1B0040EA6E,
+                               9091E25504C1CE1C0040EA6E,
+                               9091E25604C1CE1C0040EA6E,
+                               9091E25704C1CE1D0040EA6E,
+                               9091E25804C1CE1F0040EA6E,
+                               9091E25904C1CE1F0040EA6E,
+                               9091E25A04C1CE210040EA6E,
+                               9091E25B04C1CE210040EA6E,
+                               9091E25C04C1CE220040EA6E,
+                               9091E25D04C1CE220040EA6E,
+                               9091E25E04C1CE230040EA6E,
+                               9091E25F04C1CE240040EA6E,
+                               9091E26004C1CE250040EA6E,
+                               9091E26104C1CE250040EA6E,
+                               9091E26204C1CE260040EA6E,
+                               9091E26304C1CE260040EA6E,
+                               9091E26404C1CE270040EA6E,
+                               9091E26504C1CE270040EA6E,
+                               9091E26604C1CE280040EA6E,
+                               9091E26704C1CE280040EA6E,
+                               9037F22204C1E7240076A2E7,
+                               9037F22304C1E7240076A2E7,
+                       );
+                       isa = PBXSourcesBuildPhase;
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               9091E15D04C1CBC10040EA6E = {
+                       buildActionMask = 2147483647;
+                       files = (
+                               9037F22804C1F5400076A2E7,
+                       );
+                       isa = PBXFrameworksBuildPhase;
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               9091E15E04C1CBC10040EA6E = {
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       isa = PBXRezBuildPhase;
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               9091E15F04C1CBC10040EA6E = {
+                       buildPhases = (
+                               9091E15B04C1CBC10040EA6E,
+                               9091E15C04C1CBC10040EA6E,
+                               9091E15D04C1CBC10040EA6E,
+                               9091E15E04C1CBC10040EA6E,
+                       );
+                       buildSettings = {
+                               HEADER_SEARCH_PATHS = "../../../libebml ../..";
+                               LIBRARY_SEARCH_PATHS = /usr/lib/gcc/darwin/3.1;
+                               OTHER_CFLAGS = "";
+                               OTHER_LDFLAGS = "";
+                               OTHER_REZFLAGS = "";
+                               PREBINDING = NO;
+                               PRODUCT_NAME = test8;
+                               SECTORDER_FLAGS = "";
+                               WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas";
+                       };
+                       dependencies = (
+                       );
+                       isa = PBXToolTarget;
+                       name = test8;
+                       productInstallPath = /usr/local/bin;
+                       productName = test8;
+                       productReference = 9091E16004C1CBC10040EA6E;
+               };
+               9091E16004C1CBC10040EA6E = {
+                       isa = PBXExecutableFileReference;
+                       path = test8;
+                       refType = 3;
+               };
+               9091E16204C1CBD40040EA6E = {
+                       buildActionMask = 2147483647;
+                       files = (
+                               9091E1C804C1CD7C0040EA6E,
+                               9091E1C904C1CD7C0040EA6E,
+                               9091E1CA04C1CD7D0040EA6E,
+                               9091E1CB04C1CD7E0040EA6E,
+                               9091E1CC04C1CD7E0040EA6E,
+                               9091E1CD04C1CD7F0040EA6E,
+                               9091E1CE04C1CD7F0040EA6E,
+                               9091E1CF04C1CD800040EA6E,
+                               9091E1D104C1CD820040EA6E,
+                               9091E1D204C1CD820040EA6E,
+                               9091E1D304C1CD830040EA6E,
+                               9091E1D404C1CD840040EA6E,
+                               9091E1D504C1CD840040EA6E,
+                               9091E1D604C1CD850040EA6E,
+                               9091E1D704C1CD870040EA6E,
+                               9091E1D804C1CD880040EA6E,
+                               9091E1D904C1CD880040EA6E,
+                               9091E1DA04C1CD890040EA6E,
+                               9091E1DB04C1CD8A0040EA6E,
+                               9091E1DC04C1CD8A0040EA6E,
+                               9091E1DD04C1CD8B0040EA6E,
+                               9091E1DE04C1CD8C0040EA6E,
+                               9091E1DF04C1CD8C0040EA6E,
+                               9091E1E004C1CD8D0040EA6E,
+                               9091E20C04C1CDC20040EA6E,
+                               9091E20D04C1CDC20040EA6E,
+                               9091E20E04C1CDC30040EA6E,
+                               9091E20F04C1CDC40040EA6E,
+                               9091E21004C1CDC40040EA6E,
+                               9091E21104C1CDC50040EA6E,
+                               9091E21204C1CDC50040EA6E,
+                               9091E21304C1CDC60040EA6E,
+                               9091E21404C1CDC70040EA6E,
+                               9091E21504C1CDCD0040EA6E,
+                               9091E21604C1CDCE0040EA6E,
+                               9091E21704C1CDD70040EA6E,
+                               9091E21804C1CDD80040EA6E,
+                               9091E21904C1CDD80040EA6E,
+                               9091E21A04C1CDD90040EA6E,
+                               9091E21B04C1CDD90040EA6E,
+                               9091E21C04C1CDDA0040EA6E,
+                               9091E21E04C1CDDB0040EA6E,
+                               9091E21F04C1CDDC0040EA6E,
+                               9091E22004C1CDDD0040EA6E,
+                               9091E22104C1CDDD0040EA6E,
+                               9091E22204C1CDDE0040EA6E,
+                               9091E22304C1CDDF0040EA6E,
+                               9091E22404C1CDDF0040EA6E,
+                               9091E22504C1CDE00040EA6E,
+                       );
+                       isa = PBXHeadersBuildPhase;
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               9091E16304C1CBD40040EA6E = {
+                       buildActionMask = 2147483647;
+                       files = (
+                               9091E1C704C1CD740040EA6E,
+                               9091E1E104C1CD910040EA6E,
+                               9091E1E204C1CD910040EA6E,
+                               9091E1E304C1CD920040EA6E,
+                               9091E1E404C1CD920040EA6E,
+                               9091E1E504C1CD930040EA6E,
+                               9091E1E604C1CD970040EA6E,
+                               9091E1E704C1CD980040EA6E,
+                               9091E1E804C1CD980040EA6E,
+                               9091E1E904C1CD990040EA6E,
+                               9091E1EA04C1CD9A0040EA6E,
+                               9091E1EB04C1CD9A0040EA6E,
+                               9091E1EC04C1CD9B0040EA6E,
+                               9091E1ED04C1CD9C0040EA6E,
+                               9091E1EE04C1CD9D0040EA6E,
+                               9091E1EF04C1CD9D0040EA6E,
+                               9091E1F004C1CD9E0040EA6E,
+                               9091E1F104C1CD9F0040EA6E,
+                               9091E1F204C1CDA00040EA6E,
+                               9091E1F304C1CDA10040EA6E,
+                               9091E1F404C1CDA10040EA6E,
+                               9091E1F504C1CDB00040EA6E,
+                               9091E1F604C1CDB10040EA6E,
+                               9091E1F704C1CDB10040EA6E,
+                               9091E1F804C1CDB20040EA6E,
+                               9091E1F904C1CDB20040EA6E,
+                               9091E1FA04C1CDB20040EA6E,
+                               9091E1FB04C1CDB30040EA6E,
+                               9091E1FC04C1CDB40040EA6E,
+                               9091E1FD04C1CDB50040EA6E,
+                               9091E1FE04C1CDB70040EA6E,
+                               9091E1FF04C1CDB70040EA6E,
+                               9091E20004C1CDB80040EA6E,
+                               9091E20104C1CDB80040EA6E,
+                               9091E20204C1CDB90040EA6E,
+                               9091E20304C1CDB90040EA6E,
+                               9091E20404C1CDBA0040EA6E,
+                               9091E20504C1CDBA0040EA6E,
+                               9091E20604C1CDBB0040EA6E,
+                               9091E20704C1CDBC0040EA6E,
+                               9091E20804C1CDBE0040EA6E,
+                               9091E20904C1CDBE0040EA6E,
+                               9091E20A04C1CDBF0040EA6E,
+                               9091E20B04C1CDBF0040EA6E,
+                               9037F22604C1E7240076A2E7,
+                               9037F22704C1E7240076A2E7,
+                       );
+                       isa = PBXSourcesBuildPhase;
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               9091E16404C1CBD40040EA6E = {
+                       buildActionMask = 2147483647;
+                       files = (
+                               9037F22A04C1F5490076A2E7,
+                       );
+                       isa = PBXFrameworksBuildPhase;
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               9091E16504C1CBD40040EA6E = {
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       isa = PBXRezBuildPhase;
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               9091E16604C1CBD40040EA6E = {
+                       buildPhases = (
+                               9091E16204C1CBD40040EA6E,
+                               9091E16304C1CBD40040EA6E,
+                               9091E16404C1CBD40040EA6E,
+                               9091E16504C1CBD40040EA6E,
+                       );
+                       buildSettings = {
+                               HEADER_SEARCH_PATHS = "../../../libebml ../..";
+                               LIBRARY_SEARCH_PATHS = /usr/lib/gcc/darwin/3.1;
+                               OTHER_CFLAGS = "";
+                               OTHER_LDFLAGS = "";
+                               OTHER_REZFLAGS = "";
+                               PRODUCT_NAME = test9;
+                               REZ_EXECUTABLE = YES;
+                               SECTORDER_FLAGS = "";
+                               WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas";
+                       };
+                       dependencies = (
+                       );
+                       isa = PBXToolTarget;
+                       name = test9;
+                       productInstallPath = /usr/local/bin;
+                       productName = test9;
+                       productReference = 9091E16704C1CBD40040EA6E;
+               };
+               9091E16704C1CBD40040EA6E = {
+                       isa = PBXExecutableFileReference;
+                       path = test9;
+                       refType = 3;
+               };
+               9091E16904C1CBED0040EA6E = {
+                       fileRef = 9091E08304C1C9520040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E16A04C1CBF30040EA6E = {
+                       fileRef = 9091E0A304C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E16B04C1CBF40040EA6E = {
+                       fileRef = 9091E0A204C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E16C04C1CBF60040EA6E = {
+                       fileRef = 9091E0A104C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E16D04C1CBF60040EA6E = {
+                       fileRef = 9091E0A004C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E16E04C1CBF70040EA6E = {
+                       fileRef = 9091E09F04C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E16F04C1CBF70040EA6E = {
+                       fileRef = 9091E09E04C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E17004C1CBF80040EA6E = {
+                       fileRef = 9091E09D04C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E17104C1CBF90040EA6E = {
+                       fileRef = 9091E09C04C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E17204C1CBFA0040EA6E = {
+                       fileRef = 9091E09B04C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E17304C1CBFA0040EA6E = {
+                       fileRef = 9091E09A04C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E17404C1CBFB0040EA6E = {
+                       fileRef = 9091E09904C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E17504C1CBFC0040EA6E = {
+                       fileRef = 9091E09804C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E17604C1CBFC0040EA6E = {
+                       fileRef = 9091E09704C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E17704C1CBFD0040EA6E = {
+                       fileRef = 9091E09604C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E17804C1CBFE0040EA6E = {
+                       fileRef = 9091E09504C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E17904C1CBFE0040EA6E = {
+                       fileRef = 9091E09404C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E17A04C1CBFF0040EA6E = {
+                       fileRef = 9091E09304C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E17B04C1CBFF0040EA6E = {
+                       fileRef = 9091E09204C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E17C04C1CC000040EA6E = {
+                       fileRef = 9091E09104C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E17D04C1CC000040EA6E = {
+                       fileRef = 9091E09004C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E17E04C1CC010040EA6E = {
+                       fileRef = 9091E08F04C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E17F04C1CC010040EA6E = {
+                       fileRef = 9091E08E04C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E18004C1CC020040EA6E = {
+                       fileRef = 9091E08D04C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E18104C1CC050040EA6E = {
+                       fileRef = 9091E0BB04C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E18204C1CC060040EA6E = {
+                       fileRef = 9091E0BC04C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E18304C1CC060040EA6E = {
+                       fileRef = 9091E0BD04C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E18404C1CC070040EA6E = {
+                       fileRef = 9091E0BE04C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E18504C1CC080040EA6E = {
+                       fileRef = 9091E0BF04C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E18604C1CC080040EA6E = {
+                       fileRef = 9091E0C004C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E18704C1CC090040EA6E = {
+                       fileRef = 9091E0C104C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E18804C1CC090040EA6E = {
+                       fileRef = 9091E0C204C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E18904C1CC0A0040EA6E = {
+                       fileRef = 9091E0C304C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E18A04C1CC0A0040EA6E = {
+                       fileRef = 9091E0C404C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E18B04C1CC0B0040EA6E = {
+                       fileRef = 9091E0C504C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E18C04C1CC0B0040EA6E = {
+                       fileRef = 9091E0C604C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E18D04C1CC0C0040EA6E = {
+                       fileRef = 9091E0C704C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E18E04C1CC0C0040EA6E = {
+                       fileRef = 9091E0C804C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E18F04C1CC0E0040EA6E = {
+                       fileRef = 9091E0C904C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E19004C1CC0F0040EA6E = {
+                       fileRef = 9091E0CA04C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E19104C1CC100040EA6E = {
+                       fileRef = 9091E0CB04C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E19204C1CC100040EA6E = {
+                       fileRef = 9091E0CC04C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E19304C1CC110040EA6E = {
+                       fileRef = 9091E0CD04C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E19404C1CC110040EA6E = {
+                       fileRef = 9091E0CE04C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E19504C1CC120040EA6E = {
+                       fileRef = 9091E0CF04C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E19604C1CC130040EA6E = {
+                       fileRef = 9091E0D004C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E19704C1CC140040EA6E = {
+                       fileRef = 9091E0D104C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E19804C1CC140040EA6E = {
+                       fileRef = 9091E0D204C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E19904C1CC150040EA6E = {
+                       fileRef = 9091E0D304C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E19A04C1CC270040EA6E = {
+                       fileRef = 9091E0ED04C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E19B04C1CC270040EA6E = {
+                       fileRef = 9091E0EE04C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E19C04C1CC280040EA6E = {
+                       fileRef = 9091E0EF04C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E19D04C1CC280040EA6E = {
+                       fileRef = 9091E0F004C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E19E04C1CC310040EA6E = {
+                       fileRef = 9091E10404C1CA590040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E19F04C1CC320040EA6E = {
+                       fileRef = 9091E10304C1CA590040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1A004C1CC330040EA6E = {
+                       fileRef = 9091E10204C1CA590040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1A104C1CC330040EA6E = {
+                       fileRef = 9091E10104C1CA590040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1A204C1CC340040EA6E = {
+                       fileRef = 9091E10004C1CA590040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1A304C1CC350040EA6E = {
+                       fileRef = 9091E0FF04C1CA590040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1A404C1CC350040EA6E = {
+                       fileRef = 9091E0FE04C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1A504C1CC360040EA6E = {
+                       fileRef = 9091E0FD04C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1A604C1CC360040EA6E = {
+                       fileRef = 9091E0FC04C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1A704C1CC370040EA6E = {
+                       fileRef = 9091E0FB04C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1A804C1CC380040EA6E = {
+                       fileRef = 9091E0FA04C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1A904C1CC380040EA6E = {
+                       fileRef = 9091E0F904C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1AA04C1CC390040EA6E = {
+                       fileRef = 9091E0F804C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1AB04C1CC390040EA6E = {
+                       fileRef = 9091E0F704C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1AC04C1CC3A0040EA6E = {
+                       fileRef = 9091E0F604C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1AD04C1CC3B0040EA6E = {
+                       fileRef = 9091E0F504C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1AE04C1CC3B0040EA6E = {
+                       fileRef = 9091E0F404C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1AF04C1CC3C0040EA6E = {
+                       fileRef = 9091E0F304C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1B004C1CC3C0040EA6E = {
+                       fileRef = 9091E0F204C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1B104C1CC3D0040EA6E = {
+                       fileRef = 9091E0F104C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1B204C1CC400040EA6E = {
+                       fileRef = 9091E11D04C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1B304C1CC410040EA6E = {
+                       fileRef = 9091E11E04C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1B404C1CC410040EA6E = {
+                       fileRef = 9091E11F04C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1B504C1CC420040EA6E = {
+                       fileRef = 9091E12004C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1B604C1CC420040EA6E = {
+                       fileRef = 9091E12104C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1B704C1CC430040EA6E = {
+                       fileRef = 9091E12204C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1B804C1CC440040EA6E = {
+                       fileRef = 9091E12304C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1B904C1CC440040EA6E = {
+                       fileRef = 9091E12404C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1BA04C1CC450040EA6E = {
+                       fileRef = 9091E12504C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1BB04C1CC450040EA6E = {
+                       fileRef = 9091E12604C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1BC04C1CC460040EA6E = {
+                       fileRef = 9091E12804C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1BD04C1CC470040EA6E = {
+                       fileRef = 9091E12704C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1BE04C1CC480040EA6E = {
+                       fileRef = 9091E12904C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1BF04C1CC490040EA6E = {
+                       fileRef = 9091E12A04C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1C004C1CC490040EA6E = {
+                       fileRef = 9091E12B04C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1C104C1CC4A0040EA6E = {
+                       fileRef = 9091E12C04C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1C204C1CC4A0040EA6E = {
+                       fileRef = 9091E12D04C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1C304C1CC4B0040EA6E = {
+                       fileRef = 9091E12E04C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1C404C1CC4B0040EA6E = {
+                       fileRef = 9091E12F04C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1C504C1CC4C0040EA6E = {
+                       fileRef = 9091E13004C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1C604C1CD700040EA6E = {
+                       fileRef = 9091E08404C1C9520040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1C704C1CD740040EA6E = {
+                       fileRef = 9091E08704C1C99A0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1C804C1CD7C0040EA6E = {
+                       fileRef = 9091E0ED04C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1C904C1CD7C0040EA6E = {
+                       fileRef = 9091E0EE04C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1CA04C1CD7D0040EA6E = {
+                       fileRef = 9091E0EF04C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1CB04C1CD7E0040EA6E = {
+                       fileRef = 9091E0F004C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1CC04C1CD7E0040EA6E = {
+                       fileRef = 9091E0F104C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1CD04C1CD7F0040EA6E = {
+                       fileRef = 9091E0F204C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1CE04C1CD7F0040EA6E = {
+                       fileRef = 9091E0F304C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1CF04C1CD800040EA6E = {
+                       fileRef = 9091E0F404C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1D104C1CD820040EA6E = {
+                       fileRef = 9091E0F504C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1D204C1CD820040EA6E = {
+                       fileRef = 9091E0F604C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1D304C1CD830040EA6E = {
+                       fileRef = 9091E0F704C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1D404C1CD840040EA6E = {
+                       fileRef = 9091E0F804C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1D504C1CD840040EA6E = {
+                       fileRef = 9091E0F904C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1D604C1CD850040EA6E = {
+                       fileRef = 9091E0FA04C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1D704C1CD870040EA6E = {
+                       fileRef = 9091E0FB04C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1D804C1CD880040EA6E = {
+                       fileRef = 9091E0FC04C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1D904C1CD880040EA6E = {
+                       fileRef = 9091E0FD04C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1DA04C1CD890040EA6E = {
+                       fileRef = 9091E0FE04C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1DB04C1CD8A0040EA6E = {
+                       fileRef = 9091E0FF04C1CA590040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1DC04C1CD8A0040EA6E = {
+                       fileRef = 9091E10004C1CA590040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1DD04C1CD8B0040EA6E = {
+                       fileRef = 9091E10104C1CA590040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1DE04C1CD8C0040EA6E = {
+                       fileRef = 9091E10204C1CA590040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1DF04C1CD8C0040EA6E = {
+                       fileRef = 9091E10304C1CA590040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1E004C1CD8D0040EA6E = {
+                       fileRef = 9091E10404C1CA590040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1E104C1CD910040EA6E = {
+                       fileRef = 9091E11D04C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1E204C1CD910040EA6E = {
+                       fileRef = 9091E11E04C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1E304C1CD920040EA6E = {
+                       fileRef = 9091E11F04C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1E404C1CD920040EA6E = {
+                       fileRef = 9091E12004C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1E504C1CD930040EA6E = {
+                       fileRef = 9091E12104C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1E604C1CD970040EA6E = {
+                       fileRef = 9091E12204C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1E704C1CD980040EA6E = {
+                       fileRef = 9091E12304C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1E804C1CD980040EA6E = {
+                       fileRef = 9091E12404C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1E904C1CD990040EA6E = {
+                       fileRef = 9091E12504C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1EA04C1CD9A0040EA6E = {
+                       fileRef = 9091E12604C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1EB04C1CD9A0040EA6E = {
+                       fileRef = 9091E12704C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1EC04C1CD9B0040EA6E = {
+                       fileRef = 9091E12804C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1ED04C1CD9C0040EA6E = {
+                       fileRef = 9091E12904C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1EE04C1CD9D0040EA6E = {
+                       fileRef = 9091E12A04C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1EF04C1CD9D0040EA6E = {
+                       fileRef = 9091E12B04C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1F004C1CD9E0040EA6E = {
+                       fileRef = 9091E12C04C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1F104C1CD9F0040EA6E = {
+                       fileRef = 9091E12D04C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1F204C1CDA00040EA6E = {
+                       fileRef = 9091E12E04C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1F304C1CDA10040EA6E = {
+                       fileRef = 9091E12F04C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1F404C1CDA10040EA6E = {
+                       fileRef = 9091E13004C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1F504C1CDB00040EA6E = {
+                       fileRef = 9091E08D04C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1F604C1CDB10040EA6E = {
+                       fileRef = 9091E08E04C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1F704C1CDB10040EA6E = {
+                       fileRef = 9091E08F04C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1F804C1CDB20040EA6E = {
+                       fileRef = 9091E09004C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1F904C1CDB20040EA6E = {
+                       fileRef = 9091E09104C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1FA04C1CDB20040EA6E = {
+                       fileRef = 9091E09204C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1FB04C1CDB30040EA6E = {
+                       fileRef = 9091E09404C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1FC04C1CDB40040EA6E = {
+                       fileRef = 9091E09304C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1FD04C1CDB50040EA6E = {
+                       fileRef = 9091E09504C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1FE04C1CDB70040EA6E = {
+                       fileRef = 9091E09604C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E1FF04C1CDB70040EA6E = {
+                       fileRef = 9091E09704C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E20004C1CDB80040EA6E = {
+                       fileRef = 9091E09804C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E20104C1CDB80040EA6E = {
+                       fileRef = 9091E09904C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E20204C1CDB90040EA6E = {
+                       fileRef = 9091E09A04C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E20304C1CDB90040EA6E = {
+                       fileRef = 9091E09B04C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E20404C1CDBA0040EA6E = {
+                       fileRef = 9091E09C04C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E20504C1CDBA0040EA6E = {
+                       fileRef = 9091E09D04C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E20604C1CDBB0040EA6E = {
+                       fileRef = 9091E09E04C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E20704C1CDBC0040EA6E = {
+                       fileRef = 9091E09F04C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E20804C1CDBE0040EA6E = {
+                       fileRef = 9091E0A004C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E20904C1CDBE0040EA6E = {
+                       fileRef = 9091E0A104C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E20A04C1CDBF0040EA6E = {
+                       fileRef = 9091E0A204C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E20B04C1CDBF0040EA6E = {
+                       fileRef = 9091E0A304C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E20C04C1CDC20040EA6E = {
+                       fileRef = 9091E0BB04C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E20D04C1CDC20040EA6E = {
+                       fileRef = 9091E0BC04C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E20E04C1CDC30040EA6E = {
+                       fileRef = 9091E0BD04C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E20F04C1CDC40040EA6E = {
+                       fileRef = 9091E0BE04C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E21004C1CDC40040EA6E = {
+                       fileRef = 9091E0BF04C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E21104C1CDC50040EA6E = {
+                       fileRef = 9091E0C004C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E21204C1CDC50040EA6E = {
+                       fileRef = 9091E0C204C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E21304C1CDC60040EA6E = {
+                       fileRef = 9091E0C104C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E21404C1CDC70040EA6E = {
+                       fileRef = 9091E0C304C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E21504C1CDCD0040EA6E = {
+                       fileRef = 9091E0C404C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E21604C1CDCE0040EA6E = {
+                       fileRef = 9091E0C504C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E21704C1CDD70040EA6E = {
+                       fileRef = 9091E0C604C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E21804C1CDD80040EA6E = {
+                       fileRef = 9091E0C704C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E21904C1CDD80040EA6E = {
+                       fileRef = 9091E0C804C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E21A04C1CDD90040EA6E = {
+                       fileRef = 9091E0C904C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E21B04C1CDD90040EA6E = {
+                       fileRef = 9091E0CA04C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E21C04C1CDDA0040EA6E = {
+                       fileRef = 9091E0CB04C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E21E04C1CDDB0040EA6E = {
+                       fileRef = 9091E0CC04C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E21F04C1CDDC0040EA6E = {
+                       fileRef = 9091E0CD04C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E22004C1CDDD0040EA6E = {
+                       fileRef = 9091E0CE04C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E22104C1CDDD0040EA6E = {
+                       fileRef = 9091E0D004C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E22204C1CDDE0040EA6E = {
+                       fileRef = 9091E0CF04C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E22304C1CDDF0040EA6E = {
+                       fileRef = 9091E0D104C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E22404C1CDDF0040EA6E = {
+                       fileRef = 9091E0D204C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E22504C1CDE00040EA6E = {
+                       fileRef = 9091E0D304C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E22604C1CDEE0040EA6E = {
+                       fileRef = 9091E0ED04C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E22704C1CDEE0040EA6E = {
+                       fileRef = 9091E0EE04C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E22804C1CDEF0040EA6E = {
+                       fileRef = 9091E0F004C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E22904C1CDF00040EA6E = {
+                       fileRef = 9091E0EF04C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E22A04C1CDF10040EA6E = {
+                       fileRef = 9091E0F104C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E22B04C1CDF10040EA6E = {
+                       fileRef = 9091E0F204C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E22C04C1CDF20040EA6E = {
+                       fileRef = 9091E0F304C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E22D04C1CDF90040EA6E = {
+                       fileRef = 9091E10404C1CA590040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E22E04C1CDF90040EA6E = {
+                       fileRef = 9091E10304C1CA590040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E22F04C1CDFA0040EA6E = {
+                       fileRef = 9091E10204C1CA590040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E23004C1CDFA0040EA6E = {
+                       fileRef = 9091E10104C1CA590040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E23104C1CDFB0040EA6E = {
+                       fileRef = 9091E10004C1CA590040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E23204C1CDFB0040EA6E = {
+                       fileRef = 9091E0FF04C1CA590040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E23304C1CDFC0040EA6E = {
+                       fileRef = 9091E0FE04C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E23404C1CDFD0040EA6E = {
+                       fileRef = 9091E0FD04C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E23504C1CDFD0040EA6E = {
+                       fileRef = 9091E0FC04C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E23604C1CDFE0040EA6E = {
+                       fileRef = 9091E0FB04C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E23704C1CDFE0040EA6E = {
+                       fileRef = 9091E0FA04C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E23804C1CDFF0040EA6E = {
+                       fileRef = 9091E0F904C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E23904C1CDFF0040EA6E = {
+                       fileRef = 9091E0F804C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E23A04C1CE000040EA6E = {
+                       fileRef = 9091E0F704C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E23B04C1CE010040EA6E = {
+                       fileRef = 9091E0F604C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E23C04C1CE020040EA6E = {
+                       fileRef = 9091E0F504C1CA580040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E23D04C1CE050040EA6E = {
+                       fileRef = 9091E11D04C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E23E04C1CE050040EA6E = {
+                       fileRef = 9091E11E04C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E23F04C1CE060040EA6E = {
+                       fileRef = 9091E11F04C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E24004C1CE070040EA6E = {
+                       fileRef = 9091E12004C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E24104C1CE080040EA6E = {
+                       fileRef = 9091E12104C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E24204C1CE090040EA6E = {
+                       fileRef = 9091E12304C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E24304C1CE0A0040EA6E = {
+                       fileRef = 9091E12204C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E24404C1CE0A0040EA6E = {
+                       fileRef = 9091E12404C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E24504C1CE0B0040EA6E = {
+                       fileRef = 9091E12504C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E24604C1CE0C0040EA6E = {
+                       fileRef = 9091E12704C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E24704C1CE0C0040EA6E = {
+                       fileRef = 9091E12804C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E24804C1CE0D0040EA6E = {
+                       fileRef = 9091E12604C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E24904C1CE0D0040EA6E = {
+                       fileRef = 9091E12904C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E24A04C1CE0E0040EA6E = {
+                       fileRef = 9091E12A04C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E24B04C1CE0E0040EA6E = {
+                       fileRef = 9091E12B04C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E24C04C1CE0F0040EA6E = {
+                       fileRef = 9091E12C04C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E24D04C1CE0F0040EA6E = {
+                       fileRef = 9091E12E04C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E24E04C1CE100040EA6E = {
+                       fileRef = 9091E13004C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E24F04C1CE120040EA6E = {
+                       fileRef = 9091E12F04C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E25004C1CE130040EA6E = {
+                       fileRef = 9091E12D04C1CA760040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E25104C1CE190040EA6E = {
+                       fileRef = 9091E08D04C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E25204C1CE190040EA6E = {
+                       fileRef = 9091E08E04C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E25304C1CE1A0040EA6E = {
+                       fileRef = 9091E08F04C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E25404C1CE1B0040EA6E = {
+                       fileRef = 9091E09004C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E25504C1CE1C0040EA6E = {
+                       fileRef = 9091E09204C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E25604C1CE1C0040EA6E = {
+                       fileRef = 9091E09104C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E25704C1CE1D0040EA6E = {
+                       fileRef = 9091E09304C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E25804C1CE1F0040EA6E = {
+                       fileRef = 9091E09504C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E25904C1CE1F0040EA6E = {
+                       fileRef = 9091E09404C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E25A04C1CE210040EA6E = {
+                       fileRef = 9091E09604C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E25B04C1CE210040EA6E = {
+                       fileRef = 9091E09704C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E25C04C1CE220040EA6E = {
+                       fileRef = 9091E09804C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E25D04C1CE220040EA6E = {
+                       fileRef = 9091E09904C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E25E04C1CE230040EA6E = {
+                       fileRef = 9091E09A04C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E25F04C1CE240040EA6E = {
+                       fileRef = 9091E09B04C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E26004C1CE250040EA6E = {
+                       fileRef = 9091E09C04C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E26104C1CE250040EA6E = {
+                       fileRef = 9091E09D04C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E26204C1CE260040EA6E = {
+                       fileRef = 9091E09E04C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E26304C1CE260040EA6E = {
+                       fileRef = 9091E09F04C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E26404C1CE270040EA6E = {
+                       fileRef = 9091E0A004C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E26504C1CE270040EA6E = {
+                       fileRef = 9091E0A104C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E26604C1CE280040EA6E = {
+                       fileRef = 9091E0A204C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E26704C1CE280040EA6E = {
+                       fileRef = 9091E0A304C1C9FA0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E26804C1CE2B0040EA6E = {
+                       fileRef = 9091E0BB04C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E26904C1CE2D0040EA6E = {
+                       fileRef = 9091E0BC04C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E26A04C1CE2D0040EA6E = {
+                       fileRef = 9091E0BD04C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E26B04C1CE2E0040EA6E = {
+                       fileRef = 9091E0BE04C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E26C04C1CE2E0040EA6E = {
+                       fileRef = 9091E0BF04C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E26D04C1CE2F0040EA6E = {
+                       fileRef = 9091E0C004C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E26E04C1CE300040EA6E = {
+                       fileRef = 9091E0C104C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E26F04C1CE300040EA6E = {
+                       fileRef = 9091E0C204C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E27004C1CE310040EA6E = {
+                       fileRef = 9091E0C304C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E27104C1CE310040EA6E = {
+                       fileRef = 9091E0C404C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E27204C1CE320040EA6E = {
+                       fileRef = 9091E0C504C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E27304C1CE320040EA6E = {
+                       fileRef = 9091E0C604C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E27404C1CE330040EA6E = {
+                       fileRef = 9091E0C704C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E27504C1CE340040EA6E = {
+                       fileRef = 9091E0C804C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E27604C1CE340040EA6E = {
+                       fileRef = 9091E0C904C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E27704C1CE350040EA6E = {
+                       fileRef = 9091E0CA04C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E27804C1CE360040EA6E = {
+                       fileRef = 9091E0CB04C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E27904C1CE360040EA6E = {
+                       fileRef = 9091E0CC04C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E27A04C1CE370040EA6E = {
+                       fileRef = 9091E0CD04C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E27B04C1CE370040EA6E = {
+                       fileRef = 9091E0CE04C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E27C04C1CE380040EA6E = {
+                       fileRef = 9091E0CF04C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E27D04C1CE380040EA6E = {
+                       fileRef = 9091E0D004C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E27E04C1CE380040EA6E = {
+                       fileRef = 9091E0D104C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E27F04C1CE390040EA6E = {
+                       fileRef = 9091E0D204C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               9091E28004C1CE390040EA6E = {
+                       fileRef = 9091E0D304C1CA1D0040EA6E;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+//900
+//901
+//902
+//903
+//904
+//C60
+//C61
+//C62
+//C63
+//C64
+               C6859E8C029090F304C91782 = {
+                       children = (
+                       );
+                       isa = PBXGroup;
+                       name = Documentation;
+                       refType = 4;
+               };
+       };
+       rootObject = 08FB7793FE84155DC02AAC07;
+}
diff --git a/make/makedoc.bat b/make/makedoc.bat
new file mode 100644 (file)
index 0000000..194f97f
--- /dev/null
@@ -0,0 +1,8 @@
+@echo off\r
+rem you should have DOXYGEN.EXE in your path\r
+rem http://www.doxygen.org/\r
+\r
+echo make Documentation\r
+\r
+\r
+doxygen Doxyfile > Doxygen.log.txt 2> Doxygen.err.txt
\ No newline at end of file
diff --git a/make/makedoc.sh b/make/makedoc.sh
new file mode 100644 (file)
index 0000000..13f8571
--- /dev/null
@@ -0,0 +1,7 @@
+#!/usr/bin/sh\r
+# you should have "doxygen" in your path\r
+# http://www.doxygen.org/\r
+\r
+echo make Documentation\r
+\r
+doxygen Doxyfile > Doxygen.log.txt 2> Doxygen.err.txt\r
diff --git a/make/mingw32/Makefile b/make/mingw32/Makefile
new file mode 100644 (file)
index 0000000..edc0724
--- /dev/null
@@ -0,0 +1,106 @@
+# Project: libmatroska\r
+# Makefile created by Dev-C++ 4.9.7.0\r
+\r
+# Normally libmatroska is built as a static library.\r
+# Uncomment this if you want a shared library instead.\r
+# ATTENTION: Your app has to define MATROSKA_DLL !\r
+SHARED = yes\r
+\r
+# Compile with debug information?\r
+#DEBUG = yes\r
+\r
+# Where libebml resides\r
+EBML_DIR = ../../../libebml\r
+\r
+# Has libebml been compiled as a DLL?\r
+EBML_DLL = yes\r
+\r
+#\r
+# Don't change anything below this line.\r
+#\r
+ifeq (yes,$(DEBUG))\r
+DEBUGFLAGS=-g -DDEBUG\r
+endif\r
+CXX  = g++.exe\r
+LD = g++.exe\r
+WINDRES = windres.exe\r
+RES  = \r
+SRC  = $(wildcard ../../src/*.cpp)\r
+OBJ  = $(patsubst %.cpp,%.o,$(SRC))\r
+ifeq (yes,$(SHARED))\r
+LIBS = libmatroska.dll\r
+CXXFLAGS = -DMATROSKA_DLL\r
+DLLFLAGS = -DMATROSKA_DLL_EXPORT\r
+else\r
+LIBS = libmatroska.a\r
+endif\r
+ifeq (yes,$(EBML_DLL))\r
+CXXFLAGS += -DEBML_DLL\r
+endif\r
+INCS = -I../.. -I$(EBML_DIR)\r
+LDFLAGS = -L. -L$(EBML_DIR)/make/mingw32\r
+CXXFLAGS += $(DEBUGFLAGS) $(INCS) \r
+TESTS = test6 test8 test9\r
+\r
+.PHONY: all all-before all-after clean clean-custom\r
+\r
+.cpp.o:\r
+       $(CXX) $(DLLFLAGS) $(CXXFLAGS) -c -o $@ $<\r
+\r
+all: lib\r
+\r
+lib: $(LIBS)\r
+\r
+tests: $(TESTS)\r
+\r
+clean:\r
+       rm -f $(OBJ) libmatroska.a libmatroska.dll.a libmatroska.dll *.exe \\r
+               ../../test/mux/*.o ../../test/tags/*.o\r
+\r
+distclean dist-clean: clean\r
+       rm -f .depend\r
+\r
+libmatroska.a: $(OBJ)\r
+       ar r $@ $(OBJ)\r
+       ranlib $@\r
+\r
+libmatroska.dll: $(OBJ)\r
+       $(CXX) -shared -Wl,--export-all -Wl,--out-implib=$@.a -o $@ $(OBJ) \\r
+               $(LDFLAGS) -lebml\r
+\r
+# Explicitely list these object files because for them\r
+# MATROSKA_DLL_EXPORT must NOT be defined.\r
+../../test/mux/test6.o: ../../test/mux/test6.cpp\r
+       $(CXX) $(CXXFLAGS) -c -o $@ $<\r
+\r
+test6: ../../test/mux/test6.o $(LIBS)\r
+       $(LD) -o $@ $(LDFLAGS) $< -lmatroska -lebml\r
+\r
+../../test/mux/test8.o: ../../test/mux/test8.cpp\r
+       $(CXX) $(CXXFLAGS) -c -o $@ $<\r
+\r
+test8: ../../test/mux/test8.o $(LIBS)\r
+       $(LD) -o $@ $(LDFLAGS) $< -lmatroska -lebml\r
+\r
+../../test/tags/test9.o: ../../test/tags/test9.cpp\r
+       $(CXX) $(CXXFLAGS) -c -o $@ $<\r
+\r
+test9: ../../test/tags/test9.o $(LIBS)\r
+       $(LD) -o $@ $(LDFLAGS) $< -lmatroska -lebml\r
+\r
+depend:\r
+       @echo Calculating dependecies:\r
+       @rm -f .depend\r
+       @touch .depend\r
+       @for i in $(SRC); do \\r
+               o="`echo $$i | sed -e 's/\.c$$/.o/' -e 's/\.cpp$$/.o/'`" ; \\r
+               echo '  ' $$i: $$o ; \\r
+               $(CXX) $(CXXFLAGS) -MM -MT $$o $$i >> .depend ; \\r
+       done\r
+\r
+#\r
+# include dependency files if they exist\r
+#\r
+ifneq ($(wildcard .depend),)\r
+include .depend\r
+endif\r
diff --git a/make/mingw32/libmatroska.dev b/make/mingw32/libmatroska.dev
new file mode 100644 (file)
index 0000000..86380e4
--- /dev/null
@@ -0,0 +1,390 @@
+[Project]
+FileName=libmatroska.dev
+Name=libmatroska
+UnitCount=43
+Type=2
+Ver=1
+ObjFiles=
+Includes=..\..\..\libebml\src
+Libs=
+PrivateResource=
+ResourceIncludes=
+MakeIncludes=
+Resources=
+Compiler=
+Linker=
+IsCpp=1
+Icon=
+ExeOutput=
+ObjectOutput=
+OverrideOutput=0
+OverrideOutputName=libmatroska.a
+HostApplication=
+Folders=
+CommandLine=
+IncludeVersionInfo=0
+SupportXPThemes=0
+CompilerSet=0
+CompilerSettings=000000000000000000
+
+[Unit1]
+FileName=..\..\src\StdInclude.h
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit2]
+FileName=..\..\src\FileKax.h
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit3]
+FileName=..\..\src\KaxAttached.cpp
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit4]
+FileName=..\..\src\KaxAttached.h
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit5]
+FileName=..\..\src\KaxAttachements.cpp
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit6]
+FileName=..\..\src\KaxAttachements.h
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit7]
+FileName=..\..\src\KaxBlock.cpp
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit8]
+FileName=..\..\src\KaxBlock.h
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit9]
+FileName=..\..\src\KaxBlockAdditional.cpp
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit10]
+FileName=..\..\src\KaxBlockAdditional.h
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit11]
+FileName=..\..\src\KaxChapters.cpp
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit12]
+FileName=..\..\src\KaxChapters.h
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit13]
+FileName=..\..\src\KaxCluster.cpp
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit14]
+FileName=..\..\src\KaxCluster.h
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit15]
+FileName=..\..\src\KaxClusterData.cpp
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit16]
+FileName=..\..\src\KaxClusterData.h
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit17]
+FileName=..\..\src\KaxConfig.h
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit18]
+FileName=..\..\src\KaxContexts.cpp
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit19]
+FileName=..\..\src\KaxContexts.h
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit20]
+FileName=..\..\src\KaxCues.cpp
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit21]
+FileName=..\..\src\KaxCues.h
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit22]
+FileName=..\..\src\KaxCuesData.cpp
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit23]
+FileName=..\..\src\KaxCuesData.h
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit24]
+FileName=..\..\src\KaxInfo.cpp
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit25]
+FileName=..\..\src\KaxInfo.h
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit26]
+FileName=..\..\src\KaxInfoData.cpp
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit27]
+FileName=..\..\src\KaxInfoData.h
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit28]
+FileName=..\..\src\KaxSeekHead.cpp
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit29]
+FileName=..\..\src\KaxSeekHead.h
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit30]
+FileName=..\..\src\KaxSegment.cpp
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit31]
+FileName=..\..\src\KaxSegment.h
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit32]
+FileName=..\..\src\KaxTrackAudio.cpp
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit33]
+FileName=..\..\src\KaxTrackAudio.h
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit34]
+FileName=..\..\src\KaxTrackEntryData.cpp
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit35]
+FileName=..\..\src\KaxTrackEntryData.h
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit36]
+FileName=..\..\src\KaxTracks.cpp
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit37]
+FileName=..\..\src\KaxTracks.h
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit38]
+FileName=..\..\src\KaxTrackVideo.cpp
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit39]
+FileName=..\..\src\KaxTrackVideo.h
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit40]
+FileName=..\..\src\KaxTypes.h
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit41]
+FileName=..\..\src\KaxVersion.cpp
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit42]
+FileName=..\..\src\KaxVersion.h
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit43]
+FileName=..\..\src\FileKax.cpp
+Folder=libmatroska
+Compile=1
+CompileCpp=1
+OverrideBuildCmd=0
+BuildCmd=
+
+[VersionInfo]
+Major=0
+Minor=1
+Release=1
+Build=1
+LanguageID=1033
+CharsetID=1252
+CompanyName=
+FileVersion=
+FileDescription=Developed using the Dev-C++ IDE
+InternalName=
+LegalCopyright=
+LegalTrademarks=
+OriginalFilename=
+ProductName=
+ProductVersion=
+
diff --git a/make/mingw32/test/Makefile b/make/mingw32/test/Makefile
new file mode 100644 (file)
index 0000000..73a3569
--- /dev/null
@@ -0,0 +1,27 @@
+# Project: test6\r
+# Makefile created by Dev-C++ 4.9.7.0\r
+\r
+CPP  = g++.exe\r
+CC   = gcc.exe\r
+WINDRES = windres.exe\r
+RES  = \r
+OBJ  = ../../../test/mux/test6.o $(RES)\r
+LIBS =  -L"D:/DEV-CPP/lib" "../libmatroska.a" "../../../../libebml/make/mingw32/libebml.a"\r
+INCS =  -I"D:/DEV-CPP/include"  -I"D:/DEV-CPP/include/c++"  -I"D:/DEV-CPP/include"  -I"D:/Dev-Cpp/include/c++/mingw32"  -I"../../../../libebml/src"  -I"../../../src" \r
+BIN  = test6.exe\r
+CXXFLAGS = $(INCS) \r
+CFLAGS = $(INCS) \r
+\r
+.PHONY: all all-before all-after clean clean-custom\r
+\r
+all: all-before test6.exe all-after\r
+\r
+\r
+clean: clean-custom\r
+       rm -f $(OBJ) $(BIN)\r
+\r
+$(BIN): $(OBJ)\r
+       $(CPP) $(OBJ) -o "test6.exe" $(LIBS) $(CXXFLAGS)\r
+\r
+../../../test/mux/test6.o: ../../../test/mux/test6.cpp\r
+       $(CPP) -c ../../../test/mux/test6.cpp -o ../../../test/mux/test6.o $(CXXFLAGS)\r
diff --git a/make/mingw32/test/test6.dev b/make/mingw32/test/test6.dev
new file mode 100644 (file)
index 0000000..294c08e
--- /dev/null
@@ -0,0 +1,54 @@
+[Project]\r
+FileName=test6.dev\r
+Name=test6\r
+UnitCount=1\r
+Type=1\r
+Ver=1\r
+ObjFiles=\r
+Includes=..\..\..\..\libebml\src;..\..\..\src\r
+Libs=\r
+PrivateResource=\r
+ResourceIncludes=\r
+MakeIncludes=\r
+Resources=\r
+Compiler=\r
+Linker="..\libmatroska.a" "..\..\..\..\libebml\make\mingw32\libebml.a"\r
+IsCpp=1\r
+Icon=\r
+ExeOutput=\r
+ObjectOutput=\r
+OverrideOutput=0\r
+OverrideOutputName=test6.exe\r
+HostApplication=\r
+Folders=\r
+CommandLine=\r
+IncludeVersionInfo=0\r
+SupportXPThemes=0\r
+CompilerSet=0\r
+CompilerSettings=000000000000000000\r
+\r
+[Unit1]\r
+FileName=..\..\..\test\mux\test6.cpp\r
+Folder=test6\r
+Compile=1\r
+CompileCpp=1\r
+OverrideBuildCmd=0\r
+BuildCmd=\r
+\r
+[VersionInfo]\r
+Major=0\r
+Minor=1\r
+Release=1\r
+Build=1\r
+LanguageID=1033\r
+CharsetID=1252\r
+CompanyName=\r
+FileVersion=\r
+FileDescription=Developed using the Dev-C++ IDE\r
+InternalName=\r
+LegalCopyright=\r
+LegalTrademarks=\r
+OriginalFilename=\r
+ProductName=\r
+ProductVersion=\r
+\r
diff --git a/make/mingw32/test/test8.dev b/make/mingw32/test/test8.dev
new file mode 100644 (file)
index 0000000..092778a
--- /dev/null
@@ -0,0 +1,54 @@
+[Project]\r
+FileName=test8.dev\r
+Name=test8\r
+UnitCount=1\r
+Type=1\r
+Ver=1\r
+ObjFiles=\r
+Includes=..\..\..\..\libebml\src;..\..\..\src\r
+Libs=\r
+PrivateResource=\r
+ResourceIncludes=\r
+MakeIncludes=\r
+Resources=\r
+Compiler=\r
+Linker="..\libmatroska.a" "..\..\..\..\libebml\make\mingw32\libebml.a"\r
+IsCpp=1\r
+Icon=\r
+ExeOutput=\r
+ObjectOutput=\r
+OverrideOutput=0\r
+OverrideOutputName=test8.exe\r
+HostApplication=\r
+Folders=\r
+CommandLine=\r
+IncludeVersionInfo=0\r
+SupportXPThemes=0\r
+CompilerSet=0\r
+CompilerSettings=000000000000000000\r
+\r
+[Unit1]\r
+FileName=..\..\..\test\mux\test8.cpp\r
+Folder=test8\r
+Compile=1\r
+CompileCpp=1\r
+OverrideBuildCmd=0\r
+BuildCmd=\r
+\r
+[VersionInfo]\r
+Major=0\r
+Minor=1\r
+Release=1\r
+Build=1\r
+LanguageID=1033\r
+CharsetID=1252\r
+CompanyName=\r
+FileVersion=\r
+FileDescription=Developed using the Dev-C++ IDE\r
+InternalName=\r
+LegalCopyright=\r
+LegalTrademarks=\r
+OriginalFilename=\r
+ProductName=\r
+ProductVersion=\r
+\r
diff --git a/make/vc6/lib/static/libmatroska.dsp b/make/vc6/lib/static/libmatroska.dsp
new file mode 100644 (file)
index 0000000..e830bbf
--- /dev/null
@@ -0,0 +1,292 @@
+# Microsoft Developer Studio Project File - Name="libmatroska" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** DO NOT EDIT **\r
+\r
+# TARGTYPE "Win32 (x86) Static Library" 0x0104\r
+\r
+CFG=libmatroska - Win32 Debug\r
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
+!MESSAGE use the Export Makefile command and run\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "libmatroska.mak".\r
+!MESSAGE \r
+!MESSAGE You can specify a configuration when running NMAKE\r
+!MESSAGE by defining the macro CFG on the command line. For example:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "libmatroska.mak" CFG="libmatroska - Win32 Debug"\r
+!MESSAGE \r
+!MESSAGE Possible choices for configuration are:\r
+!MESSAGE \r
+!MESSAGE "libmatroska - Win32 Release" (based on "Win32 (x86) Static Library")\r
+!MESSAGE "libmatroska - Win32 Debug" (based on "Win32 (x86) Static Library")\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""\r
+# PROP Scc_LocalPath ""\r
+CPP=cl.exe\r
+RSC=rc.exe\r
+\r
+!IF  "$(CFG)" == "libmatroska - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "Release"\r
+# PROP BASE Intermediate_Dir "Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Release"\r
+# PROP Intermediate_Dir "Release"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c\r
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../../../libebml" /I "../../../.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c\r
+# ADD BASE RSC /l 0x40c /d "NDEBUG"\r
+# ADD RSC /l 0x809 /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LIB32=link.exe -lib\r
+# ADD BASE LIB32 /nologo\r
+# ADD LIB32 /nologo\r
+\r
+!ELSEIF  "$(CFG)" == "libmatroska - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "Debug"\r
+# PROP BASE Intermediate_Dir "Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "Debug"\r
+# PROP Intermediate_Dir "Debug"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c\r
+# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /ZI /Od /I "../../../../../libebml" /I "../../../.." /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c\r
+# ADD BASE RSC /l 0x40c /d "_DEBUG"\r
+# ADD RSC /l 0x809 /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LIB32=link.exe -lib\r
+# ADD BASE LIB32 /nologo\r
+# ADD LIB32 /nologo\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "libmatroska - Win32 Release"\r
+# Name "libmatroska - Win32 Debug"\r
+# Begin Group "Source Files"\r
+\r
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\src\FileKax.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\src\KaxAttached.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\src\KaxAttachments.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\src\KaxBlock.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\src\KaxBlockData.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\src\KaxChapters.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\src\KaxCluster.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\src\KaxClusterData.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\src\KaxContentEncoding.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\src\KaxContexts.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\src\KaxCues.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\src\KaxCuesData.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\src\KaxInfo.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\src\KaxInfoData.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\src\KaxSeekHead.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\src\KaxSegment.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\src\KaxTag.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\src\KaxTagMulti.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\src\KaxTags.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\src\KaxTrackAudio.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\src\KaxTrackEntryData.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\src\KaxTracks.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\src\KaxTrackVideo.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\src\KaxVersion.cpp\r
+# End Source File\r
+# End Group\r
+# Begin Group "Header Files"\r
+\r
+# PROP Default_Filter "h;hpp;hxx;hm;inl"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\matroska\FileKax.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\matroska\KaxAttached.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\matroska\KaxAttachments.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\matroska\KaxBlock.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\matroska\KaxBlockData.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\matroska\KaxChapters.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\matroska\KaxCluster.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\matroska\KaxClusterData.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\matroska\KaxConfig.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\matroska\KaxContentEncoding.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\matroska\KaxContexts.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\matroska\KaxCues.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\matroska\KaxCuesData.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\matroska\KaxInfo.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\matroska\KaxInfoData.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\matroska\KaxSeekHead.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\matroska\KaxSegment.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\matroska\KaxTag.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\matroska\KaxTagMulti.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\matroska\KaxTags.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\matroska\KaxTrackAudio.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\matroska\KaxTrackEntryData.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\matroska\KaxTracks.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\matroska\KaxTrackVideo.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\matroska\KaxTypes.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\matroska\KaxVersion.h\r
+# End Source File\r
+# End Group\r
+# End Target\r
+# End Project\r
diff --git a/make/vc6/test/test0.dsp b/make/vc6/test/test0.dsp
new file mode 100644 (file)
index 0000000..e072a78
--- /dev/null
@@ -0,0 +1,100 @@
+# Microsoft Developer Studio Project File - Name="test0" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** DO NOT EDIT **\r
+\r
+# TARGTYPE "Win32 (x86) Console Application" 0x0103\r
+\r
+CFG=test0 - Win32 Debug\r
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
+!MESSAGE use the Export Makefile command and run\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "test0.mak".\r
+!MESSAGE \r
+!MESSAGE You can specify a configuration when running NMAKE\r
+!MESSAGE by defining the macro CFG on the command line. For example:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "test0.mak" CFG="test0 - Win32 Debug"\r
+!MESSAGE \r
+!MESSAGE Possible choices for configuration are:\r
+!MESSAGE \r
+!MESSAGE "test0 - Win32 Release" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "test0 - Win32 Debug" (based on "Win32 (x86) Console Application")\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""\r
+# PROP Scc_LocalPath ""\r
+CPP=cl.exe\r
+RSC=rc.exe\r
+\r
+!IF  "$(CFG)" == "test0 - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "Release"\r
+# PROP BASE Intermediate_Dir "Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Release"\r
+# PROP Intermediate_Dir "Release"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../src" /I "../../../../libebml/src" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD BASE RSC /l 0x40c /d "NDEBUG"\r
+# ADD RSC /l 0x40c /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+\r
+!ELSEIF  "$(CFG)" == "test0 - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "Debug"\r
+# PROP BASE Intermediate_Dir "Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "Debug"\r
+# PROP Intermediate_Dir "Debug"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
+# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /ZI /Od /I "../../../src" /I "../../../../libebml/src" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
+# ADD BASE RSC /l 0x40c /d "_DEBUG"\r
+# ADD RSC /l 0x40c /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "test0 - Win32 Release"\r
+# Name "test0 - Win32 Debug"\r
+# Begin Group "Source Files"\r
+\r
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\test\ebml\test0.cpp\r
+# End Source File\r
+# End Group\r
+# Begin Group "Header Files"\r
+\r
+# PROP Default_Filter "h;hpp;hxx;hm;inl"\r
+# End Group\r
+# Begin Group "Resource Files"\r
+\r
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"\r
+# End Group\r
+# End Target\r
+# End Project\r
diff --git a/make/vc6/test/test00.dsp b/make/vc6/test/test00.dsp
new file mode 100644 (file)
index 0000000..215a226
--- /dev/null
@@ -0,0 +1,100 @@
+# Microsoft Developer Studio Project File - Name="test00" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** DO NOT EDIT **\r
+\r
+# TARGTYPE "Win32 (x86) Console Application" 0x0103\r
+\r
+CFG=test00 - Win32 Debug\r
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
+!MESSAGE use the Export Makefile command and run\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "test00.mak".\r
+!MESSAGE \r
+!MESSAGE You can specify a configuration when running NMAKE\r
+!MESSAGE by defining the macro CFG on the command line. For example:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "test00.mak" CFG="test00 - Win32 Debug"\r
+!MESSAGE \r
+!MESSAGE Possible choices for configuration are:\r
+!MESSAGE \r
+!MESSAGE "test00 - Win32 Release" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "test00 - Win32 Debug" (based on "Win32 (x86) Console Application")\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""\r
+# PROP Scc_LocalPath ""\r
+CPP=cl.exe\r
+RSC=rc.exe\r
+\r
+!IF  "$(CFG)" == "test00 - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "Release"\r
+# PROP BASE Intermediate_Dir "Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Release"\r
+# PROP Intermediate_Dir "Release"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../src" /I "../../../../libebml/src" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD BASE RSC /l 0x40c /d "NDEBUG"\r
+# ADD RSC /l 0x40c /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+\r
+!ELSEIF  "$(CFG)" == "test00 - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "Debug"\r
+# PROP BASE Intermediate_Dir "Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "Debug"\r
+# PROP Intermediate_Dir "Debug"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
+# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /ZI /Od /I "../../../src" /I "../../../../libebml/src" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
+# ADD BASE RSC /l 0x40c /d "_DEBUG"\r
+# ADD RSC /l 0x40c /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "test00 - Win32 Release"\r
+# Name "test00 - Win32 Debug"\r
+# Begin Group "Source Files"\r
+\r
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\test\ebml\test00.cpp\r
+# End Source File\r
+# End Group\r
+# Begin Group "Header Files"\r
+\r
+# PROP Default_Filter "h;hpp;hxx;hm;inl"\r
+# End Group\r
+# Begin Group "Resource Files"\r
+\r
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"\r
+# End Group\r
+# End Target\r
+# End Project\r
diff --git a/make/vc6/test/test1.dsp b/make/vc6/test/test1.dsp
new file mode 100644 (file)
index 0000000..eaebc33
--- /dev/null
@@ -0,0 +1,100 @@
+# Microsoft Developer Studio Project File - Name="test1" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** DO NOT EDIT **\r
+\r
+# TARGTYPE "Win32 (x86) Console Application" 0x0103\r
+\r
+CFG=test1 - Win32 Debug\r
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
+!MESSAGE use the Export Makefile command and run\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "test1.mak".\r
+!MESSAGE \r
+!MESSAGE You can specify a configuration when running NMAKE\r
+!MESSAGE by defining the macro CFG on the command line. For example:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "test1.mak" CFG="test1 - Win32 Debug"\r
+!MESSAGE \r
+!MESSAGE Possible choices for configuration are:\r
+!MESSAGE \r
+!MESSAGE "test1 - Win32 Release" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "test1 - Win32 Debug" (based on "Win32 (x86) Console Application")\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""\r
+# PROP Scc_LocalPath ""\r
+CPP=xicl6.exe\r
+RSC=rc.exe\r
+\r
+!IF  "$(CFG)" == "test1 - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "Release"\r
+# PROP BASE Intermediate_Dir "Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Release"\r
+# PROP Intermediate_Dir "Release"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../src" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD BASE RSC /l 0x40c /d "NDEBUG"\r
+# ADD RSC /l 0x40c /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=xilink6.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+\r
+!ELSEIF  "$(CFG)" == "test1 - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "Debug"\r
+# PROP BASE Intermediate_Dir "Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "Debug"\r
+# PROP Intermediate_Dir "Debug"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../src" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
+# ADD BASE RSC /l 0x40c /d "_DEBUG"\r
+# ADD RSC /l 0x40c /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=xilink6.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "test1 - Win32 Release"\r
+# Name "test1 - Win32 Debug"\r
+# Begin Group "Source Files"\r
+\r
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\test\block\test1.cpp\r
+# End Source File\r
+# End Group\r
+# Begin Group "Header Files"\r
+\r
+# PROP Default_Filter "h;hpp;hxx;hm;inl"\r
+# End Group\r
+# Begin Group "Resource Files"\r
+\r
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"\r
+# End Group\r
+# End Target\r
+# End Project\r
diff --git a/make/vc6/test/test2.dsp b/make/vc6/test/test2.dsp
new file mode 100644 (file)
index 0000000..0566e51
--- /dev/null
@@ -0,0 +1,100 @@
+# Microsoft Developer Studio Project File - Name="test2" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** DO NOT EDIT **\r
+\r
+# TARGTYPE "Win32 (x86) Console Application" 0x0103\r
+\r
+CFG=test2 - Win32 Debug\r
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
+!MESSAGE use the Export Makefile command and run\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "test2.mak".\r
+!MESSAGE \r
+!MESSAGE You can specify a configuration when running NMAKE\r
+!MESSAGE by defining the macro CFG on the command line. For example:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "test2.mak" CFG="test2 - Win32 Debug"\r
+!MESSAGE \r
+!MESSAGE Possible choices for configuration are:\r
+!MESSAGE \r
+!MESSAGE "test2 - Win32 Release" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "test2 - Win32 Debug" (based on "Win32 (x86) Console Application")\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""\r
+# PROP Scc_LocalPath ""\r
+CPP=xicl6.exe\r
+RSC=rc.exe\r
+\r
+!IF  "$(CFG)" == "test2 - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "Release"\r
+# PROP BASE Intermediate_Dir "Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Release"\r
+# PROP Intermediate_Dir "Release"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../src" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD BASE RSC /l 0x40c /d "NDEBUG"\r
+# ADD RSC /l 0x40c /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=xilink6.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+\r
+!ELSEIF  "$(CFG)" == "test2 - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "Debug"\r
+# PROP BASE Intermediate_Dir "Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "Debug"\r
+# PROP Intermediate_Dir "Debug"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../src" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
+# ADD BASE RSC /l 0x40c /d "_DEBUG"\r
+# ADD RSC /l 0x40c /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=xilink6.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "test2 - Win32 Release"\r
+# Name "test2 - Win32 Debug"\r
+# Begin Group "Source Files"\r
+\r
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\test\cluster\test2.cpp\r
+# End Source File\r
+# End Group\r
+# Begin Group "Header Files"\r
+\r
+# PROP Default_Filter "h;hpp;hxx;hm;inl"\r
+# End Group\r
+# Begin Group "Resource Files"\r
+\r
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"\r
+# End Group\r
+# End Target\r
+# End Project\r
diff --git a/make/vc6/test/test3.dsp b/make/vc6/test/test3.dsp
new file mode 100644 (file)
index 0000000..9242d26
--- /dev/null
@@ -0,0 +1,100 @@
+# Microsoft Developer Studio Project File - Name="test3" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** DO NOT EDIT **\r
+\r
+# TARGTYPE "Win32 (x86) Console Application" 0x0103\r
+\r
+CFG=test3 - Win32 Debug\r
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
+!MESSAGE use the Export Makefile command and run\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "test3.mak".\r
+!MESSAGE \r
+!MESSAGE You can specify a configuration when running NMAKE\r
+!MESSAGE by defining the macro CFG on the command line. For example:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "test3.mak" CFG="test3 - Win32 Debug"\r
+!MESSAGE \r
+!MESSAGE Possible choices for configuration are:\r
+!MESSAGE \r
+!MESSAGE "test3 - Win32 Release" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "test3 - Win32 Debug" (based on "Win32 (x86) Console Application")\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""\r
+# PROP Scc_LocalPath ""\r
+CPP=xicl6.exe\r
+RSC=rc.exe\r
+\r
+!IF  "$(CFG)" == "test3 - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "Release"\r
+# PROP BASE Intermediate_Dir "Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Release"\r
+# PROP Intermediate_Dir "Release"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../src" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD BASE RSC /l 0x40c /d "NDEBUG"\r
+# ADD RSC /l 0x40c /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=xilink6.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+\r
+!ELSEIF  "$(CFG)" == "test3 - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "Debug"\r
+# PROP BASE Intermediate_Dir "Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "Debug"\r
+# PROP Intermediate_Dir "Debug"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../src" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
+# ADD BASE RSC /l 0x40c /d "_DEBUG"\r
+# ADD RSC /l 0x40c /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=xilink6.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "test3 - Win32 Release"\r
+# Name "test3 - Win32 Debug"\r
+# Begin Group "Source Files"\r
+\r
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\test\endian\test3.cpp\r
+# End Source File\r
+# End Group\r
+# Begin Group "Header Files"\r
+\r
+# PROP Default_Filter "h;hpp;hxx;hm;inl"\r
+# End Group\r
+# Begin Group "Resource Files"\r
+\r
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"\r
+# End Group\r
+# End Target\r
+# End Project\r
diff --git a/make/vc6/test/test4.dsp b/make/vc6/test/test4.dsp
new file mode 100644 (file)
index 0000000..8297dae
--- /dev/null
@@ -0,0 +1,100 @@
+# Microsoft Developer Studio Project File - Name="test4" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** DO NOT EDIT **\r
+\r
+# TARGTYPE "Win32 (x86) Console Application" 0x0103\r
+\r
+CFG=test4 - Win32 Debug\r
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
+!MESSAGE use the Export Makefile command and run\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "test4.mak".\r
+!MESSAGE \r
+!MESSAGE You can specify a configuration when running NMAKE\r
+!MESSAGE by defining the macro CFG on the command line. For example:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "test4.mak" CFG="test4 - Win32 Debug"\r
+!MESSAGE \r
+!MESSAGE Possible choices for configuration are:\r
+!MESSAGE \r
+!MESSAGE "test4 - Win32 Release" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "test4 - Win32 Debug" (based on "Win32 (x86) Console Application")\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""\r
+# PROP Scc_LocalPath ""\r
+CPP=xicl6.exe\r
+RSC=rc.exe\r
+\r
+!IF  "$(CFG)" == "test4 - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "Release"\r
+# PROP BASE Intermediate_Dir "Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Release"\r
+# PROP Intermediate_Dir "Release"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../src" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD BASE RSC /l 0x40c /d "NDEBUG"\r
+# ADD RSC /l 0x40c /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=xilink6.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+\r
+!ELSEIF  "$(CFG)" == "test4 - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "Debug"\r
+# PROP BASE Intermediate_Dir "Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "Debug"\r
+# PROP Intermediate_Dir "Debug"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../src" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
+# ADD BASE RSC /l 0x40c /d "_DEBUG"\r
+# ADD RSC /l 0x40c /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=xilink6.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "test4 - Win32 Release"\r
+# Name "test4 - Win32 Debug"\r
+# Begin Group "Source Files"\r
+\r
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\test\header\test4.cpp\r
+# End Source File\r
+# End Group\r
+# Begin Group "Header Files"\r
+\r
+# PROP Default_Filter "h;hpp;hxx;hm;inl"\r
+# End Group\r
+# Begin Group "Resource Files"\r
+\r
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"\r
+# End Group\r
+# End Target\r
+# End Project\r
diff --git a/make/vc6/test/test5.dsp b/make/vc6/test/test5.dsp
new file mode 100644 (file)
index 0000000..be82180
--- /dev/null
@@ -0,0 +1,100 @@
+# Microsoft Developer Studio Project File - Name="test5" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** DO NOT EDIT **\r
+\r
+# TARGTYPE "Win32 (x86) Console Application" 0x0103\r
+\r
+CFG=test5 - Win32 Debug\r
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
+!MESSAGE use the Export Makefile command and run\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "test5.mak".\r
+!MESSAGE \r
+!MESSAGE You can specify a configuration when running NMAKE\r
+!MESSAGE by defining the macro CFG on the command line. For example:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "test5.mak" CFG="test5 - Win32 Debug"\r
+!MESSAGE \r
+!MESSAGE Possible choices for configuration are:\r
+!MESSAGE \r
+!MESSAGE "test5 - Win32 Release" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "test5 - Win32 Debug" (based on "Win32 (x86) Console Application")\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""\r
+# PROP Scc_LocalPath ""\r
+CPP=xicl6.exe\r
+RSC=rc.exe\r
+\r
+!IF  "$(CFG)" == "test5 - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "Release"\r
+# PROP BASE Intermediate_Dir "Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Release"\r
+# PROP Intermediate_Dir "Release"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../src" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD BASE RSC /l 0x40c /d "NDEBUG"\r
+# ADD RSC /l 0x40c /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=xilink6.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+\r
+!ELSEIF  "$(CFG)" == "test5 - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "Debug"\r
+# PROP BASE Intermediate_Dir "Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "Debug"\r
+# PROP Intermediate_Dir "Debug"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../src" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
+# ADD BASE RSC /l 0x40c /d "_DEBUG"\r
+# ADD RSC /l 0x40c /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=xilink6.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "test5 - Win32 Release"\r
+# Name "test5 - Win32 Debug"\r
+# Begin Group "Source Files"\r
+\r
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\test\utf8\test5.cpp\r
+# End Source File\r
+# End Group\r
+# Begin Group "Header Files"\r
+\r
+# PROP Default_Filter "h;hpp;hxx;hm;inl"\r
+# End Group\r
+# Begin Group "Resource Files"\r
+\r
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"\r
+# End Group\r
+# End Target\r
+# End Project\r
diff --git a/make/vc6/test/test6.dsp b/make/vc6/test/test6.dsp
new file mode 100644 (file)
index 0000000..e052b36
--- /dev/null
@@ -0,0 +1,101 @@
+# Microsoft Developer Studio Project File - Name="test6" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** DO NOT EDIT **\r
+\r
+# TARGTYPE "Win32 (x86) Console Application" 0x0103\r
+\r
+CFG=test6 - Win32 Debug\r
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
+!MESSAGE use the Export Makefile command and run\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "test6.mak".\r
+!MESSAGE \r
+!MESSAGE You can specify a configuration when running NMAKE\r
+!MESSAGE by defining the macro CFG on the command line. For example:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "test6.mak" CFG="test6 - Win32 Debug"\r
+!MESSAGE \r
+!MESSAGE Possible choices for configuration are:\r
+!MESSAGE \r
+!MESSAGE "test6 - Win32 Release" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "test6 - Win32 Debug" (based on "Win32 (x86) Console Application")\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""\r
+# PROP Scc_LocalPath ""\r
+CPP=cl.exe\r
+RSC=rc.exe\r
+\r
+!IF  "$(CFG)" == "test6 - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "Release"\r
+# PROP BASE Intermediate_Dir "Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Release"\r
+# PROP Intermediate_Dir "Release"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../.." /I "../../../../libebml" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD BASE RSC /l 0x40c /d "NDEBUG"\r
+# ADD RSC /l 0x40c /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+\r
+!ELSEIF  "$(CFG)" == "test6 - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "Debug"\r
+# PROP BASE Intermediate_Dir "Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "Debug"\r
+# PROP Intermediate_Dir "Debug"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
+# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /ZI /Od /I "../../.." /I "../../../../libebml" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
+# ADD BASE RSC /l 0x40c /d "_DEBUG"\r
+# ADD RSC /l 0x40c /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "test6 - Win32 Release"\r
+# Name "test6 - Win32 Debug"\r
+# Begin Group "Source Files"\r
+\r
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\test\mux\test6.cpp\r
+# End Source File\r
+# End Group\r
+# Begin Group "Header Files"\r
+\r
+# PROP Default_Filter "h;hpp;hxx;hm;inl"\r
+# End Group\r
+# Begin Group "Resource Files"\r
+\r
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"\r
+# End Group\r
+# End Target\r
+# End Project\r
diff --git a/make/vc6/test/test6c.dsp b/make/vc6/test/test6c.dsp
new file mode 100644 (file)
index 0000000..f1469b1
--- /dev/null
@@ -0,0 +1,100 @@
+# Microsoft Developer Studio Project File - Name="test6c" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** DO NOT EDIT **\r
+\r
+# TARGTYPE "Win32 (x86) Console Application" 0x0103\r
+\r
+CFG=test6c - Win32 Debug\r
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
+!MESSAGE use the Export Makefile command and run\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "test6c.mak".\r
+!MESSAGE \r
+!MESSAGE You can specify a configuration when running NMAKE\r
+!MESSAGE by defining the macro CFG on the command line. For example:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "test6c.mak" CFG="test6c - Win32 Debug"\r
+!MESSAGE \r
+!MESSAGE Possible choices for configuration are:\r
+!MESSAGE \r
+!MESSAGE "test6c - Win32 Release" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "test6c - Win32 Debug" (based on "Win32 (x86) Console Application")\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""\r
+# PROP Scc_LocalPath ""\r
+CPP=xicl6.exe\r
+RSC=rc.exe\r
+\r
+!IF  "$(CFG)" == "test6c - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "Release"\r
+# PROP BASE Intermediate_Dir "Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Release"\r
+# PROP Intermediate_Dir "Release"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../src/api/c" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD BASE RSC /l 0x40c /d "NDEBUG"\r
+# ADD RSC /l 0x40c /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=xilink6.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+\r
+!ELSEIF  "$(CFG)" == "test6c - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "Debug"\r
+# PROP BASE Intermediate_Dir "Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "Debug"\r
+# PROP Intermediate_Dir "Debug"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../src/api/c" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
+# ADD BASE RSC /l 0x40c /d "_DEBUG"\r
+# ADD RSC /l 0x40c /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=xilink6.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "test6c - Win32 Release"\r
+# Name "test6c - Win32 Debug"\r
+# Begin Group "Source Files"\r
+\r
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
+# Begin Source File\r
+\r
+SOURCE="..\..\..\test\mux\test6.c"\r
+# End Source File\r
+# End Group\r
+# Begin Group "Header Files"\r
+\r
+# PROP Default_Filter "h;hpp;hxx;hm;inl"\r
+# End Group\r
+# Begin Group "Resource Files"\r
+\r
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"\r
+# End Group\r
+# End Target\r
+# End Project\r
diff --git a/make/vc6/test/test7.dsp b/make/vc6/test/test7.dsp
new file mode 100644 (file)
index 0000000..38616d1
--- /dev/null
@@ -0,0 +1,100 @@
+# Microsoft Developer Studio Project File - Name="test7" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** DO NOT EDIT **\r
+\r
+# TARGTYPE "Win32 (x86) Console Application" 0x0103\r
+\r
+CFG=test7 - Win32 Debug\r
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
+!MESSAGE use the Export Makefile command and run\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "test7.mak".\r
+!MESSAGE \r
+!MESSAGE You can specify a configuration when running NMAKE\r
+!MESSAGE by defining the macro CFG on the command line. For example:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "test7.mak" CFG="test7 - Win32 Debug"\r
+!MESSAGE \r
+!MESSAGE Possible choices for configuration are:\r
+!MESSAGE \r
+!MESSAGE "test7 - Win32 Release" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "test7 - Win32 Debug" (based on "Win32 (x86) Console Application")\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""\r
+# PROP Scc_LocalPath ""\r
+CPP=xicl6.exe\r
+RSC=rc.exe\r
+\r
+!IF  "$(CFG)" == "test7 - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "Release"\r
+# PROP BASE Intermediate_Dir "Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Release"\r
+# PROP Intermediate_Dir "Release"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../src" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD BASE RSC /l 0x40c /d "NDEBUG"\r
+# ADD RSC /l 0x40c /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=xilink6.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+\r
+!ELSEIF  "$(CFG)" == "test7 - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "Debug"\r
+# PROP BASE Intermediate_Dir "Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "Debug"\r
+# PROP Intermediate_Dir "Debug"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../src" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
+# ADD BASE RSC /l 0x40c /d "_DEBUG"\r
+# ADD RSC /l 0x40c /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=xilink6.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "test7 - Win32 Release"\r
+# Name "test7 - Win32 Debug"\r
+# Begin Group "Source Files"\r
+\r
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\test\mux\test7.cpp\r
+# End Source File\r
+# End Group\r
+# Begin Group "Header Files"\r
+\r
+# PROP Default_Filter "h;hpp;hxx;hm;inl"\r
+# End Group\r
+# Begin Group "Resource Files"\r
+\r
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"\r
+# End Group\r
+# End Target\r
+# End Project\r
diff --git a/make/vc6/test/test8.dsp b/make/vc6/test/test8.dsp
new file mode 100644 (file)
index 0000000..057e60e
--- /dev/null
@@ -0,0 +1,100 @@
+# Microsoft Developer Studio Project File - Name="test8" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** DO NOT EDIT **\r
+\r
+# TARGTYPE "Win32 (x86) Console Application" 0x0103\r
+\r
+CFG=test8 - Win32 Debug\r
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
+!MESSAGE use the Export Makefile command and run\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "test8.mak".\r
+!MESSAGE \r
+!MESSAGE You can specify a configuration when running NMAKE\r
+!MESSAGE by defining the macro CFG on the command line. For example:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "test8.mak" CFG="test8 - Win32 Debug"\r
+!MESSAGE \r
+!MESSAGE Possible choices for configuration are:\r
+!MESSAGE \r
+!MESSAGE "test8 - Win32 Release" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "test8 - Win32 Debug" (based on "Win32 (x86) Console Application")\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""\r
+# PROP Scc_LocalPath ""\r
+CPP=cl.exe\r
+RSC=rc.exe\r
+\r
+!IF  "$(CFG)" == "test8 - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "Release"\r
+# PROP BASE Intermediate_Dir "Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Release"\r
+# PROP Intermediate_Dir "Release"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../.." /I "../../../../libebml" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD BASE RSC /l 0x40c /d "NDEBUG"\r
+# ADD RSC /l 0x40c /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+\r
+!ELSEIF  "$(CFG)" == "test8 - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "Debug"\r
+# PROP BASE Intermediate_Dir "Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "Debug"\r
+# PROP Intermediate_Dir "Debug"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
+# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /ZI /Od /I "../../.." /I "../../../../libebml" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
+# ADD BASE RSC /l 0x40c /d "_DEBUG"\r
+# ADD RSC /l 0x40c /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "test8 - Win32 Release"\r
+# Name "test8 - Win32 Debug"\r
+# Begin Group "Source Files"\r
+\r
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\test\mux\test8.cpp\r
+# End Source File\r
+# End Group\r
+# Begin Group "Header Files"\r
+\r
+# PROP Default_Filter "h;hpp;hxx;hm;inl"\r
+# End Group\r
+# Begin Group "Resource Files"\r
+\r
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"\r
+# End Group\r
+# End Target\r
+# End Project\r
diff --git a/make/vc6/test/test8c.dsp b/make/vc6/test/test8c.dsp
new file mode 100644 (file)
index 0000000..d8bb40f
--- /dev/null
@@ -0,0 +1,100 @@
+# Microsoft Developer Studio Project File - Name="test8c" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** DO NOT EDIT **\r
+\r
+# TARGTYPE "Win32 (x86) Console Application" 0x0103\r
+\r
+CFG=test8c - Win32 Debug\r
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
+!MESSAGE use the Export Makefile command and run\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "test8c.mak".\r
+!MESSAGE \r
+!MESSAGE You can specify a configuration when running NMAKE\r
+!MESSAGE by defining the macro CFG on the command line. For example:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "test8c.mak" CFG="test8c - Win32 Debug"\r
+!MESSAGE \r
+!MESSAGE Possible choices for configuration are:\r
+!MESSAGE \r
+!MESSAGE "test8c - Win32 Release" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "test8c - Win32 Debug" (based on "Win32 (x86) Console Application")\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""\r
+# PROP Scc_LocalPath ""\r
+CPP=xicl6.exe\r
+RSC=rc.exe\r
+\r
+!IF  "$(CFG)" == "test8c - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "Release"\r
+# PROP BASE Intermediate_Dir "Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Release"\r
+# PROP Intermediate_Dir "Release"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../src/api/c" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD BASE RSC /l 0x40c /d "NDEBUG"\r
+# ADD RSC /l 0x40c /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=xilink6.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+\r
+!ELSEIF  "$(CFG)" == "test8c - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "Debug"\r
+# PROP BASE Intermediate_Dir "Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "Debug"\r
+# PROP Intermediate_Dir "Debug"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../src/api/c" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
+# ADD BASE RSC /l 0x40c /d "_DEBUG"\r
+# ADD RSC /l 0x40c /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=xilink6.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "test8c - Win32 Release"\r
+# Name "test8c - Win32 Debug"\r
+# Begin Group "Source Files"\r
+\r
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
+# Begin Source File\r
+\r
+SOURCE="..\..\..\test\mux\test8.c"\r
+# End Source File\r
+# End Group\r
+# Begin Group "Header Files"\r
+\r
+# PROP Default_Filter "h;hpp;hxx;hm;inl"\r
+# End Group\r
+# Begin Group "Resource Files"\r
+\r
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"\r
+# End Group\r
+# End Target\r
+# End Project\r
diff --git a/make/vc6/test/test9.dsp b/make/vc6/test/test9.dsp
new file mode 100644 (file)
index 0000000..11101e2
--- /dev/null
@@ -0,0 +1,100 @@
+# Microsoft Developer Studio Project File - Name="test9" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** DO NOT EDIT **\r
+\r
+# TARGTYPE "Win32 (x86) Console Application" 0x0103\r
+\r
+CFG=test9 - Win32 Debug\r
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
+!MESSAGE use the Export Makefile command and run\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "test9.mak".\r
+!MESSAGE \r
+!MESSAGE You can specify a configuration when running NMAKE\r
+!MESSAGE by defining the macro CFG on the command line. For example:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "test9.mak" CFG="test9 - Win32 Debug"\r
+!MESSAGE \r
+!MESSAGE Possible choices for configuration are:\r
+!MESSAGE \r
+!MESSAGE "test9 - Win32 Release" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "test9 - Win32 Debug" (based on "Win32 (x86) Console Application")\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""\r
+# PROP Scc_LocalPath ""\r
+CPP=cl.exe\r
+RSC=rc.exe\r
+\r
+!IF  "$(CFG)" == "test9 - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "Release"\r
+# PROP BASE Intermediate_Dir "Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Release"\r
+# PROP Intermediate_Dir "Release"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../.." /I "../../../../libebml" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD BASE RSC /l 0x40c /d "NDEBUG"\r
+# ADD RSC /l 0x40c /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+\r
+!ELSEIF  "$(CFG)" == "test9 - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "Debug"\r
+# PROP BASE Intermediate_Dir "Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "Debug"\r
+# PROP Intermediate_Dir "Debug"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
+# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /ZI /Od /I "../../.." /I "../../../../libebml" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
+# ADD BASE RSC /l 0x40c /d "_DEBUG"\r
+# ADD RSC /l 0x40c /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "test9 - Win32 Release"\r
+# Name "test9 - Win32 Debug"\r
+# Begin Group "Source Files"\r
+\r
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\test\tags\test9.cpp\r
+# End Source File\r
+# End Group\r
+# Begin Group "Header Files"\r
+\r
+# PROP Default_Filter "h;hpp;hxx;hm;inl"\r
+# End Group\r
+# Begin Group "Resource Files"\r
+\r
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"\r
+# End Group\r
+# End Target\r
+# End Project\r
diff --git a/make/vc6/vc6.dsw b/make/vc6/vc6.dsw
new file mode 100644 (file)
index 0000000..56de9f0
--- /dev/null
@@ -0,0 +1,134 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00\r
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!\r
+\r
+###############################################################################\r
+\r
+Project: "libebml"=..\..\..\libebml\make\vc6\lib\static\libebml.dsp - Package Owner=<4>\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<4>\r
+{{{\r
+}}}\r
+\r
+###############################################################################\r
+\r
+Project: "libmatroska"=.\lib\static\libmatroska.dsp - Package Owner=<4>\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<4>\r
+{{{\r
+    Begin Project Dependency\r
+    Project_Dep_Name libebml\r
+    End Project Dependency\r
+}}}\r
+\r
+###############################################################################\r
+\r
+Project: "test0"=test\test0.dsp - Package Owner=<4>\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<4>\r
+{{{\r
+    Begin Project Dependency\r
+    Project_Dep_Name libebml\r
+    End Project Dependency\r
+    Begin Project Dependency\r
+    Project_Dep_Name libmatroska\r
+    End Project Dependency\r
+}}}\r
+\r
+###############################################################################\r
+\r
+Project: "test00"=test\test00.dsp - Package Owner=<4>\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<4>\r
+{{{\r
+    Begin Project Dependency\r
+    Project_Dep_Name libebml\r
+    End Project Dependency\r
+    Begin Project Dependency\r
+    Project_Dep_Name libmatroska\r
+    End Project Dependency\r
+}}}\r
+\r
+###############################################################################\r
+\r
+Project: "test6"=test\test6.dsp - Package Owner=<4>\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<4>\r
+{{{\r
+    Begin Project Dependency\r
+    Project_Dep_Name libebml\r
+    End Project Dependency\r
+    Begin Project Dependency\r
+    Project_Dep_Name libmatroska\r
+    End Project Dependency\r
+}}}\r
+\r
+###############################################################################\r
+\r
+Project: "test8"=test\test8.dsp - Package Owner=<4>\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<4>\r
+{{{\r
+    Begin Project Dependency\r
+    Project_Dep_Name libebml\r
+    End Project Dependency\r
+    Begin Project Dependency\r
+    Project_Dep_Name libmatroska\r
+    End Project Dependency\r
+}}}\r
+\r
+###############################################################################\r
+\r
+Project: "test9"=test\test9.dsp - Package Owner=<4>\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<4>\r
+{{{\r
+    Begin Project Dependency\r
+    Project_Dep_Name libebml\r
+    End Project Dependency\r
+    Begin Project Dependency\r
+    Project_Dep_Name libmatroska\r
+    End Project Dependency\r
+}}}\r
+\r
+###############################################################################\r
+\r
+Global:\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<3>\r
+{{{\r
+}}}\r
+\r
+###############################################################################\r
+\r
diff --git a/make/vc7/Makefile b/make/vc7/Makefile
new file mode 100644 (file)
index 0000000..546694d
--- /dev/null
@@ -0,0 +1,60 @@
+# Project: libmatroska
+# Makefile to use the Free Visual C++ 2003 compiler from Microsoft with GNU Make
+
+# Compile with debug information?
+#DEBUG = yes
+
+# Where libebml resides
+EBML_DIR = ../../../libebml
+
+#
+# Don't change anything below this line.
+#
+CXX  = cl /Tp
+CC   = cl /Tc
+SRC  = $(wildcard ../../src/*.cpp)
+OBJ  = $(patsubst %.cpp,%.obj,$(SRC))
+INCS = /I../.. /I$(EBML_DIR)
+LDFLAGS = /NOLOGO /DLL /MAP:libmatroska.map /LIBPATH:$(EBML_DIR)/make/vc7 /VERSION:0.7
+OPTMIZ = /G6 /O2 /Oi /GL /Wp64
+CXXFLAGS = $(INCS) /DWIN32 /nologo /DEBML_DLL 
+
+
+ifeq (yes,$(DEBUG))
+CXXFLAGS += /Zi /DDEBUG /D_DEBUG /MTd /RTC1
+LDFLAGS += /DEBUG
+else
+CXXFLAGS += /MT
+LDFLAGS += /OPT:REF
+endif
+
+LIBS = libmatroska.dll
+
+.PHONY: all all-before all-after clean clean-custom
+
+%.obj : %.cpp
+       $(CXX) $< /c $(CXXFLAGS) /Fo$@
+
+all: lib
+
+lib: $(LIBS)
+
+clean:
+       $(RM) $(OBJ) libmatroska.lib libmatroska.dll
+
+libmatroska.lib: $(OBJ)
+       lib /OUT:$@ /NODEFAULTLIB $(OBJ)
+
+libmatroska.dll: $(OBJ)
+       link $(LDFLAGS) /OUT:$@ $(OBJ) libebml.lib
+#      user32.lib
+
+depend:
+       $(CXX) $(CXXFLAGS) -MM $(SRC) > .depend
+
+#
+# include dependency files if they exist
+#
+ifneq ($(wildcard .depend),)
+include .depend
+endif
diff --git a/make/vc7/lib/dll/libmatroskadll.v71.vcproj b/make/vc7/lib/dll/libmatroskadll.v71.vcproj
new file mode 100644 (file)
index 0000000..f61dff3
--- /dev/null
@@ -0,0 +1,277 @@
+<?xml version="1.0" encoding="Windows-1252"?>\r
+<VisualStudioProject\r
+       ProjectType="Visual C++"\r
+       Version="7.10"\r
+       Name="libmatroskadll"\r
+       ProjectGUID="{B227AC03-C69E-46B1-B91E-A77BE4C6F83A}"\r
+       Keyword="Win32Proj">\r
+       <Platforms>\r
+               <Platform\r
+                       Name="Win32"/>\r
+       </Platforms>\r
+       <Configurations>\r
+               <Configuration\r
+                       Name="Debug|Win32"\r
+                       OutputDirectory="Debug"\r
+                       IntermediateDirectory="Debug"\r
+                       ConfigurationType="2"\r
+                       CharacterSet="2">\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               AdditionalIncludeDirectories="../../../../../libebml;../../../.."\r
+                               PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;EBML_DLL;MATROSKA_DLL;MATROSKA_DLL_EXPORT"\r
+                               MinimalRebuild="TRUE"\r
+                               BasicRuntimeChecks="3"\r
+                               RuntimeLibrary="1"\r
+                               UsePrecompiledHeader="0"\r
+                               WarningLevel="3"\r
+                               Detect64BitPortabilityProblems="TRUE"\r
+                               DebugInformationFormat="4"/>\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"/>\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               OutputFile="$(OutDir)/libmatroska.dll"\r
+                               LinkIncremental="2"\r
+                               GenerateDebugInformation="TRUE"\r
+                               ProgramDatabaseFile="$(OutDir)/libmatroska.pdb"\r
+                               SubSystem="2"\r
+                               ImportLibrary="$(OutDir)/libmatroska.lib"\r
+                               TargetMachine="1"/>\r
+                       <Tool\r
+                               Name="VCMIDLTool"/>\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"/>\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"/>\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"/>\r
+                       <Tool\r
+                               Name="VCManagedWrapperGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Release|Win32"\r
+                       OutputDirectory="Release"\r
+                       IntermediateDirectory="Release"\r
+                       ConfigurationType="2"\r
+                       CharacterSet="2">\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               AdditionalIncludeDirectories="../../../../../libebml;../../../.."\r
+                               PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;EBML_DLL;MATROSKA_DLL;MATROSKA_DLL_EXPORT"\r
+                               RuntimeLibrary="0"\r
+                               UsePrecompiledHeader="0"\r
+                               WarningLevel="3"\r
+                               Detect64BitPortabilityProblems="TRUE"\r
+                               DebugInformationFormat="3"/>\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"/>\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               OutputFile="$(OutDir)/libmatroska.dll"\r
+                               LinkIncremental="1"\r
+                               GenerateDebugInformation="TRUE"\r
+                               SubSystem="2"\r
+                               OptimizeReferences="2"\r
+                               EnableCOMDATFolding="2"\r
+                               ImportLibrary="$(OutDir)/libmatroska.lib"\r
+                               TargetMachine="1"/>\r
+                       <Tool\r
+                               Name="VCMIDLTool"/>\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"/>\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"/>\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"/>\r
+                       <Tool\r
+                               Name="VCManagedWrapperGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>\r
+               </Configuration>\r
+       </Configurations>\r
+       <References>\r
+       </References>\r
+       <Files>\r
+               <Filter\r
+                       Name="Source Files"\r
+                       Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"\r
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxAttached.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxAttachments.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxBlock.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxBlockData.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxChapters.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxCluster.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxClusterData.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxContentEncoding.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxContexts.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxCues.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxCuesData.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxInfo.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxInfoData.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxSeekHead.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxSegment.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxTag.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxTagMulti.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxTags.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxTrackAudio.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxTrackEntryData.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxTracks.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxTrackVideo.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxVersion.cpp">\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="Header Files"\r
+                       Filter="h;hpp;hxx;hm;inl;inc;xsd"\r
+                       UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxAttached.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxAttachments.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxBlock.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxBlockData.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxChapters.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxCluster.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxClusterData.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxConfig.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxContentEncoding.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxContexts.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxCues.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxCuesData.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxInfo.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxInfoData.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxSeekHead.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxSegment.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxTag.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxTagMulti.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxTags.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxTrackAudio.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxTrackEntryData.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxTracks.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxTrackVideo.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxTypes.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxVersion.h">\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="Resource Files"\r
+                       Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"\r
+                       UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">\r
+               </Filter>\r
+       </Files>\r
+       <Globals>\r
+       </Globals>\r
+</VisualStudioProject>\r
diff --git a/make/vc7/lib/static/libmatroska.v71.vcproj b/make/vc7/lib/static/libmatroska.v71.vcproj
new file mode 100644 (file)
index 0000000..7ef06d0
--- /dev/null
@@ -0,0 +1,283 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="7.10"
+       Name="libmatroska"
+       SccProjectName=""
+       SccLocalPath="">
+       <Platforms>
+               <Platform
+                       Name="Win32"/>
+       </Platforms>
+       <Configurations>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory=".\Release"
+                       IntermediateDirectory=".\Release"
+                       ConfigurationType="4"
+                       UseOfMFC="0"
+                       ATLMinimizesCRunTimeLibraryUsage="FALSE"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               InlineFunctionExpansion="1"
+                               AdditionalIncludeDirectories="../../../../../libebml;../../../.."
+                               PreprocessorDefinitions="WIN32,NDEBUG,_LIB"
+                               StringPooling="TRUE"
+                               RuntimeLibrary="0"
+                               EnableFunctionLevelLinking="TRUE"
+                               UsePrecompiledHeader="2"
+                               PrecompiledHeaderFile=".\Release/libmatroska.pch"
+                               AssemblerListingLocation=".\Release/"
+                               ObjectFile=".\Release/"
+                               ProgramDataBaseFileName=".\Release/"
+                               WarningLevel="3"
+                               SuppressStartupBanner="TRUE"
+                               CompileAs="0"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLibrarianTool"
+                               OutputFile=".\Release\libmatroska.lib"
+                               SuppressStartupBanner="TRUE"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                               PreprocessorDefinitions="NDEBUG"
+                               Culture="2057"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory=".\Debug"
+                       IntermediateDirectory=".\Debug"
+                       ConfigurationType="4"
+                       UseOfMFC="0"
+                       ATLMinimizesCRunTimeLibraryUsage="FALSE"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="../../../../../libebml;../../../.."
+                               PreprocessorDefinitions="WIN32,_DEBUG,_LIB"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="1"
+                               UsePrecompiledHeader="2"
+                               PrecompiledHeaderFile=".\Debug/libmatroska.pch"
+                               AssemblerListingLocation=".\Debug/"
+                               ObjectFile=".\Debug/"
+                               ProgramDataBaseFileName=".\Debug/"
+                               WarningLevel="3"
+                               SuppressStartupBanner="TRUE"
+                               DebugInformationFormat="4"
+                               CompileAs="0"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLibrarianTool"
+                               OutputFile=".\Debug\libmatroska.lib"
+                               SuppressStartupBanner="TRUE"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                               PreprocessorDefinitions="_DEBUG"
+                               Culture="2057"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
+                       <File
+                               RelativePath="..\..\..\..\src\FileKax.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\src\KaxAttached.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\src\KaxAttachments.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\src\KaxBlock.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\src\KaxBlockData.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\src\KaxChapters.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\src\KaxCluster.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\src\KaxClusterData.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\src\KaxContentEncoding.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\src\KaxContexts.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\src\KaxCues.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\src\KaxCuesData.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\src\KaxInfo.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\src\KaxInfoData.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\src\KaxSeekHead.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\src\KaxSegment.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\src\KaxTag.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\src\KaxTagMulti.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\src\KaxTags.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\src\KaxTrackAudio.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\src\KaxTrackEntryData.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\src\KaxTracks.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\src\KaxTrackVideo.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\src\KaxVersion.cpp">
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Header Files"
+                       Filter="h;hpp;hxx;hm;inl">
+                       <File
+                               RelativePath="..\..\..\..\matroska\FileKax.h">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\matroska\KaxAttached.h">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\matroska\KaxAttachments.h">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\matroska\KaxBlock.h">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\matroska\KaxBlockData.h">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\matroska\KaxChapters.h">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\matroska\KaxCluster.h">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\matroska\KaxClusterData.h">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\matroska\KaxConfig.h">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\matroska\KaxContentEncoding.h">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\matroska\KaxContexts.h">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\matroska\KaxCues.h">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\matroska\KaxCuesData.h">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\matroska\KaxInfo.h">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\matroska\KaxInfoData.h">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\matroska\KaxSeekHead.h">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\matroska\KaxSegment.h">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\matroska\KaxTag.h">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\matroska\KaxTagMulti.h">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\matroska\KaxTags.h">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\matroska\KaxTrackAudio.h">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\matroska\KaxTrackEntryData.h">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\matroska\KaxTracks.h">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\matroska\KaxTrackVideo.h">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\matroska\KaxTypes.h">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\matroska\KaxVersion.h">
+                       </File>
+                       <File
+                               RelativePath="..\..\..\..\matroska\StdInclude.h">
+                       </File>
+               </Filter>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/make/vc7/lib/static/libmatroska.vcproj b/make/vc7/lib/static/libmatroska.vcproj
new file mode 100644 (file)
index 0000000..ab3c3ef
--- /dev/null
@@ -0,0 +1,269 @@
+<?xml version="1.0" encoding = "Windows-1252"?>\r
+<VisualStudioProject\r
+       ProjectType="Visual C++"\r
+       Version="7.00"\r
+       Name="libmatroska"\r
+       SccProjectName=""\r
+       SccLocalPath="">\r
+       <Platforms>\r
+               <Platform\r
+                       Name="Win32"/>\r
+       </Platforms>\r
+       <Configurations>\r
+               <Configuration\r
+                       Name="Release|Win32"\r
+                       OutputDirectory=".\Release"\r
+                       IntermediateDirectory=".\Release"\r
+                       ConfigurationType="4"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="FALSE"\r
+                       CharacterSet="2">\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories="../../../../../libebml;../../../.."\r
+                               PreprocessorDefinitions="WIN32,NDEBUG,_LIB"\r
+                               StringPooling="TRUE"\r
+                               RuntimeLibrary="0"\r
+                               EnableFunctionLevelLinking="TRUE"\r
+                               UsePrecompiledHeader="2"\r
+                               PrecompiledHeaderFile=".\Release/libmatroska.pch"\r
+                               AssemblerListingLocation=".\Release/"\r
+                               ObjectFile=".\Release/"\r
+                               ProgramDataBaseFileName=".\Release/"\r
+                               WarningLevel="3"\r
+                               SuppressStartupBanner="TRUE"\r
+                               CompileAs="0"/>\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"/>\r
+                       <Tool\r
+                               Name="VCLibrarianTool"\r
+                               OutputFile=".\Release\libmatroska.lib"\r
+                               SuppressStartupBanner="TRUE"/>\r
+                       <Tool\r
+                               Name="VCMIDLTool"/>\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"/>\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               PreprocessorDefinitions="NDEBUG"\r
+                               Culture="2057"/>\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"/>\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Debug|Win32"\r
+                       OutputDirectory=".\Debug"\r
+                       IntermediateDirectory=".\Debug"\r
+                       ConfigurationType="4"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="FALSE"\r
+                       CharacterSet="2">\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               AdditionalIncludeDirectories="../../../../../libebml;../../../.."\r
+                               PreprocessorDefinitions="WIN32,_DEBUG,_LIB"\r
+                               BasicRuntimeChecks="3"\r
+                               RuntimeLibrary="1"\r
+                               UsePrecompiledHeader="2"\r
+                               PrecompiledHeaderFile=".\Debug/libmatroska.pch"\r
+                               AssemblerListingLocation=".\Debug/"\r
+                               ObjectFile=".\Debug/"\r
+                               ProgramDataBaseFileName=".\Debug/"\r
+                               WarningLevel="3"\r
+                               SuppressStartupBanner="TRUE"\r
+                               DebugInformationFormat="4"\r
+                               CompileAs="0"/>\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"/>\r
+                       <Tool\r
+                               Name="VCLibrarianTool"\r
+                               OutputFile=".\Debug\libmatroska.lib"\r
+                               SuppressStartupBanner="TRUE"/>\r
+                       <Tool\r
+                               Name="VCMIDLTool"/>\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"/>\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               PreprocessorDefinitions="_DEBUG"\r
+                               Culture="2057"/>\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"/>\r
+               </Configuration>\r
+       </Configurations>\r
+       <Files>\r
+               <Filter\r
+                       Name="Source Files"\r
+                       Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\FileKax.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxAttached.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxAttachments.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxBlock.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxBlockData.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxChapters.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxCluster.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxClusterData.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxContentEncoding.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxContexts.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxCues.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxCuesData.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxInfo.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxInfoData.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxSeekHead.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxSegment.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxTag.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxTagMulti.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxTags.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxTrackAudio.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxTrackEntryData.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxTrackVideo.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxTracks.cpp">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\src\KaxVersion.cpp">\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="Header Files"\r
+                       Filter="h;hpp;hxx;hm;inl">\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\FileKax.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxAttached.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxAttachments.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxBlock.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxBlockData.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxChapters.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxCluster.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxClusterData.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxConfig.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxContentEncoding.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxContexts.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxCues.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxCuesData.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxInfo.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxInfoData.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxSeekHead.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxSegment.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxTag.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxTagMulti.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxTags.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxTrackAudio.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxTrackEntryData.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxTrackVideo.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxTracks.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxTypes.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\KaxVersion.h">\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\..\..\matroska\StdInclude.h">\r
+                       </File>\r
+               </Filter>\r
+       </Files>\r
+       <Globals>\r
+       </Globals>\r
+</VisualStudioProject>\r
diff --git a/make/vc7/test/test0.vcproj b/make/vc7/test/test0.vcproj
new file mode 100644 (file)
index 0000000..a13bc22
--- /dev/null
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding = "Windows-1252"?>\r
+<VisualStudioProject\r
+       ProjectType="Visual C++"\r
+       Version="7.00"\r
+       Name="test0"\r
+       SccProjectName=""\r
+       SccLocalPath="">\r
+       <Platforms>\r
+               <Platform\r
+                       Name="Win32"/>\r
+       </Platforms>\r
+       <Configurations>\r
+               <Configuration\r
+                       Name="Debug|Win32"\r
+                       OutputDirectory=".\Debug"\r
+                       IntermediateDirectory=".\Debug"\r
+                       ConfigurationType="1"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="FALSE"\r
+                       CharacterSet="2">\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               AdditionalIncludeDirectories="../../../src,../../../../libebml/src"\r
+                               PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE"\r
+                               BasicRuntimeChecks="3"\r
+                               RuntimeLibrary="1"\r
+                               UsePrecompiledHeader="2"\r
+                               PrecompiledHeaderFile=".\Debug/test0.pch"\r
+                               AssemblerListingLocation=".\Debug/"\r
+                               ObjectFile=".\Debug/"\r
+                               ProgramDataBaseFileName=".\Debug/"\r
+                               WarningLevel="3"\r
+                               SuppressStartupBanner="TRUE"\r
+                               DebugInformationFormat="4"\r
+                               CompileAs="0"/>\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"/>\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalOptions="/MACHINE:I386"\r
+                               AdditionalDependencies="odbc32.lib odbccp32.lib"\r
+                               OutputFile=".\Debug/test0.exe"\r
+                               LinkIncremental="2"\r
+                               SuppressStartupBanner="TRUE"\r
+                               GenerateDebugInformation="TRUE"\r
+                               ProgramDatabaseFile=".\Debug/test0.pdb"\r
+                               SubSystem="1"/>\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                               TypeLibraryName=".\Debug/test0.tlb"/>\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"/>\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               PreprocessorDefinitions="_DEBUG"\r
+                               Culture="1036"/>\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"/>\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Release|Win32"\r
+                       OutputDirectory=".\Release"\r
+                       IntermediateDirectory=".\Release"\r
+                       ConfigurationType="1"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="FALSE"\r
+                       CharacterSet="2">\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories="../../../src,../../../../libebml/src"\r
+                               PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE"\r
+                               StringPooling="TRUE"\r
+                               RuntimeLibrary="0"\r
+                               EnableFunctionLevelLinking="TRUE"\r
+                               UsePrecompiledHeader="2"\r
+                               PrecompiledHeaderFile=".\Release/test0.pch"\r
+                               AssemblerListingLocation=".\Release/"\r
+                               ObjectFile=".\Release/"\r
+                               ProgramDataBaseFileName=".\Release/"\r
+                               WarningLevel="3"\r
+                               SuppressStartupBanner="TRUE"\r
+                               CompileAs="0"/>\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"/>\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalOptions="/MACHINE:I386"\r
+                               AdditionalDependencies="odbc32.lib odbccp32.lib"\r
+                               OutputFile=".\Release/test0.exe"\r
+                               LinkIncremental="1"\r
+                               SuppressStartupBanner="TRUE"\r
+                               ProgramDatabaseFile=".\Release/test0.pdb"\r
+                               SubSystem="1"/>\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                               TypeLibraryName=".\Release/test0.tlb"/>\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"/>\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               PreprocessorDefinitions="NDEBUG"\r
+                               Culture="1036"/>\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"/>\r
+               </Configuration>\r
+       </Configurations>\r
+       <Files>\r
+               <Filter\r
+                       Name="Source Files"\r
+                       Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">\r
+                       <File\r
+                               RelativePath="..\..\..\test\ebml\test0.cpp">\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="Header Files"\r
+                       Filter="h;hpp;hxx;hm;inl">\r
+               </Filter>\r
+               <Filter\r
+                       Name="Resource Files"\r
+                       Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">\r
+               </Filter>\r
+       </Files>\r
+       <Globals>\r
+               <Global\r
+                       Name="DevPartner_IsInstrumented"\r
+                       Value="0"/>\r
+       </Globals>\r
+</VisualStudioProject>\r
diff --git a/make/vc7/test/test00.vcproj b/make/vc7/test/test00.vcproj
new file mode 100644 (file)
index 0000000..a15afd6
--- /dev/null
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding = "Windows-1252"?>\r
+<VisualStudioProject\r
+       ProjectType="Visual C++"\r
+       Version="7.00"\r
+       Name="test00"\r
+       SccProjectName=""\r
+       SccLocalPath="">\r
+       <Platforms>\r
+               <Platform\r
+                       Name="Win32"/>\r
+       </Platforms>\r
+       <Configurations>\r
+               <Configuration\r
+                       Name="Debug|Win32"\r
+                       OutputDirectory=".\Debug"\r
+                       IntermediateDirectory=".\Debug"\r
+                       ConfigurationType="1"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="FALSE"\r
+                       CharacterSet="2">\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               AdditionalIncludeDirectories="../../../src,../../../../libebml/src"\r
+                               PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE"\r
+                               BasicRuntimeChecks="3"\r
+                               RuntimeLibrary="1"\r
+                               UsePrecompiledHeader="2"\r
+                               PrecompiledHeaderFile=".\Debug/test00.pch"\r
+                               AssemblerListingLocation=".\Debug/"\r
+                               ObjectFile=".\Debug/"\r
+                               ProgramDataBaseFileName=".\Debug/"\r
+                               WarningLevel="3"\r
+                               SuppressStartupBanner="TRUE"\r
+                               DebugInformationFormat="4"\r
+                               CompileAs="0"/>\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"/>\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalOptions="/MACHINE:I386"\r
+                               AdditionalDependencies="odbc32.lib odbccp32.lib"\r
+                               OutputFile=".\Debug/test00.exe"\r
+                               LinkIncremental="2"\r
+                               SuppressStartupBanner="TRUE"\r
+                               GenerateDebugInformation="TRUE"\r
+                               ProgramDatabaseFile=".\Debug/test00.pdb"\r
+                               SubSystem="1"/>\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                               TypeLibraryName=".\Debug/test00.tlb"/>\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"/>\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               PreprocessorDefinitions="_DEBUG"\r
+                               Culture="1036"/>\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"/>\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Release|Win32"\r
+                       OutputDirectory=".\Release"\r
+                       IntermediateDirectory=".\Release"\r
+                       ConfigurationType="1"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="FALSE"\r
+                       CharacterSet="2">\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories="../../../src,../../../../libebml/src"\r
+                               PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE"\r
+                               StringPooling="TRUE"\r
+                               RuntimeLibrary="0"\r
+                               EnableFunctionLevelLinking="TRUE"\r
+                               UsePrecompiledHeader="2"\r
+                               PrecompiledHeaderFile=".\Release/test00.pch"\r
+                               AssemblerListingLocation=".\Release/"\r
+                               ObjectFile=".\Release/"\r
+                               ProgramDataBaseFileName=".\Release/"\r
+                               WarningLevel="3"\r
+                               SuppressStartupBanner="TRUE"\r
+                               CompileAs="0"/>\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"/>\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalOptions="/MACHINE:I386"\r
+                               AdditionalDependencies="odbc32.lib odbccp32.lib"\r
+                               OutputFile=".\Release/test00.exe"\r
+                               LinkIncremental="1"\r
+                               SuppressStartupBanner="TRUE"\r
+                               ProgramDatabaseFile=".\Release/test00.pdb"\r
+                               SubSystem="1"/>\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                               TypeLibraryName=".\Release/test00.tlb"/>\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"/>\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               PreprocessorDefinitions="NDEBUG"\r
+                               Culture="1036"/>\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"/>\r
+               </Configuration>\r
+       </Configurations>\r
+       <Files>\r
+               <Filter\r
+                       Name="Source Files"\r
+                       Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">\r
+                       <File\r
+                               RelativePath="..\..\..\test\ebml\test00.cpp">\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="Header Files"\r
+                       Filter="h;hpp;hxx;hm;inl">\r
+               </Filter>\r
+               <Filter\r
+                       Name="Resource Files"\r
+                       Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">\r
+               </Filter>\r
+       </Files>\r
+       <Globals>\r
+               <Global\r
+                       Name="DevPartner_IsInstrumented"\r
+                       Value="0"/>\r
+       </Globals>\r
+</VisualStudioProject>\r
diff --git a/make/vc7/test/test6.vcproj b/make/vc7/test/test6.vcproj
new file mode 100644 (file)
index 0000000..bd8d2ca
--- /dev/null
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding = "Windows-1252"?>\r
+<VisualStudioProject\r
+       ProjectType="Visual C++"\r
+       Version="7.00"\r
+       Name="test6"\r
+       SccProjectName=""\r
+       SccLocalPath="">\r
+       <Platforms>\r
+               <Platform\r
+                       Name="Win32"/>\r
+       </Platforms>\r
+       <Configurations>\r
+               <Configuration\r
+                       Name="Debug|Win32"\r
+                       OutputDirectory=".\Debug"\r
+                       IntermediateDirectory=".\Debug"\r
+                       ConfigurationType="1"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="FALSE"\r
+                       CharacterSet="2">\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               AdditionalIncludeDirectories="../../..,../../../../libebml"\r
+                               PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE"\r
+                               BasicRuntimeChecks="3"\r
+                               RuntimeLibrary="1"\r
+                               UsePrecompiledHeader="2"\r
+                               PrecompiledHeaderFile=".\Debug/test6.pch"\r
+                               AssemblerListingLocation=".\Debug/"\r
+                               ObjectFile=".\Debug/"\r
+                               ProgramDataBaseFileName=".\Debug/"\r
+                               WarningLevel="3"\r
+                               SuppressStartupBanner="TRUE"\r
+                               DebugInformationFormat="4"\r
+                               CompileAs="0"/>\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"/>\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalOptions="/MACHINE:I386"\r
+                               AdditionalDependencies="odbc32.lib odbccp32.lib"\r
+                               OutputFile=".\Debug/test6.exe"\r
+                               LinkIncremental="2"\r
+                               SuppressStartupBanner="TRUE"\r
+                               GenerateDebugInformation="TRUE"\r
+                               ProgramDatabaseFile=".\Debug/test6.pdb"\r
+                               SubSystem="1"/>\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                               TypeLibraryName=".\Debug/test6.tlb"/>\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"/>\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               PreprocessorDefinitions="_DEBUG"\r
+                               Culture="1036"/>\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"/>\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Release|Win32"\r
+                       OutputDirectory=".\Release"\r
+                       IntermediateDirectory=".\Release"\r
+                       ConfigurationType="1"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="FALSE"\r
+                       CharacterSet="2">\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories="../../..,../../../../libebml"\r
+                               PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE"\r
+                               StringPooling="TRUE"\r
+                               RuntimeLibrary="0"\r
+                               EnableFunctionLevelLinking="TRUE"\r
+                               UsePrecompiledHeader="2"\r
+                               PrecompiledHeaderFile=".\Release/test6.pch"\r
+                               AssemblerListingLocation=".\Release/"\r
+                               ObjectFile=".\Release/"\r
+                               ProgramDataBaseFileName=".\Release/"\r
+                               WarningLevel="3"\r
+                               SuppressStartupBanner="TRUE"\r
+                               CompileAs="0"/>\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"/>\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalOptions="/MACHINE:I386"\r
+                               AdditionalDependencies="odbc32.lib odbccp32.lib"\r
+                               OutputFile=".\Release/test6.exe"\r
+                               LinkIncremental="1"\r
+                               SuppressStartupBanner="TRUE"\r
+                               ProgramDatabaseFile=".\Release/test6.pdb"\r
+                               SubSystem="1"/>\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                               TypeLibraryName=".\Release/test6.tlb"/>\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"/>\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               PreprocessorDefinitions="NDEBUG"\r
+                               Culture="1036"/>\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"/>\r
+               </Configuration>\r
+       </Configurations>\r
+       <Files>\r
+               <Filter\r
+                       Name="Source Files"\r
+                       Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">\r
+                       <File\r
+                               RelativePath="..\..\..\test\mux\test6.cpp">\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="Header Files"\r
+                       Filter="h;hpp;hxx;hm;inl">\r
+               </Filter>\r
+               <Filter\r
+                       Name="Resource Files"\r
+                       Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">\r
+               </Filter>\r
+       </Files>\r
+       <Globals>\r
+       </Globals>\r
+</VisualStudioProject>\r
diff --git a/make/vc7/test/test8.vcproj b/make/vc7/test/test8.vcproj
new file mode 100644 (file)
index 0000000..48cfdbf
--- /dev/null
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding = "Windows-1252"?>\r
+<VisualStudioProject\r
+       ProjectType="Visual C++"\r
+       Version="7.00"\r
+       Name="test8"\r
+       SccProjectName=""\r
+       SccLocalPath="">\r
+       <Platforms>\r
+               <Platform\r
+                       Name="Win32"/>\r
+       </Platforms>\r
+       <Configurations>\r
+               <Configuration\r
+                       Name="Release|Win32"\r
+                       OutputDirectory=".\Release"\r
+                       IntermediateDirectory=".\Release"\r
+                       ConfigurationType="1"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="FALSE"\r
+                       CharacterSet="2">\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories="../../..,../../../../libebml"\r
+                               PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE"\r
+                               StringPooling="TRUE"\r
+                               RuntimeLibrary="0"\r
+                               EnableFunctionLevelLinking="TRUE"\r
+                               UsePrecompiledHeader="2"\r
+                               PrecompiledHeaderFile=".\Release/test8.pch"\r
+                               AssemblerListingLocation=".\Release/"\r
+                               ObjectFile=".\Release/"\r
+                               ProgramDataBaseFileName=".\Release/"\r
+                               WarningLevel="3"\r
+                               SuppressStartupBanner="TRUE"\r
+                               CompileAs="0"/>\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"/>\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalOptions="/MACHINE:I386"\r
+                               AdditionalDependencies="odbc32.lib odbccp32.lib"\r
+                               OutputFile=".\Release/test8.exe"\r
+                               LinkIncremental="1"\r
+                               SuppressStartupBanner="TRUE"\r
+                               ProgramDatabaseFile=".\Release/test8.pdb"\r
+                               SubSystem="1"/>\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                               TypeLibraryName=".\Release/test8.tlb"/>\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"/>\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               PreprocessorDefinitions="NDEBUG"\r
+                               Culture="1036"/>\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"/>\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Debug|Win32"\r
+                       OutputDirectory=".\Debug"\r
+                       IntermediateDirectory=".\Debug"\r
+                       ConfigurationType="1"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="FALSE"\r
+                       CharacterSet="2">\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               AdditionalIncludeDirectories="../../..,../../../../libebml"\r
+                               PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE"\r
+                               BasicRuntimeChecks="3"\r
+                               RuntimeLibrary="1"\r
+                               UsePrecompiledHeader="2"\r
+                               PrecompiledHeaderFile=".\Debug/test8.pch"\r
+                               AssemblerListingLocation=".\Debug/"\r
+                               ObjectFile=".\Debug/"\r
+                               ProgramDataBaseFileName=".\Debug/"\r
+                               WarningLevel="3"\r
+                               SuppressStartupBanner="TRUE"\r
+                               DebugInformationFormat="4"\r
+                               CompileAs="0"/>\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"/>\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalOptions="/MACHINE:I386"\r
+                               AdditionalDependencies="odbc32.lib odbccp32.lib"\r
+                               OutputFile=".\Debug/test8.exe"\r
+                               LinkIncremental="2"\r
+                               SuppressStartupBanner="TRUE"\r
+                               GenerateDebugInformation="TRUE"\r
+                               ProgramDatabaseFile=".\Debug/test8.pdb"\r
+                               SubSystem="1"/>\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                               TypeLibraryName=".\Debug/test8.tlb"/>\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"/>\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               PreprocessorDefinitions="_DEBUG"\r
+                               Culture="1036"/>\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"/>\r
+               </Configuration>\r
+       </Configurations>\r
+       <Files>\r
+               <Filter\r
+                       Name="Source Files"\r
+                       Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">\r
+                       <File\r
+                               RelativePath="..\..\..\test\mux\test8.cpp">\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="Header Files"\r
+                       Filter="h;hpp;hxx;hm;inl">\r
+               </Filter>\r
+               <Filter\r
+                       Name="Resource Files"\r
+                       Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">\r
+               </Filter>\r
+       </Files>\r
+       <Globals>\r
+       </Globals>\r
+</VisualStudioProject>\r
diff --git a/make/vc7/test/test9.vcproj b/make/vc7/test/test9.vcproj
new file mode 100644 (file)
index 0000000..8c99bff
--- /dev/null
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding = "Windows-1252"?>\r
+<VisualStudioProject\r
+       ProjectType="Visual C++"\r
+       Version="7.00"\r
+       Name="test9"\r
+       ProjectGUID="{F294A3C5-D355-49E7-A8B8-B9692345A5E0}"\r
+       SccProjectName=""\r
+       SccLocalPath="">\r
+       <Platforms>\r
+               <Platform\r
+                       Name="Win32"/>\r
+       </Platforms>\r
+       <Configurations>\r
+               <Configuration\r
+                       Name="Release|Win32"\r
+                       OutputDirectory=".\Release"\r
+                       IntermediateDirectory=".\Release"\r
+                       ConfigurationType="1"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="FALSE"\r
+                       CharacterSet="2">\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories="../../..,../../../../libebml"\r
+                               PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE"\r
+                               StringPooling="TRUE"\r
+                               RuntimeLibrary="0"\r
+                               EnableFunctionLevelLinking="TRUE"\r
+                               UsePrecompiledHeader="2"\r
+                               PrecompiledHeaderFile=".\Release/test9.pch"\r
+                               AssemblerListingLocation=".\Release/"\r
+                               ObjectFile=".\Release/"\r
+                               ProgramDataBaseFileName=".\Release/"\r
+                               WarningLevel="3"\r
+                               SuppressStartupBanner="TRUE"\r
+                               CompileAs="0"/>\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"/>\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalOptions="/MACHINE:I386"\r
+                               AdditionalDependencies="odbc32.lib odbccp32.lib"\r
+                               OutputFile=".\Release/test9.exe"\r
+                               LinkIncremental="1"\r
+                               SuppressStartupBanner="TRUE"\r
+                               ProgramDatabaseFile=".\Release/test9.pdb"\r
+                               SubSystem="1"/>\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                               TypeLibraryName=".\Release/test9.tlb"/>\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"/>\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               PreprocessorDefinitions="NDEBUG"\r
+                               Culture="1036"/>\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"/>\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Debug|Win32"\r
+                       OutputDirectory=".\Debug"\r
+                       IntermediateDirectory=".\Debug"\r
+                       ConfigurationType="1"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="FALSE"\r
+                       CharacterSet="2">\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               AdditionalIncludeDirectories="../../..,../../../../libebml"\r
+                               PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE"\r
+                               BasicRuntimeChecks="3"\r
+                               RuntimeLibrary="1"\r
+                               UsePrecompiledHeader="2"\r
+                               PrecompiledHeaderFile=".\Debug/test9.pch"\r
+                               AssemblerListingLocation=".\Debug/"\r
+                               ObjectFile=".\Debug/"\r
+                               ProgramDataBaseFileName=".\Debug/"\r
+                               WarningLevel="3"\r
+                               SuppressStartupBanner="TRUE"\r
+                               DebugInformationFormat="4"\r
+                               CompileAs="0"/>\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"/>\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalOptions="/MACHINE:I386"\r
+                               AdditionalDependencies="odbc32.lib odbccp32.lib"\r
+                               OutputFile=".\Debug/test9.exe"\r
+                               LinkIncremental="2"\r
+                               SuppressStartupBanner="TRUE"\r
+                               GenerateDebugInformation="TRUE"\r
+                               ProgramDatabaseFile=".\Debug/test9.pdb"\r
+                               SubSystem="1"/>\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                               TypeLibraryName=".\Debug/test9.tlb"/>\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"/>\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               PreprocessorDefinitions="_DEBUG"\r
+                               Culture="1036"/>\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"/>\r
+               </Configuration>\r
+       </Configurations>\r
+       <Files>\r
+               <Filter\r
+                       Name="Source Files"\r
+                       Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">\r
+                       <File\r
+                               RelativePath="..\..\..\test\tags\test9.cpp">\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="Header Files"\r
+                       Filter="h;hpp;hxx;hm;inl">\r
+               </Filter>\r
+               <Filter\r
+                       Name="Resource Files"\r
+                       Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">\r
+               </Filter>\r
+       </Files>\r
+       <Globals>\r
+       </Globals>\r
+</VisualStudioProject>\r
diff --git a/make/vc7/vc7.sln b/make/vc7/vc7.sln
new file mode 100644 (file)
index 0000000..30966d8
--- /dev/null
@@ -0,0 +1,73 @@
+Microsoft Visual Studio Solution File, Format Version 7.00\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libebml", "..\..\..\libebml\make\vc7\lib\libebml.vcproj", "{C6902997-CF7C-42B5-AD42-5B7C11F4CFE6}"\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libebmldll", "..\..\..\libebml\make\vc7\dll\libebmldll.v71.vcproj", "{83136D19-2749-4640-AC38-33E0B1F0DCC2}"\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmatroska", "lib\static\libmatroska.vcproj", "{061EEA22-F7D5-4477-AB15-0DCE85EA038A}"\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test0", "test\test0.vcproj", "{8380F3AF-9E4A-4D5F-900F-991978CE44E1}"\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test00", "test\test00.vcproj", "{78DA23EF-794A-4311-9B99-8C71D44CC749}"\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test6", "test\test6.vcproj", "{4770FB10-8B2F-4E29-BA0B-517031ABC0F5}"\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test8", "test\test8.vcproj", "{EAE085B0-7FD7-48DA-ABFE-A706DACC3794}"\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test9", "test\test9.vcproj", "{F294A3C5-D355-49E7-A8B8-B9692345A5E0}"\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmatroskadll", "lib\dll\libmatroskadll.v71.vcproj", "{B227AC03-C69E-46B1-B91E-A77BE4C6F83A}"\r
+EndProject\r
+Global\r
+       GlobalSection(DPCodeReviewSolutionGUID) = preSolution\r
+               DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000}\r
+       EndGlobalSection\r
+       GlobalSection(DevPartner Solution Properties) = postSolution\r
+       EndGlobalSection\r
+       GlobalSection(SolutionConfiguration) = preSolution\r
+               ConfigName.0 = Debug\r
+               ConfigName.1 = Release\r
+       EndGlobalSection\r
+       EndGlobalSection\r
+       GlobalSection(ProjectConfiguration) = postSolution\r
+               {C6902997-CF7C-42B5-AD42-5B7C11F4CFE6}.Debug.ActiveCfg = Debug|Win32\r
+               {C6902997-CF7C-42B5-AD42-5B7C11F4CFE6}.Debug.Build.0 = Debug|Win32\r
+               {C6902997-CF7C-42B5-AD42-5B7C11F4CFE6}.Release.ActiveCfg = Release|Win32\r
+               {C6902997-CF7C-42B5-AD42-5B7C11F4CFE6}.Release.Build.0 = Release|Win32\r
+               {061EEA22-F7D5-4477-AB15-0DCE85EA038A}.Debug.ActiveCfg = Debug|Win32\r
+               {061EEA22-F7D5-4477-AB15-0DCE85EA038A}.Debug.Build.0 = Debug|Win32\r
+               {061EEA22-F7D5-4477-AB15-0DCE85EA038A}.Release.ActiveCfg = Release|Win32\r
+               {061EEA22-F7D5-4477-AB15-0DCE85EA038A}.Release.Build.0 = Release|Win32\r
+               {8380F3AF-9E4A-4D5F-900F-991978CE44E1}.Debug.ActiveCfg = Debug|Win32\r
+               {8380F3AF-9E4A-4D5F-900F-991978CE44E1}.Release.ActiveCfg = Release|Win32\r
+               {78DA23EF-794A-4311-9B99-8C71D44CC749}.Debug.ActiveCfg = Debug|Win32\r
+               {78DA23EF-794A-4311-9B99-8C71D44CC749}.Release.ActiveCfg = Release|Win32\r
+               {4770FB10-8B2F-4E29-BA0B-517031ABC0F5}.Debug.ActiveCfg = Debug|Win32\r
+               {4770FB10-8B2F-4E29-BA0B-517031ABC0F5}.Debug.Build.0 = Debug|Win32\r
+               {4770FB10-8B2F-4E29-BA0B-517031ABC0F5}.Release.ActiveCfg = Release|Win32\r
+               {4770FB10-8B2F-4E29-BA0B-517031ABC0F5}.Release.Build.0 = Release|Win32\r
+               {EAE085B0-7FD7-48DA-ABFE-A706DACC3794}.Debug.ActiveCfg = Debug|Win32\r
+               {EAE085B0-7FD7-48DA-ABFE-A706DACC3794}.Debug.Build.0 = Debug|Win32\r
+               {EAE085B0-7FD7-48DA-ABFE-A706DACC3794}.Release.ActiveCfg = Release|Win32\r
+               {EAE085B0-7FD7-48DA-ABFE-A706DACC3794}.Release.Build.0 = Release|Win32\r
+               {F294A3C5-D355-49E7-A8B8-B9692345A5E0}.Debug.ActiveCfg = Debug|Win32\r
+               {F294A3C5-D355-49E7-A8B8-B9692345A5E0}.Debug.Build.0 = Debug|Win32\r
+               {F294A3C5-D355-49E7-A8B8-B9692345A5E0}.Release.ActiveCfg = Release|Win32\r
+               {F294A3C5-D355-49E7-A8B8-B9692345A5E0}.Release.Build.0 = Release|Win32\r
+               {B227AC03-C69E-46B1-B91E-A77BE4C6F83A}.Debug.ActiveCfg = Debug|Win32\r
+               {B227AC03-C69E-46B1-B91E-A77BE4C6F83A}.Debug.Build.0 = Debug|Win32\r
+               {B227AC03-C69E-46B1-B91E-A77BE4C6F83A}.Release.ActiveCfg = Release|Win32\r
+               {B227AC03-C69E-46B1-B91E-A77BE4C6F83A}.Release.Build.0 = Release|Win32\r
+               {83136D19-2749-4640-AC38-33E0B1F0DCC2}.Debug.ActiveCfg = Debug|Win32\r
+               {83136D19-2749-4640-AC38-33E0B1F0DCC2}.Debug.Build.0 = Debug|Win32\r
+               {83136D19-2749-4640-AC38-33E0B1F0DCC2}.Release.ActiveCfg = Release|Win32\r
+               {83136D19-2749-4640-AC38-33E0B1F0DCC2}.Release.Build.0 = Release|Win32\r
+       EndGlobalSection\r
+       GlobalSection(ExtensibilityGlobals) = postSolution\r
+       EndGlobalSection\r
+       GlobalSection(ExtensibilityAddIns) = postSolution\r
+       EndGlobalSection\r
+       GlobalSection(DevPartner) = postSolution\r
+       EndGlobalSection\r
+       GlobalSection(DevPartner) = postSolution\r
+       EndGlobalSection\r
+EndGlobal\r
diff --git a/matroska/FileKax.h b/matroska/FileKax.h
new file mode 100644 (file)
index 0000000..8160a89
--- /dev/null
@@ -0,0 +1,152 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: FileKax.h,v 1.5 2004/04/14 23:26:17 robux4 Exp $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#ifndef LIBMATROSKA_FILE_H
+#define LIBMATROSKA_FILE_H
+
+//#include <vector>
+
+#include "matroska/KaxTypes.h"
+#include "ebml/IOCallback.h"
+//#include "MainHeader.h"
+//#include "TrackType.h"
+//#include "StreamInfo.h"
+//#include "Cluster.h"
+//#include "CodecHeader.h"
+
+using namespace LIBEBML_NAMESPACE;
+
+START_LIBMATROSKA_NAMESPACE
+
+//class Track;
+//class Frame;
+
+/*!
+    \class MATROSKA_DLL_API FileMatroska
+    \brief General container of all the parameters and data of an Matroska file
+    \todo Handle the filename and next filename
+    \todo Handle the IOCallback selection/type
+*/
+class MATROSKA_DLL_API FileMatroska {
+    public:
+               FileMatroska(IOCallback & output);
+               ~FileMatroska();
+#ifdef OLD
+       uint32 RenderHead(const std::string & aEncoderApp);
+       uint32 ReadHead();
+       uint32 ReadTracks();
+       uint32 ReadCodec();
+       void Close(const uint32 aTimeLength);
+
+       inline void type_SetInfo(const std::string & aStr) {myMainHeader.type_SetInfo(aStr);}
+       inline void type_SetAds(const std::string & aStr) {myMainHeader.type_SetAds(aStr);}
+       inline void type_SetSize(const std::string & aStr) {myMainHeader.type_SetSize(aStr);}
+       inline void type_SetSize(const uint64 aSize) {myMainHeader.type_SetSize(aSize);}
+
+       inline uint8 GetTrackNumber() const { return myTracks.size(); }
+
+       void track_SetName(Track * aTrack, const std::string & aName);
+       void track_SetLaced(Track * aTrack, const bool bLaced = true);
+
+       Track * CreateTrack(const track_type aType);
+       inline Track * GetTrack(const uint8 aTrackNb) const
+       {
+           if (aTrackNb > myTracks.size())
+               return NULL;
+           else
+               return myTracks[aTrackNb-1];
+       }
+
+       void Track_GetInfo(const Track * aTrack, TrackInfo & aTrackInfo) const;
+       
+       void Track_SetInfo_Audio(Track * aTrack, const TrackInfoAudio & aTrackInfo);
+       void Track_GetInfo_Audio(const Track * aTrack, TrackInfoAudio & aTrackInfo) const;
+
+       void Track_SetInfo_Video(Track * aTrack, const TrackInfoVideo & aTrackInfo);
+       void Track_GetInfo_Video(const Track * aTrack, TrackInfoVideo & aTrackInfo) const;
+
+       void SelectReadingTrack(Track * aTrack, bool select = true);
+
+       /*!
+           \return wether the frame has been added or not
+       */
+       bool AddFrame(Track * aTrack, const uint32 aTimecode, const binary *aFrame, const uint32 aFrameSize,
+                    const bool aKeyFrame = true, const bool aBFrame = false);
+
+       /*!
+           \return wether the frame has been read or not
+       */
+       bool ReadFrame(Track * & aTrack, uint32 & aTimecode, const binary * & aFrame, uint32 & aFrameSize,
+                    bool & aKeyFrame, bool & aBFrame);
+
+       /*
+           Render the pending cluster to file
+       */
+       void Flush();
+
+       void SetMaxClusterSize(const uint32 value);
+       void SetMinClusterSize(const uint32 value) {myMinClusterSize = value;}
+
+    protected:
+       MainHeader myMainHeader;
+
+       std::vector<Track *> myTracks;
+       std::vector<uint8> mySelectedTracks;
+
+//     Track *findTrack(Track * aTrack) const;
+
+       Cluster  myCurrWriteCluster; /// \todo merge with the write one ?
+       uint32   myReadBlockNumber;
+       Cluster  myCurrReadCluster;
+       binary * myCurrReadBlock;      ///< The buffer containing the current read block
+       uint32   myCurrReadBlockSize;  ///< The size of the buffer containing the current read block
+       uint8    myCurrReadBlockTrack; ///< The track number of the current track to read
+
+       uint32 myMaxClusterSize;
+       uint32 myMinClusterSize;
+
+       StreamInfo myStreamInfo;
+
+       CodecHeader myCodecHeader;
+
+       inline bool IsMyTrack(const Track * aTrack) const;
+       inline bool IsReadingTrack(const uint8 aTrackNum) const;
+#endif // OLD
+       IOCallback & myFile;
+
+};
+
+END_LIBMATROSKA_NAMESPACE
+
+#endif // FILE_KAX_HPP
diff --git a/matroska/KaxAttached.h b/matroska/KaxAttached.h
new file mode 100644 (file)
index 0000000..26c40f8
--- /dev/null
@@ -0,0 +1,142 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class MATROSKA_DLL_API description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxAttached.h,v 1.8 2004/04/14 23:26:17 robux4 Exp $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#ifndef LIBMATROSKA_ATTACHED_H
+#define LIBMATROSKA_ATTACHED_H
+
+#include "matroska/KaxTypes.h"
+#include "ebml/EbmlMaster.h"
+#include "ebml/EbmlUnicodeString.h"
+#include "ebml/EbmlString.h"
+#include "ebml/EbmlBinary.h"
+#include "ebml/EbmlUInteger.h"
+
+using namespace LIBEBML_NAMESPACE;
+
+START_LIBMATROSKA_NAMESPACE
+
+class MATROSKA_DLL_API KaxAttached : public EbmlMaster {
+       public:
+               KaxAttached();
+               KaxAttached(const KaxAttached & ElementToClone) : EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxAttached);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               bool IsYourId(const EbmlId & TestId) const;
+               EbmlElement * Clone() const {return new KaxAttached(*this);}
+};
+
+class MATROSKA_DLL_API KaxFileDescription : public EbmlUnicodeString {
+       public:
+               KaxFileDescription() {}
+               KaxFileDescription(const KaxFileDescription & ElementToClone) : EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxFileDescription);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               bool IsYourId(const EbmlId & TestId) const;
+               EbmlElement * Clone() const {return new KaxFileDescription(*this);}
+};
+
+class MATROSKA_DLL_API KaxFileName : public EbmlUnicodeString {
+       public:
+               KaxFileName() {}
+               KaxFileName(const KaxFileName & ElementToClone) : EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxFileName);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               bool IsYourId(const EbmlId & TestId) const;
+               EbmlElement * Clone() const {return new KaxFileName(*this);}
+};
+
+class MATROSKA_DLL_API KaxMimeType : public EbmlString {
+       public:
+               KaxMimeType() {}
+               KaxMimeType(const KaxMimeType & ElementToClone) : EbmlString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxMimeType);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               bool IsYourId(const EbmlId & TestId) const;
+               EbmlElement * Clone() const {return new KaxMimeType(*this);}
+};
+
+class MATROSKA_DLL_API KaxFileData : public EbmlBinary {
+       public:
+               KaxFileData() {}
+               KaxFileData(const KaxFileData & ElementToClone) :EbmlBinary(ElementToClone){}
+               static EbmlElement & Create() {return *(new KaxFileData);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               bool ValidateSize() const {return true;} // we don't mind about what's inside
+               static const EbmlCallbacks ClassInfos;
+
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               bool IsYourId(const EbmlId & TestId) const;
+               EbmlElement * Clone() const {return new KaxFileData(*this);}
+};
+
+class MATROSKA_DLL_API KaxFileReferral : public EbmlBinary {
+       public:
+               KaxFileReferral() {}
+               KaxFileReferral(const KaxFileReferral & ElementToClone) :EbmlBinary(ElementToClone){}
+               static EbmlElement & Create() {return *(new KaxFileReferral);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               bool ValidateSize() const {return true;} // we don't mind about what's inside
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxFileReferral(*this);}
+};
+
+class MATROSKA_DLL_API KaxFileUID : public EbmlUInteger {
+       public:
+               KaxFileUID() {}
+               KaxFileUID(const KaxFileUID & ElementToClone) : EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxFileUID);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               bool IsYourId(const EbmlId & TestId) const;
+               EbmlElement * Clone() const {return new KaxFileUID(*this);}
+};
+
+END_LIBMATROSKA_NAMESPACE
+
+#endif // LIBMATROSKA_ATTACHED_H
diff --git a/matroska/KaxAttachments.h b/matroska/KaxAttachments.h
new file mode 100644 (file)
index 0000000..ead8cb1
--- /dev/null
@@ -0,0 +1,58 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxAttachments.h,v 1.8 2004/04/14 23:26:17 robux4 Exp $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#ifndef LIBMATROSKA_ATTACHEMENTS_H
+#define LIBMATROSKA_ATTACHEMENTS_H
+
+#include "matroska/KaxTypes.h"
+#include "ebml/EbmlMaster.h"
+
+using namespace LIBEBML_NAMESPACE;
+
+START_LIBMATROSKA_NAMESPACE
+
+class MATROSKA_DLL_API KaxAttachments : public EbmlMaster {
+       public:
+               KaxAttachments();
+               KaxAttachments(const KaxAttachments & ElementToClone) : EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxAttachments);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxAttachments(*this);}
+};
+
+END_LIBMATROSKA_NAMESPACE
+
+#endif // LIBMATROSKA_ATTACHEMENTS_H
diff --git a/matroska/KaxBlock.h b/matroska/KaxBlock.h
new file mode 100644 (file)
index 0000000..1ca08e3
--- /dev/null
@@ -0,0 +1,455 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \todo add a PureBlock class to group functionalities between Block and BlockVirtual
+       \version \$Id: KaxBlock.h,v 1.24 2004/04/14 23:26:17 robux4 Exp $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+       \author Julien Coloos    <suiryc @ users.sf.net>
+*/
+#ifndef LIBMATROSKA_BLOCK_H
+#define LIBMATROSKA_BLOCK_H
+
+#include <vector>
+
+#include "matroska/KaxTypes.h"
+#include "ebml/EbmlBinary.h"
+#include "ebml/EbmlMaster.h"
+#include "matroska/KaxTracks.h"
+
+using namespace LIBEBML_NAMESPACE;
+
+START_LIBMATROSKA_NAMESPACE
+
+class KaxCluster;
+class KaxReferenceBlock;
+class KaxInternalBlock;
+class KaxBlockBlob;
+
+class MATROSKA_DLL_API DataBuffer {
+       protected:
+               binary * myBuffer;
+               uint32   mySize;
+               bool     bValidValue;
+               bool     (*myFreeBuffer)(const DataBuffer & aBuffer); // method to free the internal buffer
+
+       public:
+               DataBuffer(binary * aBuffer, uint32 aSize, bool (*aFreeBuffer)(const DataBuffer & aBuffer) = NULL)
+                       :myBuffer(aBuffer)
+                       ,mySize(aSize)
+                       ,bValidValue(true)      
+      ,myFreeBuffer(aFreeBuffer)
+               {}
+               virtual ~DataBuffer() {}
+               virtual binary * Buffer() {return myBuffer;}
+               virtual uint32   & Size() {return mySize;};
+               virtual const binary * Buffer() const {return myBuffer;}
+               virtual const uint32   Size()   const {return mySize;};
+               bool    FreeBuffer(const DataBuffer & aBuffer) {
+                       bool bResult = true;
+                       if (myBuffer != NULL && myFreeBuffer != NULL && bValidValue) {
+                               bResult = myFreeBuffer(aBuffer);
+                               myBuffer = NULL;
+                               bValidValue = false;
+                       }
+                       return bResult;
+               }
+
+               virtual DataBuffer * Clone();
+};
+
+class MATROSKA_DLL_API SimpleDataBuffer : public DataBuffer {
+       public:
+               SimpleDataBuffer(binary * aBuffer, uint32 aSize, uint32 aOffset, bool (*aFreeBuffer)(const DataBuffer & aBuffer) = myFreeBuffer)
+                       :DataBuffer(aBuffer + aOffset, aSize, aFreeBuffer)
+                       ,Offset(aOffset)
+                       ,BaseBuffer(aBuffer)
+               {}
+               virtual ~SimpleDataBuffer() {}
+
+               DataBuffer * Clone() {return new SimpleDataBuffer(*this);}
+
+       protected:
+               uint32 Offset;
+               binary * BaseBuffer;
+
+               static bool myFreeBuffer(const DataBuffer & aBuffer)
+               {
+                       binary *_Buffer = static_cast<const SimpleDataBuffer*>(&aBuffer)->BaseBuffer;
+                       if (_Buffer != NULL)
+                               free(_Buffer);
+                       return true;
+               }
+
+               SimpleDataBuffer(const SimpleDataBuffer & ToClone);
+};
+
+/*!
+       \note the data is copied locally, it can be freed right away
+* /
+class MATROSKA_DLL_API NotSoSimpleDataBuffer : public SimpleDataBuffer {
+       public:
+               NotSoSimpleDataBuffer(binary * aBuffer, uint32 aSize, uint32 aOffset)
+                       :SimpleDataBuffer(new binary[aSize - aOffset], aSize, 0)
+               {
+                       memcpy(BaseBuffer, aBuffer + aOffset, aSize - aOffset);
+               }
+};
+*/
+
+class MATROSKA_DLL_API KaxBlockGroup : public EbmlMaster {
+       public:
+               KaxBlockGroup();
+               KaxBlockGroup(const KaxBlockGroup & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxBlockGroup);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxBlockGroup(*this);}
+
+               ~KaxBlockGroup();
+
+               /*!
+                       \brief Addition of a frame without references
+               */
+               bool AddFrame(const KaxTrackEntry & track, uint64 timecode, DataBuffer & buffer, LacingType lacing = LACING_AUTO);
+               /*!
+                       \brief Addition of a frame with a backward reference (P frame)
+               */
+               bool AddFrame(const KaxTrackEntry & track, uint64 timecode, DataBuffer & buffer, const KaxBlockGroup & PastBlock, LacingType lacing = LACING_AUTO);
+
+               /*!
+                       \brief Addition of a frame with a backward+forward reference (B frame)
+               */
+               bool AddFrame(const KaxTrackEntry & track, uint64 timecode, DataBuffer & buffer, const KaxBlockGroup & PastBlock, const KaxBlockGroup & ForwBlock, LacingType lacing = LACING_AUTO);
+               bool AddFrame(const KaxTrackEntry & track, uint64 timecode, DataBuffer & buffer, const KaxBlockBlob * PastBlock, const KaxBlockBlob * ForwBlock, LacingType lacing = LACING_AUTO);
+
+               void SetParent(KaxCluster & aParentCluster);
+
+               void SetParentTrack(const KaxTrackEntry & aParentTrack) {
+                       ParentTrack = &aParentTrack;
+               }
+
+               /*!
+                       \brief Set the duration of the contained frame(s) (for the total number of frames)
+               */
+               void SetBlockDuration(uint64 TimeLength);
+               bool GetBlockDuration(uint64 &TheTimecode) const;
+
+               /*!
+                       \return the global timecode of this Block (not just the delta to the Cluster)
+               */
+               uint64 GlobalTimecode() const;
+               uint64 GlobalTimecodeScale() const {
+                       assert(ParentTrack != NULL);
+                       return ParentTrack->GlobalTimecodeScale();
+               }
+
+               uint16 TrackNumber() const;
+
+               uint64 ClusterPosition() const;
+               
+               /*!
+                       \return the number of references to other frames
+               */
+               unsigned int ReferenceCount() const;
+               const KaxReferenceBlock & Reference(unsigned int Index) const;
+
+               /*!
+                       \brief release all the frames of all Blocks
+               */
+               void ReleaseFrames();
+
+               operator KaxInternalBlock &();
+
+               const KaxCluster *GetParentCluster() const { return ParentCluster; }
+
+       protected:
+               KaxCluster * ParentCluster;
+               const KaxTrackEntry * ParentTrack;
+};
+
+class KaxInternalBlock : public EbmlBinary {
+       public:
+               KaxInternalBlock( bool bSimple ) :bLocalTimecodeUsed(false), mLacing(LACING_AUTO), mInvisible(false)
+                       ,ParentCluster(NULL), bIsSimple(bSimple), bIsKeyframe(true), bIsDiscardable(false)
+               {}
+               KaxInternalBlock(const KaxInternalBlock & ElementToClone);
+               ~KaxInternalBlock();
+               bool ValidateSize() const;
+
+               uint16 TrackNum() const {return TrackNumber;}
+               /*!
+                       \todo !!!! This method needs to be changes !
+               */
+               uint64 GlobalTimecode() const {return Timecode;}
+
+               /*!
+                       \note override this function to generate the Data/Size on the fly, unlike the usual binary elements
+               */
+               uint64 UpdateSize(bool bSaveDefault = false, bool bForceRender = false);
+               uint64 ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA);
+               
+               /*!
+                       \brief Only read the head of the Block (not internal data)
+                       \note convenient when you are parsing the file quickly
+               */
+               uint64 ReadInternalHead(IOCallback & input);
+               
+               unsigned int NumberFrames() const { return SizeList.size();}
+               DataBuffer & GetBuffer(unsigned int iIndex) {return *myBuffers[iIndex];}
+
+               bool AddFrame(const KaxTrackEntry & track, uint64 timecode, DataBuffer & buffer, LacingType lacing = LACING_AUTO, bool invisible = false);
+
+               /*!
+                       \brief release all the frames of all Blocks
+               */
+               void ReleaseFrames();
+
+               void SetParent(KaxCluster & aParentCluster);
+
+               /*!
+                       \return Returns the lacing type that produces the smallest footprint.
+               */
+               LacingType GetBestLacingType() const;
+
+               /*!
+                       \param FrameNumber 0 for the first frame
+                       \return the position in the stream for a given frame
+                       \note return -1 if the position doesn't exist
+               */
+               int64 GetDataPosition(size_t FrameNumber = 0);
+
+               /*!
+                       \param FrameNumber 0 for the first frame
+                       \return the size of a given frame
+                       \note return -1 if the position doesn't exist
+               */
+               int64 GetFrameSize(size_t FrameNumber = 0);
+               
+               bool IsInvisible() const { return mInvisible; }
+
+               uint64 ClusterPosition() const;
+
+       protected:
+               std::vector<DataBuffer *> myBuffers;
+               std::vector<int32>        SizeList;
+               uint64     Timecode; // temporary timecode of the first frame, non scaled
+               int16      LocalTimecode;
+               bool       bLocalTimecodeUsed;
+               uint16     TrackNumber;
+               LacingType mLacing;
+               bool       mInvisible;
+               uint64     FirstFrameLocation;
+
+               uint32 RenderData(IOCallback & output, bool bForceRender, bool bSaveDefault = false);
+
+               KaxCluster * ParentCluster;
+               bool       bIsSimple;
+               bool       bIsKeyframe;
+               bool       bIsDiscardable;
+};
+
+class MATROSKA_DLL_API KaxBlock : public KaxInternalBlock {
+       public:
+               KaxBlock() :KaxInternalBlock(false) {}
+               static EbmlElement & Create() {return *(new KaxBlock);}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               EbmlElement * Clone() const {return new KaxBlock(*this);}
+};
+
+#if MATROSKA_VERSION >= 2
+class MATROSKA_DLL_API KaxSimpleBlock : public KaxInternalBlock {
+       public:
+               KaxSimpleBlock() :KaxInternalBlock(true) {}
+               static EbmlElement & Create() {return *(new KaxSimpleBlock);}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               EbmlElement * Clone() const {return new KaxSimpleBlock(*this);}
+
+               void SetKeyframe(bool b_keyframe) { bIsKeyframe = b_keyframe; }
+               void SetDiscardable(bool b_discard) { bIsDiscardable = b_discard; }
+
+               bool IsKeyframe() const    { return bIsKeyframe; }
+               bool IsDiscardable() const { return bIsDiscardable; }
+
+               operator KaxInternalBlock &() { return *this; }
+};
+#endif // MATROSKA_VERSION
+
+class MATROSKA_DLL_API KaxBlockBlob {
+public:
+       KaxBlockBlob(BlockBlobType sblock_mode) :ParentCluster(NULL), SimpleBlockMode(sblock_mode) {
+               bUseSimpleBlock = (sblock_mode != BLOCK_BLOB_NO_SIMPLE);
+               Block.group = NULL;
+       }
+
+       ~KaxBlockBlob() {
+#if MATROSKA_VERSION >= 2
+               if (bUseSimpleBlock)
+                       delete Block.simpleblock;
+               else
+#endif // MATROSKA_VERSION
+                       delete Block.group;
+       }
+
+       operator KaxBlockGroup &();
+       operator const KaxBlockGroup &() const;
+#if MATROSKA_VERSION >= 2
+       operator KaxSimpleBlock &();
+#endif
+       operator KaxInternalBlock &();
+       operator const KaxInternalBlock &() const;
+
+       void SetBlockGroup( KaxBlockGroup &BlockRef );
+
+       void SetBlockDuration(uint64 TimeLength);
+
+       void SetParent(KaxCluster & aParentCluster);
+       bool AddFrameAuto(const KaxTrackEntry & track, uint64 timecode, DataBuffer & buffer, LacingType lacing = LACING_AUTO, const KaxBlockBlob * PastBlock = NULL, const KaxBlockBlob * ForwBlock = NULL);
+
+       bool IsSimpleBlock() const {return bUseSimpleBlock;}
+
+       bool ReplaceSimpleByGroup();
+protected:
+       KaxCluster * ParentCluster;
+       union {
+               KaxBlockGroup *group;
+#if MATROSKA_VERSION >= 2
+               KaxSimpleBlock *simpleblock;
+#endif // MATROSKA_VERSION
+       } Block;
+       bool bUseSimpleBlock;
+       BlockBlobType SimpleBlockMode;
+};
+
+class MATROSKA_DLL_API KaxBlockDuration : public EbmlUInteger {
+       public:
+               KaxBlockDuration() {}
+               KaxBlockDuration(const KaxBlockDuration & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxBlockDuration);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxBlockDuration(*this);}
+};
+
+#if MATROSKA_VERSION >= 2
+class MATROSKA_DLL_API KaxBlockVirtual : public EbmlBinary {
+       public:
+               KaxBlockVirtual() :ParentCluster(NULL) {Data = DataBlock; Size = countof(DataBlock);}
+               KaxBlockVirtual(const KaxBlockVirtual & ElementToClone);
+               static EbmlElement & Create() {return *(new KaxBlockVirtual);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               bool ValidateSize() const {return true;}
+
+               /*!
+                       \note override this function to generate the Data/Size on the fly, unlike the usual binary elements
+               */
+               uint64 UpdateSize(bool bSaveDefault = false, bool bForceRender = false);
+
+               void SetParent(const KaxCluster & aParentCluster) {ParentCluster = &aParentCluster;}
+
+               EbmlElement * Clone() const {return new KaxBlockVirtual(*this);}
+
+       protected:
+               uint64 Timecode; // temporary timecode of the first frame if there are more than one
+               uint16 TrackNumber;
+               binary DataBlock[5];
+
+               const KaxCluster * ParentCluster;
+};
+#endif // MATROSKA_VERSION
+
+class MATROSKA_DLL_API KaxBlockAdditional : public EbmlBinary {
+       public:
+               KaxBlockAdditional() {}
+               KaxBlockAdditional(const KaxBlockAdditional & ElementToClone) :EbmlBinary(ElementToClone){}
+               static EbmlElement & Create() {return *(new KaxBlockAdditional);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               bool ValidateSize() const {return true;}
+
+               EbmlElement * Clone() const {return new KaxBlockAdditional(*this);}
+};
+
+class MATROSKA_DLL_API KaxBlockAdditions : public EbmlMaster {
+       public:
+               KaxBlockAdditions();
+               KaxBlockAdditions(const KaxBlockAdditions & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxBlockAdditions);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxBlockAdditions(*this);}
+};
+
+class MATROSKA_DLL_API KaxBlockMore : public EbmlMaster {
+       public:
+               KaxBlockMore();
+               KaxBlockMore(const KaxBlockMore & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxBlockMore);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxBlockMore(*this);}
+};
+
+class MATROSKA_DLL_API KaxBlockAddID : public EbmlUInteger {
+       public:
+               KaxBlockAddID() :EbmlUInteger(1) {}
+               KaxBlockAddID(const KaxBlockAddID & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxBlockAddID);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxBlockAddID(*this);}
+};
+
+class MATROSKA_DLL_API KaxCodecState : public EbmlBinary {
+       public:
+               KaxCodecState() {}
+               KaxCodecState(const KaxCodecState & ElementToClone) :EbmlBinary(ElementToClone){}
+               static EbmlElement & Create() {return *(new KaxCodecState);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               bool ValidateSize() const {return true;}
+
+               EbmlElement * Clone() const {return new KaxCodecState(*this);}
+};
+
+END_LIBMATROSKA_NAMESPACE
+
+#endif // LIBMATROSKA_BLOCK_H
diff --git a/matroska/KaxBlockData.h b/matroska/KaxBlockData.h
new file mode 100644 (file)
index 0000000..b8749a9
--- /dev/null
@@ -0,0 +1,182 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxBlockData.h,v 1.10 2004/04/14 23:26:17 robux4 Exp $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#ifndef LIBMATROSKA_BLOCK_ADDITIONAL_H
+#define LIBMATROSKA_BLOCK_ADDITIONAL_H
+
+#include "matroska/KaxTypes.h"
+#include "ebml/EbmlMaster.h"
+#include "ebml/EbmlUInteger.h"
+#include "ebml/EbmlSInteger.h"
+
+using namespace LIBEBML_NAMESPACE;
+
+START_LIBMATROSKA_NAMESPACE
+
+class KaxReferenceBlock;
+class KaxBlockGroup;
+class KaxBlockBlob;
+
+class MATROSKA_DLL_API KaxReferencePriority : public EbmlUInteger {
+       public:
+               KaxReferencePriority() :EbmlUInteger(0) {}
+               KaxReferencePriority(const KaxReferencePriority & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxReferencePriority);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxReferencePriority(*this);}
+};
+
+/*!
+       \brief element used for B frame-likes
+*/
+class MATROSKA_DLL_API KaxReferenceBlock : public EbmlSInteger {
+       public:
+               KaxReferenceBlock() :RefdBlock(NULL), ParentBlock(NULL) {bTimecodeSet = false;}
+               KaxReferenceBlock(const KaxReferenceBlock & ElementToClone) :EbmlSInteger(ElementToClone), bTimecodeSet(ElementToClone.bTimecodeSet) {}
+               static EbmlElement & Create() {return *(new KaxReferenceBlock);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxReferenceBlock(*this);}
+               
+               /*!
+                       \brief override this method to compute the timecode value
+               */
+               virtual uint64 UpdateSize(bool bSaveDefault = false, bool bForceRender = false);
+
+               const KaxBlockBlob & RefBlock() const;
+               void SetReferencedBlock(const KaxBlockBlob * aRefdBlock);
+               void SetReferencedBlock(const KaxBlockGroup & aRefdBlock);
+               void SetParentBlock(const KaxBlockGroup & aParentBlock) {ParentBlock = &aParentBlock;}
+               
+       protected:
+               const KaxBlockBlob * RefdBlock;
+               const KaxBlockGroup * ParentBlock;
+               void SetReferencedTimecode(int64 refTimecode) {Value = refTimecode; bTimecodeSet = true; bValueIsSet = true;};
+               bool bTimecodeSet;
+};
+
+#if MATROSKA_VERSION >= 2
+class MATROSKA_DLL_API KaxReferenceVirtual : public EbmlSInteger {
+       public:
+               KaxReferenceVirtual() {}
+               KaxReferenceVirtual(const KaxReferenceVirtual & ElementToClone) :EbmlSInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxReferenceVirtual);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxReferenceVirtual(*this);}
+};
+#endif // MATROSKA_VERSION
+
+class MATROSKA_DLL_API KaxTimeSlice : public EbmlMaster {
+       public:
+               KaxTimeSlice();
+               KaxTimeSlice(const KaxTimeSlice & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTimeSlice);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTimeSlice(*this);}
+};
+
+class MATROSKA_DLL_API KaxSlices : public EbmlMaster {
+       public:
+               KaxSlices();
+               KaxSlices(const KaxSlices & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxSlices);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxSlices(*this);}
+};
+
+class MATROSKA_DLL_API KaxSliceLaceNumber : public EbmlUInteger {
+       public:
+               KaxSliceLaceNumber() :EbmlUInteger(0) {}
+               KaxSliceLaceNumber(const KaxSliceLaceNumber & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxSliceLaceNumber);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxSliceLaceNumber(*this);}
+};
+
+class MATROSKA_DLL_API KaxSliceFrameNumber : public EbmlUInteger {
+       public:
+               KaxSliceFrameNumber() :EbmlUInteger(0) {}
+               KaxSliceFrameNumber(const KaxSliceFrameNumber & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxSliceFrameNumber);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxSliceFrameNumber(*this);}
+};
+
+class MATROSKA_DLL_API KaxSliceBlockAddID : public EbmlUInteger {
+       public:
+               KaxSliceBlockAddID() :EbmlUInteger(0) {}
+               KaxSliceBlockAddID(const KaxSliceBlockAddID & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxSliceBlockAddID);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxSliceBlockAddID(*this);}
+};
+
+class MATROSKA_DLL_API KaxSliceDelay : public EbmlUInteger {
+       public:
+               KaxSliceDelay() :EbmlUInteger(0) {}
+               KaxSliceDelay(const KaxSliceDelay & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxSliceDelay);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxSliceDelay(*this);}
+};
+
+class MATROSKA_DLL_API KaxSliceDuration : public EbmlUInteger {
+       public:
+               KaxSliceDuration() {}
+               KaxSliceDuration(const KaxSliceDuration & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxSliceDuration);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxSliceDuration(*this);}
+};
+
+END_LIBMATROSKA_NAMESPACE
+
+#endif // LIBMATROSKA_BLOCK_ADDITIONAL_H
diff --git a/matroska/KaxChapters.h b/matroska/KaxChapters.h
new file mode 100644 (file)
index 0000000..56474c0
--- /dev/null
@@ -0,0 +1,352 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxChapters.h,v 1.9 2004/04/14 23:26:17 robux4 Exp $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#ifndef LIBMATROSKA_CHAPTERS_H
+#define LIBMATROSKA_CHAPTERS_H
+
+#include "matroska/KaxTypes.h"
+#include "ebml/EbmlMaster.h"
+#include "ebml/EbmlUInteger.h"
+#include "ebml/EbmlUnicodeString.h"
+#include "ebml/EbmlString.h"
+#include "ebml/EbmlBinary.h"
+
+using namespace LIBEBML_NAMESPACE;
+
+START_LIBMATROSKA_NAMESPACE
+
+class MATROSKA_DLL_API KaxChapters : public EbmlMaster {
+       public:
+               KaxChapters();
+               KaxChapters(const KaxChapters & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxChapters);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxChapters(*this);}
+};
+
+class MATROSKA_DLL_API KaxEditionEntry : public EbmlMaster {
+       public:
+               KaxEditionEntry();
+               KaxEditionEntry(const KaxEditionEntry & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxEditionEntry);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxEditionEntry(*this);}
+};
+
+class MATROSKA_DLL_API KaxEditionUID : public EbmlUInteger {
+public:
+    KaxEditionUID() {}
+       KaxEditionUID(const KaxEditionUID & ElementToClone) :EbmlUInteger(ElementToClone) {}
+    static EbmlElement & Create() {return *(new KaxEditionUID);}
+    const EbmlCallbacks & Generic() const {return ClassInfos;}
+    static const EbmlCallbacks ClassInfos;
+    operator const EbmlId &() const {return ClassInfos.GlobalId;}
+       EbmlElement * Clone() const {return new KaxEditionUID(*this);}
+};
+
+class MATROSKA_DLL_API KaxEditionFlagHidden : public EbmlUInteger {
+public:
+    KaxEditionFlagHidden(): EbmlUInteger(0) {}
+       KaxEditionFlagHidden(const KaxEditionFlagHidden & ElementToClone) :EbmlUInteger(ElementToClone) {}
+    static EbmlElement & Create() {return *(new KaxEditionFlagHidden);}
+    const EbmlCallbacks & Generic() const {return ClassInfos;}
+    static const EbmlCallbacks ClassInfos;
+    operator const EbmlId &() const {return ClassInfos.GlobalId;}
+       EbmlElement * Clone() const {return new KaxEditionFlagHidden(*this);}
+};
+
+class MATROSKA_DLL_API KaxEditionFlagDefault : public EbmlUInteger {
+public:
+    KaxEditionFlagDefault(): EbmlUInteger(0) {}
+       KaxEditionFlagDefault(const KaxEditionFlagDefault & ElementToClone) :EbmlUInteger(ElementToClone) {}
+    static EbmlElement & Create() {return *(new KaxEditionFlagDefault);}
+    const EbmlCallbacks & Generic() const {return ClassInfos;}
+    static const EbmlCallbacks ClassInfos;
+    operator const EbmlId &() const {return ClassInfos.GlobalId;}
+       EbmlElement * Clone() const {return new KaxEditionFlagDefault(*this);}
+};
+
+class MATROSKA_DLL_API KaxEditionFlagOrdered : public EbmlUInteger {
+public:
+    KaxEditionFlagOrdered(): EbmlUInteger(0) {}
+       KaxEditionFlagOrdered(const KaxEditionFlagOrdered & ElementToClone) :EbmlUInteger(ElementToClone) {}
+    static EbmlElement & Create() {return *(new KaxEditionFlagOrdered);}
+    const EbmlCallbacks & Generic() const {return ClassInfos;}
+    static const EbmlCallbacks ClassInfos;
+    operator const EbmlId &() const {return ClassInfos.GlobalId;}
+       EbmlElement * Clone() const {return new KaxEditionFlagOrdered(*this);}
+};
+
+class MATROSKA_DLL_API KaxChapterAtom : public EbmlMaster {
+public:
+    KaxChapterAtom();
+       KaxChapterAtom(const KaxChapterAtom & ElementToClone) :EbmlMaster(ElementToClone) {}
+    static EbmlElement & Create() {return *(new KaxChapterAtom);}
+    const EbmlCallbacks & Generic() const {return ClassInfos;}
+    static const EbmlCallbacks ClassInfos;
+    operator const EbmlId &() const {return ClassInfos.GlobalId;}
+       EbmlElement * Clone() const {return new KaxChapterAtom(*this);}
+};
+
+class MATROSKA_DLL_API KaxChapterUID : public EbmlUInteger {
+public:
+    KaxChapterUID() {}
+       KaxChapterUID(const KaxChapterUID & ElementToClone) :EbmlUInteger(ElementToClone) {}
+    static EbmlElement & Create() {return *(new KaxChapterUID);}
+    const EbmlCallbacks & Generic() const {return ClassInfos;}
+    static const EbmlCallbacks ClassInfos;
+    operator const EbmlId &() const {return ClassInfos.GlobalId;}
+       EbmlElement * Clone() const {return new KaxChapterUID(*this);}
+};
+
+class MATROSKA_DLL_API KaxChapterTimeStart : public EbmlUInteger {
+public:
+    KaxChapterTimeStart() {}
+       KaxChapterTimeStart(const KaxChapterTimeStart & ElementToClone) :EbmlUInteger(ElementToClone) {}
+    static EbmlElement & Create() {return *(new KaxChapterTimeStart);}
+    const EbmlCallbacks & Generic() const {return ClassInfos;}
+    static const EbmlCallbacks ClassInfos;
+    operator const EbmlId &() const {return ClassInfos.GlobalId;}
+       EbmlElement * Clone() const {return new KaxChapterTimeStart(*this);}
+};
+
+class MATROSKA_DLL_API KaxChapterTimeEnd : public EbmlUInteger {
+public:
+    KaxChapterTimeEnd() {}
+       KaxChapterTimeEnd(const KaxChapterTimeEnd & ElementToClone) :EbmlUInteger(ElementToClone) {}
+    static EbmlElement & Create() {return *(new KaxChapterTimeEnd);}
+    const EbmlCallbacks & Generic() const {return ClassInfos;}
+    static const EbmlCallbacks ClassInfos;
+    operator const EbmlId &() const {return ClassInfos.GlobalId;}
+       EbmlElement * Clone() const {return new KaxChapterTimeEnd(*this);}
+};
+
+class MATROSKA_DLL_API KaxChapterFlagHidden : public EbmlUInteger {
+public:
+       KaxChapterFlagHidden(): EbmlUInteger(0) {}
+       KaxChapterFlagHidden(const KaxChapterFlagHidden & ElementToClone) :EbmlUInteger(ElementToClone) {}
+       static EbmlElement & Create() {return *(new KaxChapterFlagHidden);}
+       const EbmlCallbacks & Generic() const {return ClassInfos;}
+       static const EbmlCallbacks ClassInfos;
+       operator const EbmlId &() const {return ClassInfos.GlobalId;}
+       EbmlElement * Clone() const {return new KaxChapterFlagHidden(*this);}
+};
+
+class MATROSKA_DLL_API KaxChapterFlagEnabled : public EbmlUInteger {
+public:
+       KaxChapterFlagEnabled(): EbmlUInteger(1) {}
+       KaxChapterFlagEnabled(const KaxChapterFlagEnabled & ElementToClone) :EbmlUInteger(ElementToClone) {}
+       static EbmlElement & Create() {return *(new KaxChapterFlagEnabled);}
+       const EbmlCallbacks & Generic() const {return ClassInfos;}
+       static const EbmlCallbacks ClassInfos;
+       operator const EbmlId &() const {return ClassInfos.GlobalId;}
+       EbmlElement * Clone() const {return new KaxChapterFlagEnabled(*this);}
+};
+
+class MATROSKA_DLL_API KaxChapterSegmentUID : public EbmlBinary {
+public:
+    KaxChapterSegmentUID() {}
+       KaxChapterSegmentUID(const KaxChapterSegmentUID & ElementToClone) :EbmlBinary(ElementToClone) {}
+    static EbmlElement & Create() {return *(new KaxChapterSegmentUID);}
+    const EbmlCallbacks & Generic() const {return ClassInfos;}
+    static const EbmlCallbacks ClassInfos;
+    operator const EbmlId &() const {return ClassInfos.GlobalId;}
+       EbmlElement * Clone() const {return new KaxChapterSegmentUID(*this);}
+       bool ValidateSize() const { return (Size == 16);}
+};
+
+class MATROSKA_DLL_API KaxChapterSegmentEditionUID : public EbmlBinary {
+public:
+    KaxChapterSegmentEditionUID() {}
+       KaxChapterSegmentEditionUID(const KaxChapterSegmentEditionUID & ElementToClone) :EbmlBinary(ElementToClone) {}
+    static EbmlElement & Create() {return *(new KaxChapterSegmentEditionUID);}
+    const EbmlCallbacks & Generic() const {return ClassInfos;}
+    static const EbmlCallbacks ClassInfos;
+    operator const EbmlId &() const {return ClassInfos.GlobalId;}
+       EbmlElement * Clone() const {return new KaxChapterSegmentEditionUID(*this);}
+       bool ValidateSize() const { return (Size == 16);}
+};
+
+class MATROSKA_DLL_API KaxChapterPhysicalEquiv : public EbmlUInteger {
+public:
+       KaxChapterPhysicalEquiv(): EbmlUInteger() {}
+       KaxChapterPhysicalEquiv(const KaxChapterPhysicalEquiv & ElementToClone) :EbmlUInteger(ElementToClone) {}
+       static EbmlElement & Create() {return *(new KaxChapterPhysicalEquiv);}
+       const EbmlCallbacks & Generic() const {return ClassInfos;}
+       static const EbmlCallbacks ClassInfos;
+       operator const EbmlId &() const {return ClassInfos.GlobalId;}
+       EbmlElement * Clone() const {return new KaxChapterPhysicalEquiv(*this);}
+};
+
+class MATROSKA_DLL_API KaxChapterTrack : public EbmlMaster {
+public:
+    KaxChapterTrack();
+       KaxChapterTrack(const KaxChapterTrack & ElementToClone) :EbmlMaster(ElementToClone) {}
+    static EbmlElement & Create() {return *(new KaxChapterTrack);}
+    const EbmlCallbacks & Generic() const {return ClassInfos;}
+    static const EbmlCallbacks ClassInfos;
+    operator const EbmlId &() const {return ClassInfos.GlobalId;}
+       EbmlElement * Clone() const {return new KaxChapterTrack(*this);}
+};
+
+class MATROSKA_DLL_API KaxChapterTrackNumber : public EbmlUInteger {
+public:
+    KaxChapterTrackNumber() {}
+       KaxChapterTrackNumber(const KaxChapterTrackNumber & ElementToClone) :EbmlUInteger(ElementToClone) {}
+    static EbmlElement & Create() {return *(new KaxChapterTrackNumber);}
+    const EbmlCallbacks & Generic() const {return ClassInfos;}
+    static const EbmlCallbacks ClassInfos;
+    operator const EbmlId &() const {return ClassInfos.GlobalId;}
+       EbmlElement * Clone() const {return new KaxChapterTrackNumber(*this);}
+};
+
+class MATROSKA_DLL_API KaxChapterDisplay : public EbmlMaster {
+public:
+    KaxChapterDisplay();
+       KaxChapterDisplay(const KaxChapterDisplay & ElementToClone) :EbmlMaster(ElementToClone) {}
+    static EbmlElement & Create() {return *(new KaxChapterDisplay);}
+    const EbmlCallbacks & Generic() const {return ClassInfos;}
+    static const EbmlCallbacks ClassInfos;
+    operator const EbmlId &() const {return ClassInfos.GlobalId;}
+       EbmlElement * Clone() const {return new KaxChapterDisplay(*this);}
+};
+
+class MATROSKA_DLL_API KaxChapterString : public EbmlUnicodeString {
+public:
+    KaxChapterString() {}
+       KaxChapterString(const KaxChapterString & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+    static EbmlElement & Create() {return *(new KaxChapterString);}
+    const EbmlCallbacks & Generic() const {return ClassInfos;}
+    static const EbmlCallbacks ClassInfos;
+    operator const EbmlId &() const {return ClassInfos.GlobalId;}
+       EbmlElement * Clone() const {return new KaxChapterString(*this);}
+};
+
+class MATROSKA_DLL_API KaxChapterLanguage : public EbmlString {
+public:
+    KaxChapterLanguage() :EbmlString("eng") {}
+       KaxChapterLanguage(const KaxChapterLanguage & ElementToClone) :EbmlString(ElementToClone) {}
+    static EbmlElement & Create() {return *(new KaxChapterLanguage);}
+    const EbmlCallbacks & Generic() const {return ClassInfos;}
+    static const EbmlCallbacks ClassInfos;
+    operator const EbmlId &() const {return ClassInfos.GlobalId;}
+       EbmlElement * Clone() const {return new KaxChapterLanguage(*this);}
+};
+
+class MATROSKA_DLL_API KaxChapterCountry : public EbmlString {
+public:
+    KaxChapterCountry() :EbmlString() {}
+       KaxChapterCountry(const KaxChapterCountry & ElementToClone) :EbmlString(ElementToClone) {}
+    static EbmlElement & Create() {return *(new KaxChapterCountry);}
+    const EbmlCallbacks & Generic() const {return ClassInfos;}
+    static const EbmlCallbacks ClassInfos;
+    operator const EbmlId &() const {return ClassInfos.GlobalId;}
+       EbmlElement * Clone() const {return new KaxChapterCountry(*this);}
+};
+
+class MATROSKA_DLL_API KaxChapterProcess : public EbmlMaster {
+public:
+    KaxChapterProcess();
+       KaxChapterProcess(const KaxChapterProcess & ElementToClone) :EbmlMaster(ElementToClone) {}
+    static EbmlElement & Create() {return *(new KaxChapterProcess);}
+    const EbmlCallbacks & Generic() const {return ClassInfos;}
+    static const EbmlCallbacks ClassInfos;
+    operator const EbmlId &() const {return ClassInfos.GlobalId;}
+       EbmlElement * Clone() const {return new KaxChapterProcess(*this);}
+};
+
+class MATROSKA_DLL_API KaxChapterProcessCodecID : public EbmlUInteger {
+public:
+    KaxChapterProcessCodecID() :EbmlUInteger(0) {}
+       KaxChapterProcessCodecID(const KaxChapterProcessCodecID & ElementToClone) :EbmlUInteger(ElementToClone) {}
+    static EbmlElement & Create() {return *(new KaxChapterProcessCodecID);}
+    const EbmlCallbacks & Generic() const {return ClassInfos;}
+    static const EbmlCallbacks ClassInfos;
+    operator const EbmlId &() const {return ClassInfos.GlobalId;}
+       EbmlElement * Clone() const {return new KaxChapterProcessCodecID(*this);}
+};
+
+class MATROSKA_DLL_API KaxChapterProcessPrivate : public EbmlBinary {
+public:
+    KaxChapterProcessPrivate() {}
+       KaxChapterProcessPrivate(const KaxChapterProcessPrivate & ElementToClone) :EbmlBinary(ElementToClone) {}
+    static EbmlElement & Create() {return *(new KaxChapterProcessPrivate);}
+    const EbmlCallbacks & Generic() const {return ClassInfos;}
+    static const EbmlCallbacks ClassInfos;
+    operator const EbmlId &() const {return ClassInfos.GlobalId;}
+       EbmlElement * Clone() const {return new KaxChapterProcessPrivate(*this);}
+       bool ValidateSize() const {return true;}
+};
+
+class MATROSKA_DLL_API KaxChapterProcessCommand : public EbmlMaster {
+public:
+    KaxChapterProcessCommand();
+       KaxChapterProcessCommand(const KaxChapterProcessCommand & ElementToClone) :EbmlMaster(ElementToClone) {}
+    static EbmlElement & Create() {return *(new KaxChapterProcessCommand);}
+    const EbmlCallbacks & Generic() const {return ClassInfos;}
+    static const EbmlCallbacks ClassInfos;
+    operator const EbmlId &() const {return ClassInfos.GlobalId;}
+       EbmlElement * Clone() const {return new KaxChapterProcessCommand(*this);}
+};
+
+class MATROSKA_DLL_API KaxChapterProcessTime : public EbmlUInteger {
+public:
+    KaxChapterProcessTime() {}
+       KaxChapterProcessTime(const KaxChapterProcessTime & ElementToClone) :EbmlUInteger(ElementToClone) {}
+    static EbmlElement & Create() {return *(new KaxChapterProcessTime);}
+    const EbmlCallbacks & Generic() const {return ClassInfos;}
+    static const EbmlCallbacks ClassInfos;
+    operator const EbmlId &() const {return ClassInfos.GlobalId;}
+       EbmlElement * Clone() const {return new KaxChapterProcessTime(*this);}
+};
+
+class MATROSKA_DLL_API KaxChapterProcessData : public EbmlBinary {
+public:
+    KaxChapterProcessData() {}
+       KaxChapterProcessData(const KaxChapterProcessData & ElementToClone) :EbmlBinary(ElementToClone) {}
+    static EbmlElement & Create() {return *(new KaxChapterProcessData);}
+    const EbmlCallbacks & Generic() const {return ClassInfos;}
+    static const EbmlCallbacks ClassInfos;
+    operator const EbmlId &() const {return ClassInfos.GlobalId;}
+       EbmlElement * Clone() const {return new KaxChapterProcessData(*this);}
+       bool ValidateSize() const {return true;}
+};
+
+END_LIBMATROSKA_NAMESPACE
+
+#endif // LIBMATROSKA_CHAPTERS_H
diff --git a/matroska/KaxCluster.h b/matroska/KaxCluster.h
new file mode 100644 (file)
index 0000000..b8596a0
--- /dev/null
@@ -0,0 +1,168 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxCluster.h,v 1.10 2004/04/14 23:26:17 robux4 Exp $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+       \author Julien Coloos    <suiryc @ users.sf.net>
+
+*/
+#ifndef LIBMATROSKA_CLUSTER_H
+#define LIBMATROSKA_CLUSTER_H
+
+#include "matroska/KaxTypes.h"
+#include "ebml/EbmlMaster.h"
+#include "matroska/KaxTracks.h"
+#include "matroska/KaxBlock.h"
+#include "matroska/KaxCues.h"
+#include "matroska/KaxClusterData.h"
+
+using namespace LIBEBML_NAMESPACE;
+
+START_LIBMATROSKA_NAMESPACE
+
+class KaxSegment;
+
+class MATROSKA_DLL_API KaxCluster : public EbmlMaster {
+       public:
+               KaxCluster();
+               KaxCluster(const KaxCluster & ElementToClone);
+               static EbmlElement & Create() {return *(new KaxCluster);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxCluster(*this);}
+
+               /*!
+                       \brief Addition of a frame without references
+
+                       \param the timecode is expressed in nanoseconds, relative to the beggining of the Segment
+               */
+               bool AddFrame(const KaxTrackEntry & track, uint64 timecode, DataBuffer & buffer, KaxBlockGroup * & MyNewBlock, LacingType lacing = LACING_AUTO);
+               /*!
+                       \brief Addition of a frame with a backward reference (P frame)
+                       \param the timecode is expressed in nanoseconds, relative to the beggining of the Segment
+
+               */
+               bool AddFrame(const KaxTrackEntry & track, uint64 timecode, DataBuffer & buffer, KaxBlockGroup * & MyNewBlock, const KaxBlockGroup & PastBlock, LacingType lacing = LACING_AUTO);
+
+               /*!
+                       \brief Addition of a frame with a backward+forward reference (B frame)
+                       \param the timecode is expressed in nanoseconds, relative to the beggining of the Segment
+
+               */
+               bool AddFrame(const KaxTrackEntry & track, uint64 timecode, DataBuffer & buffer, KaxBlockGroup * & MyNewBlock, const KaxBlockGroup & PastBlock, const KaxBlockGroup & ForwBlock, LacingType lacing = LACING_AUTO);
+
+               /*!
+                       \brief Render the data to the stream and retrieve the position of BlockGroups for later cue entries
+               */
+               uint32 Render(IOCallback & output, KaxCues & CueToUpdate, bool bSaveDefault = false);
+
+               /*!
+                       \return the global timecode of this Cluster
+               */
+               uint64 GlobalTimecode() const;
+
+               KaxBlockGroup & GetNewBlock();
+               
+               /*!
+                       \brief release all the frames of all Blocks
+                       \note this is a convenience to be able to keep Clusters+Blocks in memory (for future reference) withouht being a memory hog
+               */
+               void ReleaseFrames();
+
+               /*!
+                       \brief return the position offset compared to the beggining of the Segment
+               */
+               uint64 GetPosition() const;
+
+               void SetParent(const KaxSegment & aParentSegment) {ParentSegment = &aParentSegment;}
+
+               void SetPreviousTimecode(uint64 aPreviousTimecode, int64 aTimecodeScale) {
+                       bPreviousTimecodeIsSet = true; 
+                       PreviousTimecode = aPreviousTimecode;
+                       SetGlobalTimecodeScale(aTimecodeScale);
+               }
+
+               /*!
+                       \note dirty hack to get the mandatory data back after reading
+                       \todo there should be a better way to get mandatory data
+               */
+               void InitTimecode(uint64 aTimecode, int64 aTimecodeScale) {
+                       SetGlobalTimecodeScale(aTimecodeScale);
+                       MinTimecode = MaxTimecode = PreviousTimecode = aTimecode * TimecodeScale;
+                       bFirstFrameInside = bPreviousTimecodeIsSet = true;
+               }
+
+               int16 GetBlockLocalTimecode(uint64 GlobalTimecode) const;
+
+               uint64 GetBlockGlobalTimecode(int16 LocalTimecode);
+
+               void SetGlobalTimecodeScale(uint64 aGlobalTimecodeScale) {
+                       TimecodeScale = aGlobalTimecodeScale;
+                       bTimecodeScaleIsSet = true;
+               }
+               uint64 GlobalTimecodeScale() const {
+                       assert(bTimecodeScaleIsSet); 
+                       return TimecodeScale;
+               }
+
+               bool SetSilentTrackUsed()
+               {
+                       bSilentTracksUsed = true;
+                       return FindFirstElt(KaxClusterSilentTracks::ClassInfos, true) != NULL;
+               }
+
+               bool AddBlockBlob(KaxBlockBlob * NewBlob);
+
+               const KaxSegment *GetParentSegment() const { return ParentSegment; }
+
+       protected:
+               KaxBlockBlob     * currentNewBlob;
+               std::vector<KaxBlockBlob*> Blobs;
+               KaxBlockGroup    * currentNewBlock;
+               const KaxSegment * ParentSegment;
+
+               uint64 MinTimecode, MaxTimecode, PreviousTimecode;
+               int64  TimecodeScale;
+
+               bool bFirstFrameInside; // used to speed research
+               bool bPreviousTimecodeIsSet;
+               bool bTimecodeScaleIsSet;
+               bool bSilentTracksUsed;
+
+               /*!
+                       \note method used internally
+               */
+               bool AddFrameInternal(const KaxTrackEntry & track, uint64 timecode, DataBuffer & buffer, KaxBlockGroup * & MyNewBlock, const KaxBlockGroup * PastBlock, const KaxBlockGroup * ForwBlock, LacingType lacing);
+
+};
+
+END_LIBMATROSKA_NAMESPACE
+
+#endif // LIBMATROSKA_CLUSTER_H
diff --git a/matroska/KaxClusterData.h b/matroska/KaxClusterData.h
new file mode 100644 (file)
index 0000000..0e26a37
--- /dev/null
@@ -0,0 +1,103 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class MATROSKA_DLL_API description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxClusterData.h,v 1.9 2004/04/21 19:50:10 mosu Exp $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#ifndef LIBMATROSKA_CLUSTER_DATA_H
+#define LIBMATROSKA_CLUSTER_DATA_H
+
+#include "matroska/KaxTypes.h"
+#include "ebml/EbmlMaster.h"
+#include "ebml/EbmlUInteger.h"
+
+using namespace LIBEBML_NAMESPACE;
+
+START_LIBMATROSKA_NAMESPACE
+
+class MATROSKA_DLL_API KaxClusterTimecode : public EbmlUInteger {
+       public:
+               KaxClusterTimecode() {}
+               KaxClusterTimecode(const KaxClusterTimecode & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxClusterTimecode);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxClusterTimecode(*this);}
+};
+
+class MATROSKA_DLL_API KaxClusterSilentTracks : public EbmlMaster {
+       public:
+               KaxClusterSilentTracks();
+               KaxClusterSilentTracks(const KaxClusterSilentTracks & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxClusterSilentTracks);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxClusterSilentTracks(*this);}
+};
+
+class MATROSKA_DLL_API KaxClusterSilentTrackNumber : public EbmlUInteger {
+       public:
+               KaxClusterSilentTrackNumber() {}
+               KaxClusterSilentTrackNumber(const KaxClusterSilentTrackNumber & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxClusterSilentTrackNumber);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxClusterSilentTrackNumber(*this);}
+};
+
+class MATROSKA_DLL_API KaxClusterPosition : public EbmlUInteger {
+       public:
+               KaxClusterPosition() {}
+               KaxClusterPosition(const KaxClusterPosition & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxClusterPosition);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxClusterPosition(*this);}
+};
+
+class MATROSKA_DLL_API KaxClusterPrevSize : public EbmlUInteger {
+       public:
+               KaxClusterPrevSize() {}
+               KaxClusterPrevSize(const KaxClusterPrevSize & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxClusterPrevSize);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxClusterPrevSize(*this);}
+};
+
+END_LIBMATROSKA_NAMESPACE
+
+#endif // LIBMATROSKA_CLUSTER_DATA_H
diff --git a/matroska/KaxConfig.h b/matroska/KaxConfig.h
new file mode 100644 (file)
index 0000000..2896978
--- /dev/null
@@ -0,0 +1,70 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxConfig.h,v 1.7 2004/04/14 23:26:17 robux4 Exp $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+       \author Moritz Bunkus <moritz @ bunkus.org>
+*/
+#ifndef LIBMATROSKA_CONFIG_H
+#define LIBMATROSKA_CONFIG_H
+
+#define LIBMATROSKA_NAMESPACE       libmatroska
+
+#if defined(NO_NAMESPACE) // for older GCC
+# define START_LIBMATROSKA_NAMESPACE
+# define END_LIBMATROSKA_NAMESPACE
+#else // NO_NAMESPACE
+# define START_LIBMATROSKA_NAMESPACE namespace LIBMATROSKA_NAMESPACE {
+# define END_LIBMATROSKA_NAMESPACE   };
+#endif // NO_NAMESPACE
+
+// There are special implementations for certain platforms. For example on Windows
+// we use the Win32 file API. here we set the appropriate macros.
+#if defined(_WIN32)||defined(WIN32)
+
+# if defined(MATROSKA_DLL)
+#  if defined(MATROSKA_DLL_EXPORT)
+#   define MATROSKA_DLL_API __declspec(dllexport)
+#  else // MATROSKA_DLL_EXPORT
+#   define MATROSKA_DLL_API __declspec(dllimport)
+#  endif // MATROSKA_DLL_EXPORT
+# else // MATROSKA_DLL
+#  define MATROSKA_DLL_API
+# endif // MATROSKA_DLL
+
+#else
+# define MATROSKA_DLL_API
+#endif
+
+#if !defined(MATROSKA_VERSION)
+#define MATROSKA_VERSION  2
+#endif // MATROSKA_VERSION
+
+
+#endif // LIBMATROSKA_CONFIG_H
diff --git a/matroska/KaxContentEncoding.h b/matroska/KaxContentEncoding.h
new file mode 100644 (file)
index 0000000..d1b241c
--- /dev/null
@@ -0,0 +1,250 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxContentEncoding.h,v 1.7 2004/04/14 23:26:17 robux4 Exp $
+       \author Moritz Bunkus <moritz @ bunkus.org>
+*/
+#ifndef LIBMATROSKA_CONTENT_ENCODING_H
+#define LIBMATROSKA_CONTENT_ENCODING_H
+
+#include "matroska/KaxTypes.h"
+#include "ebml/EbmlMaster.h"
+#include "ebml/EbmlUInteger.h"
+#include "ebml/EbmlBinary.h"
+
+using namespace LIBEBML_NAMESPACE;
+
+START_LIBMATROSKA_NAMESPACE
+
+class MATROSKA_DLL_API KaxContentEncodings: public EbmlMaster {
+public:
+  static const EbmlCallbacks ClassInfos;
+
+  KaxContentEncodings();
+  KaxContentEncodings(const KaxContentEncodings &ElementToClone):
+    EbmlMaster(ElementToClone) {}
+  static EbmlElement &Create() { return *(new KaxContentEncodings); }
+  const EbmlCallbacks &Generic() const { return ClassInfos; }
+  operator const EbmlId &() const { return ClassInfos.GlobalId; }
+  EbmlElement *Clone() const { return new KaxContentEncodings(*this); }
+};
+
+class MATROSKA_DLL_API KaxContentEncoding: public EbmlMaster {
+public:
+  static const EbmlCallbacks ClassInfos;
+
+  KaxContentEncoding();
+  KaxContentEncoding(const KaxContentEncoding &ElementToClone):
+    EbmlMaster(ElementToClone) {}
+  static EbmlElement &Create() { return *(new KaxContentEncoding); }
+  const EbmlCallbacks &Generic() const { return ClassInfos; }
+  operator const EbmlId &() const { return ClassInfos.GlobalId; }
+  EbmlElement *Clone() const { return new KaxContentEncoding(*this); }
+};
+
+class MATROSKA_DLL_API KaxContentEncodingOrder: public EbmlUInteger {
+public:
+  static const EbmlCallbacks ClassInfos;
+
+  KaxContentEncodingOrder(): EbmlUInteger(0) {}
+  KaxContentEncodingOrder(const KaxContentEncodingOrder &ElementToClone):
+    EbmlUInteger(ElementToClone) {}
+  static EbmlElement &Create() { return *(new KaxContentEncodingOrder); }
+  const EbmlCallbacks &Generic() const { return ClassInfos; }
+  operator const EbmlId &() const { return ClassInfos.GlobalId; }
+  EbmlElement *Clone() const { return new KaxContentEncodingOrder(*this); }
+};
+
+class MATROSKA_DLL_API KaxContentEncodingScope: public EbmlUInteger {
+public:
+  static const EbmlCallbacks ClassInfos;
+
+  KaxContentEncodingScope(): EbmlUInteger(1) {}
+  KaxContentEncodingScope(const KaxContentEncodingScope &ElementToClone):
+    EbmlUInteger(ElementToClone) {}
+  static EbmlElement &Create() { return *(new KaxContentEncodingScope); }
+  const EbmlCallbacks &Generic() const { return ClassInfos; }
+  operator const EbmlId &() const { return ClassInfos.GlobalId; }
+  EbmlElement *Clone() const { return new KaxContentEncodingScope(*this); }
+};
+
+class MATROSKA_DLL_API KaxContentEncodingType: public EbmlUInteger {
+public:
+  static const EbmlCallbacks ClassInfos;
+
+  KaxContentEncodingType(): EbmlUInteger(0) {}
+  KaxContentEncodingType(const KaxContentEncodingType &ElementToClone):
+    EbmlUInteger(ElementToClone) {}
+  static EbmlElement &Create() { return *(new KaxContentEncodingType); }
+  const EbmlCallbacks &Generic() const { return ClassInfos; }
+  operator const EbmlId &() const { return ClassInfos.GlobalId; }
+  EbmlElement *Clone() const { return new KaxContentEncodingType(*this); }
+};
+
+class MATROSKA_DLL_API KaxContentCompression: public EbmlMaster {
+public:
+  static const EbmlCallbacks ClassInfos;
+
+  KaxContentCompression();
+  KaxContentCompression(const KaxContentCompression &ElementToClone):
+    EbmlMaster(ElementToClone) {}
+  static EbmlElement &Create() { return *(new KaxContentCompression); }
+  const EbmlCallbacks &Generic() const { return ClassInfos; }
+  operator const EbmlId &() const { return ClassInfos.GlobalId; }
+  EbmlElement *Clone() const { return new KaxContentCompression(*this); }
+};
+
+class MATROSKA_DLL_API KaxContentCompAlgo: public EbmlUInteger {
+public:
+  static const EbmlCallbacks ClassInfos;
+
+  KaxContentCompAlgo(): EbmlUInteger(0) {}
+  KaxContentCompAlgo(const KaxContentCompAlgo &ElementToClone):
+    EbmlUInteger(ElementToClone) {}
+  static EbmlElement &Create() { return *(new KaxContentCompAlgo); }
+  const EbmlCallbacks &Generic() const { return ClassInfos; }
+  operator const EbmlId &() const { return ClassInfos.GlobalId; }
+  EbmlElement *Clone() const { return new KaxContentCompAlgo(*this); }
+};
+
+class MATROSKA_DLL_API KaxContentCompSettings: public EbmlBinary {
+public:
+  static const EbmlCallbacks ClassInfos;
+
+  KaxContentCompSettings() {}
+  KaxContentCompSettings(const KaxContentCompSettings &ElementToClone):
+    EbmlBinary(ElementToClone) {}
+  static EbmlElement &Create() { return *(new KaxContentCompSettings); }
+  const EbmlCallbacks &Generic() const { return ClassInfos; }
+  operator const EbmlId &() const { return ClassInfos.GlobalId; }
+  EbmlElement *Clone() const {
+    return new KaxContentCompSettings(*this);
+  }
+  bool ValidateSize(void) const { return true; }
+};
+
+class MATROSKA_DLL_API KaxContentEncryption: public EbmlMaster {
+public:
+  static const EbmlCallbacks ClassInfos;
+
+  KaxContentEncryption();
+  KaxContentEncryption(const KaxContentEncryption &ElementToClone):
+    EbmlMaster(ElementToClone) {}
+  static EbmlElement &Create() { return *(new KaxContentEncryption); }
+  const EbmlCallbacks &Generic() const { return ClassInfos; }
+  operator const EbmlId &() const { return ClassInfos.GlobalId; }
+  EbmlElement *Clone() const { return new KaxContentEncryption(*this); }
+};
+
+class MATROSKA_DLL_API KaxContentEncAlgo: public EbmlUInteger {
+public:
+  static const EbmlCallbacks ClassInfos;
+
+  KaxContentEncAlgo(): EbmlUInteger(0) {}
+  KaxContentEncAlgo(const KaxContentEncAlgo &ElementToClone):
+    EbmlUInteger(ElementToClone) {}
+  static EbmlElement &Create() { return *(new KaxContentEncAlgo); }
+  const EbmlCallbacks &Generic() const { return ClassInfos; }
+  operator const EbmlId &() const { return ClassInfos.GlobalId; }
+  EbmlElement *Clone() const { return new KaxContentEncAlgo(*this); }
+};
+
+class MATROSKA_DLL_API KaxContentEncKeyID: public EbmlBinary {
+public:
+  static const EbmlCallbacks ClassInfos;
+
+  KaxContentEncKeyID() {}
+  KaxContentEncKeyID(const KaxContentEncKeyID &ElementToClone):
+    EbmlBinary(ElementToClone) {}
+  static EbmlElement &Create() { return *(new KaxContentEncKeyID); }
+  const EbmlCallbacks &Generic() const { return ClassInfos; }
+  operator const EbmlId &() const { return ClassInfos.GlobalId; }
+  EbmlElement *Clone() const { return new KaxContentEncKeyID(*this); }
+  bool ValidateSize(void) const { return true; }
+};
+
+class MATROSKA_DLL_API KaxContentSignature: public EbmlBinary {
+public:
+  static const EbmlCallbacks ClassInfos;
+
+  KaxContentSignature() {}
+  KaxContentSignature(const KaxContentSignature &ElementToClone):
+    EbmlBinary(ElementToClone) {}
+  static EbmlElement &Create() { return *(new KaxContentSignature); }
+  const EbmlCallbacks &Generic() const { return ClassInfos; }
+  operator const EbmlId &() const { return ClassInfos.GlobalId; }
+  EbmlElement *Clone() const { return new KaxContentSignature(*this); }
+  bool ValidateSize(void) const { return true; }
+};
+
+class MATROSKA_DLL_API KaxContentSigKeyID: public EbmlBinary {
+public:
+  static const EbmlCallbacks ClassInfos;
+
+  KaxContentSigKeyID() {}
+  KaxContentSigKeyID(const KaxContentSigKeyID &ElementToClone):
+    EbmlBinary(ElementToClone) {}
+  static EbmlElement &Create() { return *(new KaxContentSigKeyID); }
+  const EbmlCallbacks &Generic() const { return ClassInfos; }
+  operator const EbmlId &() const { return ClassInfos.GlobalId; }
+  EbmlElement *Clone() const { return new KaxContentSigKeyID(*this); }
+  bool ValidateSize(void) const { return true; }
+};
+
+class MATROSKA_DLL_API KaxContentSigAlgo: public EbmlUInteger {
+public:
+  static const EbmlCallbacks ClassInfos;
+
+  KaxContentSigAlgo() {}
+  KaxContentSigAlgo(const KaxContentSigAlgo &ElementToClone):
+    EbmlUInteger(ElementToClone) {}
+  static EbmlElement &Create() { return *(new KaxContentSigAlgo); }
+  const EbmlCallbacks &Generic() const { return ClassInfos; }
+  operator const EbmlId &() const { return ClassInfos.GlobalId; }
+  EbmlElement *Clone() const { return new KaxContentSigAlgo(*this); }
+};
+
+class MATROSKA_DLL_API KaxContentSigHashAlgo: public EbmlUInteger {
+public:
+  static const EbmlCallbacks ClassInfos;
+
+  KaxContentSigHashAlgo() {}
+  KaxContentSigHashAlgo(const KaxContentSigHashAlgo &ElementToClone):
+    EbmlUInteger(ElementToClone) {}
+  static EbmlElement &Create() { return *(new KaxContentSigHashAlgo); }
+  const EbmlCallbacks &Generic() const { return ClassInfos; }
+  operator const EbmlId &() const { return ClassInfos.GlobalId; }
+  EbmlElement *Clone() const { return new KaxContentSigHashAlgo(*this); }
+};
+
+END_LIBMATROSKA_NAMESPACE
+
+#endif // LIBMATROSKA_CONTENT_ENCODING_H
diff --git a/matroska/KaxContexts.h b/matroska/KaxContexts.h
new file mode 100644 (file)
index 0000000..ced7740
--- /dev/null
@@ -0,0 +1,87 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxContexts.h,v 1.6 2004/04/14 23:26:17 robux4 Exp $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#ifndef LIBMATROSKA_CONTEXTS_H
+#define LIBMATROSKA_CONTEXTS_H
+
+#include "matroska/KaxTypes.h"
+#include "ebml/EbmlElement.h"
+
+using namespace LIBEBML_NAMESPACE;
+
+START_LIBMATROSKA_NAMESPACE
+
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxMatroska_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxSegment_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxAttachments_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxAttached_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxFileDescription_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxFileName_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxMimeType_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxFileData_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxChapters_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxCluster_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxTags_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxTag_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxBlockGroup_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxReferencePriority_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxReferenceBlock_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxReferenceVirtual_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxCues_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxInfo_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxSeekHead_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxTracks_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxTrackEntry_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxTrackNumber_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxTrackType_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxTrackFlagEnabled_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxTrackFlagDefault_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxTrackFlagLacing_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxTrackName_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxTrackLanguage_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxCodecID_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxCodecPrivate_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxCodecName_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxCodecSettings_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxCodecInfoURL_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxCodecDownloadURL_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxCodecDecodeAll_Context;
+extern const EbmlSemanticContext MATROSKA_DLL_API KaxTrackOverlay_Context;
+
+extern const EbmlSemanticContext & MATROSKA_DLL_API GetKaxGlobal_Context();
+extern const EbmlSemanticContext & MATROSKA_DLL_API GetKaxTagsGlobal_Context();
+
+END_LIBMATROSKA_NAMESPACE
+
+#endif // LIBMATROSKA_CONTEXTS_H
diff --git a/matroska/KaxCues.h b/matroska/KaxCues.h
new file mode 100644 (file)
index 0000000..c39c1af
--- /dev/null
@@ -0,0 +1,98 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxCues.h,v 1.7 2004/04/14 23:26:17 robux4 Exp $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#ifndef LIBMATROSKA_CUES_H
+#define LIBMATROSKA_CUES_H
+
+#include <vector>
+
+#include "matroska/KaxTypes.h"
+#include "ebml/EbmlMaster.h"
+#include "matroska/KaxBlock.h"
+
+using namespace LIBEBML_NAMESPACE;
+
+START_LIBMATROSKA_NAMESPACE
+
+class KaxCuePoint;
+
+class MATROSKA_DLL_API KaxCues : public EbmlMaster {
+       public:
+               KaxCues();
+               KaxCues(const KaxCues & ElementToClone) :EbmlMaster(ElementToClone) {}
+               ~KaxCues();
+               static EbmlElement & Create() {return *(new KaxCues);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxCues(*this);}
+
+               bool AddBlockGroup(const KaxBlockGroup & BlockReference);
+               bool AddBlockBlob(const KaxBlockBlob & BlockReference);
+
+               /*!
+                       \brief Indicate that the position for this Block is set
+               */
+               void PositionSet(const KaxBlockGroup & BlockReference);
+               void PositionSet(const KaxBlockBlob & BlockReference);
+
+               /*!
+                       \brief override to sort by timecode/track
+               */
+               uint32 Render(IOCallback & output, bool bSaveDefault = false) {
+                       Sort();
+                       return EbmlMaster::Render(output, bSaveDefault);
+               }
+
+               uint64 GetTimecodePosition(uint64 aTimecode) const;
+               const KaxCuePoint * GetTimecodePoint(uint64 aTimecode) const;
+
+               void SetGlobalTimecodeScale(uint64 aGlobalTimecodeScale) {
+                       mGlobalTimecodeScale = aGlobalTimecodeScale;
+                       bGlobalTimecodeScaleIsSet = true;
+               }
+               uint64 GlobalTimecodeScale() const {
+                       assert(bGlobalTimecodeScaleIsSet); 
+                       return mGlobalTimecodeScale;
+               }
+
+       protected:
+               std::vector<const KaxBlockBlob *> myTempReferences;
+               bool   bGlobalTimecodeScaleIsSet;
+               uint64 mGlobalTimecodeScale;
+};
+
+END_LIBMATROSKA_NAMESPACE
+
+#endif // LIBMATROSKA_CUES_H
diff --git a/matroska/KaxCuesData.h b/matroska/KaxCuesData.h
new file mode 100644 (file)
index 0000000..4c2c069
--- /dev/null
@@ -0,0 +1,198 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxCuesData.h,v 1.8 2004/04/14 23:26:17 robux4 Exp $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#ifndef LIBMATROSKA_CUES_DATA_H
+#define LIBMATROSKA_CUES_DATA_H
+
+#include "matroska/KaxTypes.h"
+#include "ebml/EbmlUInteger.h"
+#include "ebml/EbmlMaster.h"
+
+using namespace LIBEBML_NAMESPACE;
+
+START_LIBMATROSKA_NAMESPACE
+
+class KaxBlockGroup;
+class KaxBlockBlob;
+class KaxCueTrackPositions;
+class KaxInternalBlock;
+
+class MATROSKA_DLL_API KaxCuePoint : public EbmlMaster {
+       public:
+               KaxCuePoint();
+               KaxCuePoint(const KaxCuePoint & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxCuePoint);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxCuePoint(*this);}
+               void PositionSet(const KaxBlockGroup & BlockReference, uint64 GlobalTimecodeScale);
+               void PositionSet(const KaxBlockBlob & BlobReference, uint64 GlobalTimecodeScale);
+
+               bool operator<(const EbmlElement & EltB) const;
+
+               const KaxCueTrackPositions * GetSeekPosition() const;
+               bool Timecode(uint64 & aTimecode, uint64 GlobalTimecodeScale) const;
+};
+
+class MATROSKA_DLL_API KaxCueTime : public EbmlUInteger {
+       public:
+               KaxCueTime() {}
+               KaxCueTime(const KaxCueTime & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxCueTime);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxCueTime(*this);}
+};
+
+class MATROSKA_DLL_API KaxCueTrackPositions : public EbmlMaster {
+       public:
+               KaxCueTrackPositions();
+               KaxCueTrackPositions(const KaxCueTrackPositions & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxCueTrackPositions);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxCueTrackPositions(*this);}
+
+               uint64 ClusterPosition() const;
+               uint16 TrackNumber() const;
+};
+
+class MATROSKA_DLL_API KaxCueTrack : public EbmlUInteger {
+       public:
+               KaxCueTrack() {}
+               KaxCueTrack(const KaxCueTrack & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxCueTrack);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxCueTrack(*this);}
+};
+
+class MATROSKA_DLL_API KaxCueClusterPosition : public EbmlUInteger {
+       public:
+               KaxCueClusterPosition() {}
+               KaxCueClusterPosition(const KaxCueClusterPosition & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxCueClusterPosition);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxCueClusterPosition(*this);}
+};
+
+class MATROSKA_DLL_API KaxCueBlockNumber : public EbmlUInteger {
+       public:
+               KaxCueBlockNumber() :EbmlUInteger(1) {}
+               KaxCueBlockNumber(const KaxCueBlockNumber & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxCueBlockNumber);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxCueBlockNumber(*this);}
+};
+
+#if MATROSKA_VERSION >= 2
+class MATROSKA_DLL_API KaxCueCodecState : public EbmlUInteger {
+       public:
+               KaxCueCodecState() :EbmlUInteger(0) {}
+               KaxCueCodecState(const KaxCueCodecState & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxCueCodecState);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxCueCodecState(*this);}
+};
+
+class MATROSKA_DLL_API KaxCueReference : public EbmlMaster {
+       public:
+               KaxCueReference();
+               KaxCueReference(const KaxCueReference & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxCueReference);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxCueReference(*this);}
+               
+               void AddReference(const KaxBlockGroup & BlockReferenced, uint64 GlobalTimecodeScale);
+               void AddReference(const KaxBlockBlob & BlockReferenced, uint64 GlobalTimecodeScale);
+};
+
+class MATROSKA_DLL_API KaxCueRefTime : public EbmlUInteger {
+       public:
+               KaxCueRefTime() {}
+               KaxCueRefTime(const KaxCueRefTime & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxCueRefTime);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxCueRefTime(*this);}
+};
+
+class MATROSKA_DLL_API KaxCueRefCluster : public EbmlUInteger {
+       public:
+               KaxCueRefCluster() {}
+               KaxCueRefCluster(const KaxCueRefCluster & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxCueRefCluster);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxCueRefCluster(*this);}
+};
+
+class MATROSKA_DLL_API KaxCueRefNumber : public EbmlUInteger {
+       public:
+               KaxCueRefNumber() :EbmlUInteger(1) {}
+               KaxCueRefNumber(const KaxCueRefNumber & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxCueRefNumber);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxCueRefNumber(*this);}
+};
+
+class MATROSKA_DLL_API KaxCueRefCodecState : public EbmlUInteger {
+       public:
+               KaxCueRefCodecState() :EbmlUInteger(0) {}
+               KaxCueRefCodecState(const KaxCueRefCodecState & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxCueRefCodecState);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxCueRefCodecState(*this);}
+};
+#endif // MATROSKA_VERSION
+
+END_LIBMATROSKA_NAMESPACE
+
+#endif // LIBMATROSKA_CUES_DATA_H
diff --git a/matroska/KaxInfo.h b/matroska/KaxInfo.h
new file mode 100644 (file)
index 0000000..5ba569b
--- /dev/null
@@ -0,0 +1,81 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class MATROSKA_DLL_API description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxInfo.h,v 1.7 2004/04/14 23:26:17 robux4 Exp $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#ifndef LIBMATROSKA_INFO_H
+#define LIBMATROSKA_INFO_H
+
+#include "matroska/KaxTypes.h"
+#include "ebml/EbmlMaster.h"
+#include "ebml/EbmlUnicodeString.h"
+
+using namespace LIBEBML_NAMESPACE;
+
+START_LIBMATROSKA_NAMESPACE
+
+class MATROSKA_DLL_API KaxInfo : public EbmlMaster {
+       public:
+               KaxInfo();
+               KaxInfo(const KaxInfo & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxInfo);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxInfo(*this);}
+};
+
+class MATROSKA_DLL_API KaxMuxingApp : public EbmlUnicodeString {
+       public:
+               KaxMuxingApp() {}
+               KaxMuxingApp(const KaxMuxingApp & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxMuxingApp);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxMuxingApp(*this);}
+};
+
+class MATROSKA_DLL_API KaxWritingApp : public EbmlUnicodeString {
+       public:
+               KaxWritingApp() {}
+               KaxWritingApp(const KaxWritingApp & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxWritingApp);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxWritingApp(*this);}
+};
+
+END_LIBMATROSKA_NAMESPACE
+
+#endif // LIBMATROSKA_INFO_H
diff --git a/matroska/KaxInfoData.h b/matroska/KaxInfoData.h
new file mode 100644 (file)
index 0000000..ee185a7
--- /dev/null
@@ -0,0 +1,224 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxInfoData.h,v 1.7 2004/04/14 23:26:17 robux4 Exp $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+       \author John Cannon      <spyder2555 @ users.sf.net>
+       \author Moritz Bunkus    <moritz @ bunkus.org>
+*/
+#ifndef LIBMATROSKA_INFO_DATA_H
+#define LIBMATROSKA_INFO_DATA_H
+
+#include "matroska/KaxTypes.h"
+#include "ebml/EbmlUInteger.h"
+#include "ebml/EbmlFloat.h"
+#include "ebml/EbmlUnicodeString.h"
+#include "ebml/EbmlBinary.h"
+#include "ebml/EbmlDate.h"
+#include "ebml/EbmlMaster.h"
+
+using namespace LIBEBML_NAMESPACE;
+
+START_LIBMATROSKA_NAMESPACE
+
+class MATROSKA_DLL_API KaxSegmentUID : public EbmlBinary {
+       public:
+               KaxSegmentUID() {}
+               KaxSegmentUID(const KaxSegmentUID & ElementToClone) :EbmlBinary(ElementToClone){}
+               static EbmlElement & Create() {return *(new KaxSegmentUID);}
+               bool ValidateSize() const { return (Size == 16);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxSegmentUID(*this);}
+};
+
+class MATROSKA_DLL_API KaxSegmentFilename : public EbmlUnicodeString {
+       public:
+               KaxSegmentFilename() {}
+               KaxSegmentFilename(const KaxSegmentFilename & ElementToClone) :EbmlUnicodeString(ElementToClone){}
+               static EbmlElement & Create() {return *(new KaxSegmentFilename);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxSegmentFilename(*this);}
+};
+
+class MATROSKA_DLL_API KaxPrevUID : public KaxSegmentUID {
+       public:
+               KaxPrevUID() {}
+               KaxPrevUID(const KaxPrevUID & ElementToClone) :KaxSegmentUID(ElementToClone){}
+               static EbmlElement & Create() {return *(new KaxPrevUID);}
+               bool ValidateSize() const { return (Size == 16);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxPrevUID(*this);}
+};
+
+class MATROSKA_DLL_API KaxPrevFilename : public EbmlUnicodeString {
+       public:
+               KaxPrevFilename() :EbmlUnicodeString() {}
+               KaxPrevFilename(const KaxPrevFilename & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxPrevFilename);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxPrevFilename(*this);}
+};
+
+class MATROSKA_DLL_API KaxNextUID : public KaxSegmentUID {
+       public:
+               KaxNextUID() {}
+               KaxNextUID(const KaxNextUID & ElementToClone) :KaxSegmentUID(ElementToClone){}
+               static EbmlElement & Create() {return *(new KaxNextUID);}
+               bool ValidateSize() const { return (Size == 16);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxNextUID(*this);}
+};
+
+class MATROSKA_DLL_API KaxNextFilename : public EbmlUnicodeString {
+       public:
+               KaxNextFilename() {}
+               KaxNextFilename(const KaxNextFilename & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxNextFilename);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxNextFilename(*this);}
+};
+
+class MATROSKA_DLL_API KaxSegmentFamily : public EbmlBinary {
+       public:
+               KaxSegmentFamily() {}
+               KaxSegmentFamily(const KaxSegmentFamily & ElementToClone) :EbmlBinary(ElementToClone){}
+               static EbmlElement & Create() {return *(new KaxSegmentFamily);}
+               bool ValidateSize() const { return (Size == 16);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxSegmentFamily(*this);}
+};
+
+class MATROSKA_DLL_API KaxChapterTranslate : public EbmlMaster {
+       public:
+               KaxChapterTranslate();
+               KaxChapterTranslate(const KaxChapterTranslate & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxChapterTranslate);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxChapterTranslate(*this);}
+};
+
+class MATROSKA_DLL_API KaxChapterTranslateCodec : public EbmlUInteger {
+       public:
+               KaxChapterTranslateCodec() {}
+               KaxChapterTranslateCodec(const KaxChapterTranslateCodec & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxChapterTranslateCodec);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxChapterTranslateCodec(*this);}
+};
+
+class MATROSKA_DLL_API KaxChapterTranslateEditionUID : public EbmlUInteger {
+       public:
+               KaxChapterTranslateEditionUID() {}
+               KaxChapterTranslateEditionUID(const KaxChapterTranslateEditionUID & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxChapterTranslateEditionUID);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxChapterTranslateEditionUID(*this);}
+};
+
+class MATROSKA_DLL_API KaxChapterTranslateID : public EbmlBinary {
+       public:
+               KaxChapterTranslateID() {}
+               KaxChapterTranslateID(const KaxChapterTranslateID & ElementToClone) :EbmlBinary(ElementToClone){}
+               static EbmlElement & Create() {return *(new KaxChapterTranslateID);}
+               bool ValidateSize() const { return true;}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxChapterTranslateID(*this);}
+};
+
+class MATROSKA_DLL_API KaxTimecodeScale : public EbmlUInteger {
+       public:
+               KaxTimecodeScale() :EbmlUInteger(1000000) {}
+               KaxTimecodeScale(const KaxTimecodeScale & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTimecodeScale);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTimecodeScale(*this);}
+};
+
+class MATROSKA_DLL_API KaxDuration : public EbmlFloat {
+       public:
+               KaxDuration(): EbmlFloat(FLOAT_64) {}
+               KaxDuration(const KaxDuration & ElementToClone) :EbmlFloat(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxDuration);}              
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxDuration(*this);}
+};
+
+class MATROSKA_DLL_API KaxDateUTC : public EbmlDate {
+       public:
+               KaxDateUTC() {}
+               KaxDateUTC(const KaxDateUTC & ElementToClone) :EbmlDate(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxDateUTC);}               
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxDateUTC(*this);}
+};
+
+class MATROSKA_DLL_API KaxTitle : public EbmlUnicodeString {
+       public:
+               KaxTitle() {}
+               KaxTitle(const KaxTitle & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTitle);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTitle(*this);}
+};
+
+END_LIBMATROSKA_NAMESPACE
+
+#endif // LIBMATROSKA_INFO_DATA_H
diff --git a/matroska/KaxSeekHead.h b/matroska/KaxSeekHead.h
new file mode 100644 (file)
index 0000000..1b269fc
--- /dev/null
@@ -0,0 +1,110 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxSeekHead.h,v 1.7 2004/04/14 23:26:17 robux4 Exp $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#ifndef LIBMATROSKA_SEEK_HEAD_H
+#define LIBMATROSKA_SEEK_HEAD_H
+
+#include "matroska/KaxTypes.h"
+#include "ebml/EbmlMaster.h"
+#include "ebml/EbmlBinary.h"
+#include "ebml/EbmlUInteger.h"
+
+using namespace LIBEBML_NAMESPACE;
+
+START_LIBMATROSKA_NAMESPACE
+
+class KaxSegment;
+class KaxSeek;
+
+class MATROSKA_DLL_API KaxSeekHead : public EbmlMaster {
+       public:
+               KaxSeekHead();
+               KaxSeekHead(const KaxSeekHead & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxSeekHead);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxSeekHead(*this);}
+
+               /*!
+                       \brief add an element to index in the Meta Seek data
+                       \note the element should already be written in the file
+               */
+               void IndexThis(const EbmlElement & aElt, const KaxSegment & ParentSegment);
+
+               KaxSeek * FindFirstOf(const EbmlCallbacks & Callbacks) const;
+               KaxSeek * FindNextOf(const KaxSeek &aPrev) const;
+};
+
+class MATROSKA_DLL_API KaxSeek : public EbmlMaster {
+       public:
+               KaxSeek();
+               KaxSeek(const KaxSeek & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxSeek);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxSeek(*this);}
+
+               int64 Location() const;
+               bool IsEbmlId(const EbmlId & aId) const;
+               bool IsEbmlId(const KaxSeek & aPoint) const;
+};
+
+class MATROSKA_DLL_API KaxSeekID : public EbmlBinary {
+       public:
+               KaxSeekID() {}
+               KaxSeekID(const KaxSeekID & ElementToClone) :EbmlBinary(ElementToClone){}
+               static EbmlElement & Create() {return *(new KaxSeekID);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               bool ValidateSize() const {return Size <= 4;}
+               EbmlElement * Clone() const {return new KaxSeekID(*this);}
+};
+
+class MATROSKA_DLL_API KaxSeekPosition : public EbmlUInteger {
+       public:
+               KaxSeekPosition() {}
+               KaxSeekPosition(const KaxSeekPosition & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxSeekPosition);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxSeekPosition(*this);}
+};
+
+END_LIBMATROSKA_NAMESPACE
+
+#endif // LIBMATROSKA_SEEK_HEAD_H
diff --git a/matroska/KaxSegment.h b/matroska/KaxSegment.h
new file mode 100644 (file)
index 0000000..50fc6e0
--- /dev/null
@@ -0,0 +1,69 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class MATROSKA_DLL_API description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxSegment.h,v 1.8 2004/04/14 23:26:17 robux4 Exp $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#ifndef LIBMATROSKA_SEGMENT_H
+#define LIBMATROSKA_SEGMENT_H
+
+#include "matroska/KaxTypes.h"
+#include "ebml/EbmlMaster.h"
+
+using namespace LIBEBML_NAMESPACE;
+
+START_LIBMATROSKA_NAMESPACE
+
+class MATROSKA_DLL_API KaxSegment : public EbmlMaster {
+       public:
+               KaxSegment();
+               KaxSegment(const KaxSegment & ElementToClone);
+               static EbmlElement & Create() {return *(new KaxSegment);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxSegment(*this);}
+
+               /*!
+                       \brief give the position of the element in the segment
+               */
+               uint64 GetRelativePosition(const EbmlElement & Elt) const;
+               uint64 GetRelativePosition(uint64 aGlobalPosition) const;
+
+               /*!
+                       \brief give the position of the element in the file
+               */
+               uint64 GetGlobalPosition(uint64 aRelativePosition) const;
+};
+
+END_LIBMATROSKA_NAMESPACE
+
+#endif // LIBMATROSKA_SEGMENT_H
diff --git a/matroska/KaxTag.h b/matroska/KaxTag.h
new file mode 100644 (file)
index 0000000..8bf1325
--- /dev/null
@@ -0,0 +1,699 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class MATROSKA_DLL_API description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxTag.h,v 1.9 2004/04/14 23:26:17 robux4 Exp $
+       \author Jory Stone     <jcsston @ toughguy.net>
+       \author Steve Lhomme   <robux4 @ users.sf.net>
+*/
+#ifndef LIBMATROSKA_TAG_H
+#define LIBMATROSKA_TAG_H
+
+#include "matroska/KaxTypes.h"
+#include "ebml/EbmlMaster.h"
+#include "ebml/EbmlFloat.h"
+#include "ebml/EbmlSInteger.h"
+#include "ebml/EbmlUInteger.h"
+#include "ebml/EbmlString.h"
+#include "ebml/EbmlUnicodeString.h"
+#include "ebml/EbmlBinary.h"
+
+using namespace LIBEBML_NAMESPACE;
+
+START_LIBMATROSKA_NAMESPACE
+
+class MATROSKA_DLL_API KaxTag : public EbmlMaster {
+       public:
+               KaxTag();
+               KaxTag(const KaxTag & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTag);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTag(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagTargets : public EbmlMaster {
+       public:
+               KaxTagTargets();
+               KaxTagTargets(const KaxTagTargets & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagTargets);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagTargets(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagGeneral : public EbmlMaster {
+       public:
+               KaxTagGeneral();
+               KaxTagGeneral(const KaxTagGeneral & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagGeneral);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagGeneral(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagGenres : public EbmlMaster {
+       public:
+               KaxTagGenres();
+               KaxTagGenres(const KaxTagGenres & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagGenres);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagGenres(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagAudioSpecific : public EbmlMaster {
+       public:
+               KaxTagAudioSpecific();
+               KaxTagAudioSpecific(const KaxTagAudioSpecific & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagAudioSpecific);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagAudioSpecific(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagImageSpecific : public EbmlMaster {
+       public:
+               KaxTagImageSpecific();
+               KaxTagImageSpecific(const KaxTagImageSpecific & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagImageSpecific);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagImageSpecific(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagTargetTypeValue : public EbmlUInteger {
+       public:
+               KaxTagTargetTypeValue() :EbmlUInteger(50) {}
+               KaxTagTargetTypeValue(const KaxTagTargetTypeValue & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagTargetTypeValue);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagTargetTypeValue(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagTargetType : public EbmlString {
+       public:
+               KaxTagTargetType() {}
+               KaxTagTargetType(const KaxTagTargetType & ElementToClone) :EbmlString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagTargetType);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagTargetType(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagTrackUID : public EbmlUInteger {
+       public:
+               KaxTagTrackUID() :EbmlUInteger(0) {}
+               KaxTagTrackUID(const KaxTagTrackUID & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagTrackUID);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagTrackUID(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagEditionUID : public EbmlUInteger {
+       public:
+               KaxTagEditionUID() :EbmlUInteger(0) {}
+               KaxTagEditionUID(const KaxTagEditionUID & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagEditionUID);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagEditionUID(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagChapterUID : public EbmlUInteger {
+       public:
+               KaxTagChapterUID() :EbmlUInteger(0) {}
+               KaxTagChapterUID(const KaxTagChapterUID & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagChapterUID);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagChapterUID(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagAttachmentUID : public EbmlUInteger {
+       public:
+               KaxTagAttachmentUID() :EbmlUInteger(0) {}
+               KaxTagAttachmentUID(const KaxTagAttachmentUID & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagAttachmentUID);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagAttachmentUID(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagArchivalLocation : public EbmlUnicodeString {
+       public:
+               KaxTagArchivalLocation() {}
+               KaxTagArchivalLocation(const KaxTagArchivalLocation & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagArchivalLocation);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagArchivalLocation(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagAudioEncryption : public EbmlBinary {
+       public:
+               KaxTagAudioEncryption() {}
+               KaxTagAudioEncryption(const KaxTagAudioEncryption & ElementToClone) :EbmlBinary(ElementToClone){}
+               static EbmlElement & Create() {return *(new KaxTagAudioEncryption);}
+               bool ValidateSize() const {return true;} // we don't mind about what's inside
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagAudioEncryption(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagAudioGain : public EbmlFloat {
+       public:
+               KaxTagAudioGain() {}
+               KaxTagAudioGain(const KaxTagAudioGain & ElementToClone) :EbmlFloat(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagAudioGain);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagAudioGain(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagAudioGenre : public EbmlString {
+       public:
+               KaxTagAudioGenre() {}
+               KaxTagAudioGenre(const KaxTagAudioGenre & ElementToClone) :EbmlString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagAudioGenre);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagAudioGenre(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagAudioPeak : public EbmlFloat {
+       public:
+               KaxTagAudioPeak() {}
+               KaxTagAudioPeak(const KaxTagAudioPeak & ElementToClone) :EbmlFloat(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagAudioPeak);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagAudioPeak(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagBibliography : public EbmlUnicodeString {
+       public:
+               KaxTagBibliography() {}
+               KaxTagBibliography(const KaxTagBibliography & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagBibliography);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagBibliography(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagBPM : public EbmlFloat {
+       public:
+               KaxTagBPM() {}
+               KaxTagBPM(const KaxTagBPM & ElementToClone) :EbmlFloat(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagBPM);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagBPM(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagCaptureDPI : public EbmlUInteger {
+       public:
+               KaxTagCaptureDPI() {}
+               KaxTagCaptureDPI(const KaxTagCaptureDPI & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagCaptureDPI);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagCaptureDPI(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagCaptureLightness : public EbmlBinary {
+       public:
+               KaxTagCaptureLightness() {}
+               KaxTagCaptureLightness(const KaxTagCaptureLightness & ElementToClone) :EbmlBinary(ElementToClone){}
+               static EbmlElement & Create() {return *(new KaxTagCaptureLightness);}
+               bool ValidateSize() const {return true;} // we don't mind about what's inside
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagCaptureLightness(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagCapturePaletteSetting : public EbmlUInteger {
+       public:
+               KaxTagCapturePaletteSetting() {}
+               KaxTagCapturePaletteSetting(const KaxTagCapturePaletteSetting & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagCapturePaletteSetting);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagCapturePaletteSetting(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagCaptureSharpness : public EbmlBinary {
+       public:
+               KaxTagCaptureSharpness() {}
+               KaxTagCaptureSharpness(const KaxTagCaptureSharpness & ElementToClone) :EbmlBinary(ElementToClone){}
+               static EbmlElement & Create() {return *(new KaxTagCaptureSharpness);}
+               bool ValidateSize() const {return true;} // we don't mind about what's inside
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagCaptureSharpness(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagCropped : public EbmlUnicodeString {
+       public:
+               KaxTagCropped() {}
+               KaxTagCropped(const KaxTagCropped & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagCropped);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagCropped(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagDiscTrack : public EbmlUInteger {
+       public:
+               KaxTagDiscTrack() {}
+               KaxTagDiscTrack(const KaxTagDiscTrack & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagDiscTrack);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagDiscTrack(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagEncoder : public EbmlUnicodeString {
+       public:
+               KaxTagEncoder() {}
+               KaxTagEncoder(const KaxTagEncoder & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagEncoder);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagEncoder(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagEncodeSettings : public EbmlUnicodeString {
+       public:
+               KaxTagEncodeSettings() {}
+               KaxTagEncodeSettings(const KaxTagEncodeSettings & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagEncodeSettings);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagEncodeSettings(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagEqualisation : public EbmlBinary {
+       public:
+               KaxTagEqualisation() {}
+               KaxTagEqualisation(const KaxTagEqualisation & ElementToClone) :EbmlBinary(ElementToClone){}
+               static EbmlElement & Create() {return *(new KaxTagEqualisation);}
+               bool ValidateSize() const {return true;} // we don't mind about what's inside
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagEqualisation(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagFile : public EbmlUnicodeString {
+       public:
+               KaxTagFile() {}
+               KaxTagFile(const KaxTagFile & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagFile);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagFile(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagInitialKey : public EbmlString {
+       public:
+               KaxTagInitialKey() {}
+               KaxTagInitialKey(const KaxTagInitialKey & ElementToClone) :EbmlString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagInitialKey);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagInitialKey(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagKeywords : public EbmlUnicodeString {
+       public:
+               KaxTagKeywords() {}
+               KaxTagKeywords(const KaxTagKeywords & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagKeywords);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagKeywords(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagLanguage : public EbmlString {
+       public:
+               KaxTagLanguage() {}
+               KaxTagLanguage(const KaxTagLanguage & ElementToClone) :EbmlString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagLanguage);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagLanguage(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagLength : public EbmlUInteger {
+       public:
+               KaxTagLength() {}
+               KaxTagLength(const KaxTagLength & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagLength);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagLength(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMood : public EbmlUnicodeString {
+       public:
+               KaxTagMood() {}
+               KaxTagMood(const KaxTagMood & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMood);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMood(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagOfficialAudioFileURL : public EbmlString {
+       public:
+               KaxTagOfficialAudioFileURL() {}
+               KaxTagOfficialAudioFileURL(const KaxTagOfficialAudioFileURL & ElementToClone) :EbmlString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagOfficialAudioFileURL);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagOfficialAudioFileURL(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagOfficialAudioSourceURL : public EbmlString {
+       public:
+               KaxTagOfficialAudioSourceURL() {}
+               KaxTagOfficialAudioSourceURL(const KaxTagOfficialAudioSourceURL & ElementToClone) :EbmlString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagOfficialAudioSourceURL);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagOfficialAudioSourceURL(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagOriginalDimensions : public EbmlString {
+       public:
+               KaxTagOriginalDimensions() {}
+               KaxTagOriginalDimensions(const KaxTagOriginalDimensions & ElementToClone) :EbmlString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagOriginalDimensions);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagOriginalDimensions(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagOriginalMediaType : public EbmlUnicodeString {
+       public:
+               KaxTagOriginalMediaType() {}
+               KaxTagOriginalMediaType(const KaxTagOriginalMediaType & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagOriginalMediaType);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagOriginalMediaType(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagPlayCounter : public EbmlUInteger {
+       public:
+               KaxTagPlayCounter() {}
+               KaxTagPlayCounter(const KaxTagPlayCounter & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagPlayCounter);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagPlayCounter(*this);}
+};                      
+
+class MATROSKA_DLL_API KaxTagPlaylistDelay : public EbmlUInteger {
+       public:
+               KaxTagPlaylistDelay() {}
+               KaxTagPlaylistDelay(const KaxTagPlaylistDelay & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagPlaylistDelay);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagPlaylistDelay(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagPopularimeter : public EbmlSInteger {
+       public:
+               KaxTagPopularimeter() {}
+               KaxTagPopularimeter(const KaxTagPopularimeter & ElementToClone) :EbmlSInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagPopularimeter);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagPopularimeter(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagProduct : public EbmlUnicodeString {
+       public:
+               KaxTagProduct() {}
+               KaxTagProduct(const KaxTagProduct & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagProduct);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagProduct(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagRating : public EbmlBinary {
+       public:
+               KaxTagRating() {}
+               KaxTagRating(const KaxTagRating & ElementToClone) :EbmlBinary(ElementToClone){}
+               static EbmlElement & Create() {return *(new KaxTagRating);}
+               bool ValidateSize() const {return true;} // we don't mind about what's inside
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagRating(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagRecordLocation : public EbmlString {
+       public:
+               KaxTagRecordLocation() {}
+               KaxTagRecordLocation(const KaxTagRecordLocation & ElementToClone) :EbmlString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagRecordLocation);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagRecordLocation(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagSetPart : public EbmlUInteger {
+       public:
+               KaxTagSetPart() {}
+               KaxTagSetPart(const KaxTagSetPart & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagSetPart);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagSetPart(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagSource : public EbmlUnicodeString {
+       public:
+               KaxTagSource() {}
+               KaxTagSource(const KaxTagSource & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagSource);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagSource(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagSourceForm : public EbmlUnicodeString {
+       public:
+               KaxTagSourceForm() {}
+               KaxTagSourceForm(const KaxTagSourceForm & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagSourceForm);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagSourceForm(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagSubGenre : public EbmlString {
+       public:
+               KaxTagSubGenre() {}
+               KaxTagSubGenre(const KaxTagSubGenre & ElementToClone) :EbmlString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagSubGenre);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagSubGenre(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagSubject : public EbmlUnicodeString {
+       public:
+               KaxTagSubject() {}
+               KaxTagSubject(const KaxTagSubject & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagSubject);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagSubject(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagUnsynchronisedText : public EbmlUnicodeString {
+       public:
+               KaxTagUnsynchronisedText() {}
+               KaxTagUnsynchronisedText(const KaxTagUnsynchronisedText & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagUnsynchronisedText);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagUnsynchronisedText(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagUserDefinedURL : public EbmlString {
+       public:
+               KaxTagUserDefinedURL() {}
+               KaxTagUserDefinedURL(const KaxTagUserDefinedURL & ElementToClone) :EbmlString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagUserDefinedURL);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagUserDefinedURL(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagVideoGenre : public EbmlBinary {
+       public:
+               KaxTagVideoGenre() {}
+               KaxTagVideoGenre(const KaxTagVideoGenre & ElementToClone) :EbmlBinary(ElementToClone){}
+               static EbmlElement & Create() {return *(new KaxTagVideoGenre);}
+               bool ValidateSize() const {return (Size >= 2);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagVideoGenre(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagSimple : public EbmlMaster {
+       public:
+               KaxTagSimple();
+               KaxTagSimple(const KaxTagSimple & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagSimple);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagSimple(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagName : public EbmlUnicodeString {
+       public:
+               KaxTagName() {}
+               KaxTagName(const KaxTagName & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagName);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagName(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagLangue : public EbmlString {
+       public:
+               KaxTagLangue(): EbmlString("und") {}
+               KaxTagLangue(const KaxTagLangue & ElementToClone) :EbmlString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagLangue);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagLangue(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagDefault : public EbmlUInteger {
+       public:
+               KaxTagDefault() :EbmlUInteger(1) {}
+               KaxTagDefault(const KaxTagTrackUID & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagDefault);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagDefault(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagString : public EbmlUnicodeString {
+       public:
+               KaxTagString() {}
+               KaxTagString(const KaxTagString & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagString);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagString(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagBinary : public EbmlBinary {
+       public:
+               KaxTagBinary() {}
+               KaxTagBinary(const KaxTagBinary & ElementToClone) :EbmlBinary(ElementToClone){}
+               static EbmlElement & Create() {return *(new KaxTagBinary);}
+               bool ValidateSize() const {return (Size >= 0);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagBinary(*this);}
+};
+
+END_LIBMATROSKA_NAMESPACE
+
+#endif // LIBMATROSKA_TAG_H
diff --git a/matroska/KaxTagMulti.h b/matroska/KaxTagMulti.h
new file mode 100644 (file)
index 0000000..3a4d99b
--- /dev/null
@@ -0,0 +1,745 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class MATROSKA_DLL_API description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxTagMulti.h,v 1.9 2004/04/14 23:26:17 robux4 Exp $
+       \author Jory Stone     <jcsston @ toughguy.net>
+       \author Steve Lhomme   <robux4 @ users.sf.net>
+*/
+#ifndef LIBMATROSKA_TAGMULTI_H
+#define LIBMATROSKA_TAGMULTI_H
+
+#include "matroska/KaxTypes.h"
+#include "ebml/EbmlMaster.h"
+#include "ebml/EbmlDate.h"
+#include "ebml/EbmlFloat.h"
+#include "ebml/EbmlSInteger.h"
+#include "ebml/EbmlUInteger.h"
+#include "ebml/EbmlString.h"
+#include "ebml/EbmlUnicodeString.h"
+#include "ebml/EbmlBinary.h"
+
+using namespace LIBEBML_NAMESPACE;
+
+START_LIBMATROSKA_NAMESPACE
+
+enum KaxTagMultiCommercialTypes {
+       KaxTagMultiCommercialType_FilePurchase = 1, //Information on where to purchase this file. This is akin to the WPAY tag in ID3.
+       KaxTagMultiCommercialType_ItemPurchase, //Information on where to purchase this album. This is akin to the WCOM tag in ID3.
+       KaxTagMultiCommercialType_Owner  //Information on the purchase that occurred for this file. This is akin to the OWNE tag in ID3.
+};
+enum KaxTagMultiDateTypes {
+       KaxTagMultiDateType_EncodingDate = 1, //The time that the encoding of this item was completed. This is akin to the TDEN tag in ID3.
+       KaxTagMultiDateType_RecordingDate, //The time that the recording began, and finished. This is akin to the TDRC tag in ID3.
+       KaxTagMultiDateType_ReleaseDate, //The time that the item was originaly released. This is akin to the TDRL tag in ID3.
+       KaxTagMultiDateType_OriginalReleaseDate, //The time that the item was originaly released if it is a remake. This is akin to the TDOR tag in ID3.
+       KaxTagMultiDateType_TaggingDate, //The time that the tags were done for this item. This is akin to the TDTG tag in ID3.
+       KaxTagMultiDateType_DigitizingDate  //The time that the item was tranfered to a digital medium. This is akin to the IDIT tag in RIFF
+};
+enum KaxTagMultiEntitiesTypes {
+       KaxTagMultiEntitiesType_LyricistTextWriter = 1, //The person that wrote the words/script for this item. This is akin to the TEXT tag in ID3.
+       KaxTagMultiEntitiesType_Composer, //The name of the composer of this item. This is akin to the TCOM tag in ID3.
+       KaxTagMultiEntitiesType_LeadPerformerSoloist, //This is akin to the TPE1 tag in ID3.
+       KaxTagMultiEntitiesType_BandOrchestraAccompaniment, //This is akin to the TPE2 tag in ID3.
+       KaxTagMultiEntitiesType_OriginalLyricistTextWriter, //This is akin to the TOLY tag in ID3.
+       KaxTagMultiEntitiesType_OriginalArtistPerformer, //This is akin to the TOPE tag in ID3.
+       KaxTagMultiEntitiesType_OriginalAlbumMovieShowTitle, //This is akin to the TOAL tag in ID3.
+       KaxTagMultiEntitiesType_ConductorPerformerRefinement, //This is akin to the TPE3 tag in ID3.
+       KaxTagMultiEntitiesType_InterpretedRemixedBy, //This is akin to the TPE4 tag in ID3.
+       KaxTagMultiEntitiesType_Director, //This is akin to the IART tag in RIFF
+       KaxTagMultiEntitiesType_ProducedBy, //This is akin to the IPRO tag in Extended RIFF
+       KaxTagMultiEntitiesType_Cinematographer, //This is akin to the ICNM tag in Extended RIFF
+       KaxTagMultiEntitiesType_ProductionDesigner, //This is akin to the IPDS tag in Extended RIFF
+       KaxTagMultiEntitiesType_CostumeDesigner, //This is akin to the ICDS tag in Extended RIFF
+       KaxTagMultiEntitiesType_ProductionStudio, //This is akin to the ISTD tag in Extended RIFF
+       KaxTagMultiEntitiesType_DistributedBy, //This is akin to the IDST tag in Extended RIFF
+       KaxTagMultiEntitiesType_CommissionedBy, //This is akin to the ICMS tag in RIFF
+       KaxTagMultiEntitiesType_Engineer, //This is akin to the IENG tag in RIFF
+       KaxTagMultiEntitiesType_EditedBy, //This is akin to the IEDT tag in Extended RIFF
+       KaxTagMultiEntitiesType_EncodedBy, //This is akin to the TENC tag in ID3.
+       KaxTagMultiEntitiesType_RippedBy, //This is akin to the IRIP tag in Extended RIFF
+       KaxTagMultiEntitiesType_InvolvedPeopleList, //A very general tag for everyone else that wants to be listed. This is akin to the TMCL tag in ID3.
+       KaxTagMultiEntitiesType_InternetRadioStationName, //This is akin to the TSRN tag in ID3.
+       KaxTagMultiEntitiesType_Publisher  //This is akin to the TPUB tag in ID3.
+};
+
+enum KaxTagMultiIdentifierTypes {
+       KaxTagMultiIdentifierType_ISRC = 1, //String, The International Standard Recording Code
+       KaxTagMultiIdentifierType_CDIdentifier, //Binary, This is a binary dump of the TOC of the CDROM that this item was taken from. This holds the same information as the MCDI in ID3.
+       KaxTagMultiIdentifierType_ISBN, //String, International Standard Book Number
+       KaxTagMultiIdentifierType_Catalog, //String, sometimes the EAN/UPC, often some letters followed by some numbers
+       KaxTagMultiIdentifierType_EAN, //String, EAN-13 bar code identifier
+       KaxTagMultiIdentifierType_UPC, //String, UPC-A bar code identifier
+       KaxTagMultiIdentifierType_LabelCode, //String, Typically printed as ________ (LC) xxxx) ~~~~~~~~ or _________ (LC) 0xxxx) ~~~~~~~~~ on CDs medias or covers, where xxxx is a 4-digit number.
+       KaxTagMultiIdentifierType_LCCN, //String, Library of Congress Control Number
+       KaxTagMultiIdentifierType_UniqueFileIdentifier, //Binary, This used for a dump of the UFID field in ID3. This field would only be used if the item was pulled from an MP3.
+       CDROM_CD_TEXT_PACK_TOC_INFO2  //Binary
+};
+
+enum KaxTagMultiLegalTypes {
+       KaxTagMultiLegalType_Copyright = 1, //The copyright information as per the copyright holder. This is akin to the TCOP tag in ID3.
+       KaxTagMultiLegalType_ProductionCopyright, //The copyright information as per the production copyright holder. This is akin to the TPRO tag in ID3.
+       KaxTagMultiLegalType_TermsOfUse  //The terms of use for this item. This is akin to the USER tag in ID3.
+};
+
+enum KaxTagMultiTitleTypes {
+       KaxTagMultiTitleType_TrackTitle = 1,
+               //The title of this item. In the case of a track, the Name element should be identical to the Name element.
+               //For example, for music you might label this "Canon in D", or for video's audio track you might use "English 5.1" This is akin to the TIT2 tag in ID3.
+       KaxTagMultiTitleType_AlbumMovieShowTitle,
+               //This is the name given to a grouping of tracks and/or chapters. 
+               //For example, all video, audio, and subtitle tracks for a movie would be grouped under this and be given the name of the movie. 
+               //All tracks for a particular CD would be grouped together under the title of the CD, or if all tracks for a CD were recorded as a single track, seperated by chapters, the same would apply.
+               //You could use this to label episode 3 of The Simpsons. This is akin to the TALB tag in ID3.
+       KaxTagMultiTitleType_SetTitle,  //This would be used to label a set of ID 2. For example, season 13 of The Simpsons.
+       KaxTagMultiTitleType_Series  //This would be used to label a set of ID 3. For example, The Simpsons.
+};
+
+class MATROSKA_DLL_API KaxTagMultiComment : public EbmlMaster {
+       public:
+               KaxTagMultiComment();
+               KaxTagMultiComment(const KaxTagMultiComment & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiComment);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiComment(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiCommentName : public EbmlString {
+       public:
+               KaxTagMultiCommentName() {}
+               KaxTagMultiCommentName(const KaxTagMultiCommentName & ElementToClone) :EbmlString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiCommentName);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiCommentName(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiCommentComments : public EbmlUnicodeString {
+       public:
+               KaxTagMultiCommentComments() {}
+               KaxTagMultiCommentComments(const KaxTagMultiCommentComments & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiCommentComments);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiCommentComments(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiCommentLanguage : public EbmlString {
+       public:
+               KaxTagMultiCommentLanguage() {}
+               KaxTagMultiCommentLanguage(const KaxTagMultiCommentLanguage & ElementToClone) :EbmlString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiCommentLanguage);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiCommentLanguage(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiCommercial : public EbmlMaster {
+       public:
+               KaxTagMultiCommercial();
+               KaxTagMultiCommercial(const KaxTagMultiCommercial & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiCommercial);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiCommercial(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagCommercial : public EbmlMaster {
+       public:
+               KaxTagCommercial();
+               KaxTagCommercial(const KaxTagCommercial & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagCommercial);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagCommercial(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiCommercialType : public EbmlUInteger {
+       public:
+               KaxTagMultiCommercialType() {}
+               KaxTagMultiCommercialType(const KaxTagMultiCommercialType & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiCommercialType);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiCommercialType(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiCommercialAddress : public EbmlUnicodeString {
+       public:
+               KaxTagMultiCommercialAddress() {}
+               KaxTagMultiCommercialAddress(const KaxTagMultiCommercialAddress & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiCommercialAddress);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiCommercialAddress(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiCommercialURL : public EbmlString {
+       public:
+               KaxTagMultiCommercialURL() {}
+               KaxTagMultiCommercialURL(const KaxTagMultiCommercialURL & ElementToClone) :EbmlString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiCommercialURL);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiCommercialURL(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiCommercialEmail : public EbmlString {
+       public:
+               KaxTagMultiCommercialEmail() {}
+               KaxTagMultiCommercialEmail(const KaxTagMultiCommercialEmail & ElementToClone) :EbmlString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiCommercialEmail);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiCommercialEmail(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiPrice : public EbmlMaster {
+       public:
+               KaxTagMultiPrice();
+               KaxTagMultiPrice(const KaxTagMultiPrice & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiPrice);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiPrice(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiPriceCurrency : public EbmlString {
+       public:
+               KaxTagMultiPriceCurrency() {}
+               KaxTagMultiPriceCurrency(const KaxTagMultiPriceCurrency & ElementToClone) :EbmlString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiPriceCurrency);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiPriceCurrency(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiPriceAmount : public EbmlFloat {
+       public:
+               KaxTagMultiPriceAmount() :EbmlFloat() {}
+               KaxTagMultiPriceAmount(const KaxTagMultiPriceAmount & ElementToClone) :EbmlFloat(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiPriceAmount);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiPriceAmount(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiPricePriceDate : public EbmlDate {
+       public:
+               KaxTagMultiPricePriceDate() :EbmlDate() {}
+               KaxTagMultiPricePriceDate(const KaxTagMultiPricePriceDate & ElementToClone) :EbmlDate(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiPricePriceDate);}                
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiPricePriceDate(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiDate : public EbmlMaster {
+       public:
+               KaxTagMultiDate();
+               KaxTagMultiDate(const KaxTagMultiDate & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiDate);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiDate(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagDate : public EbmlMaster {
+       public:
+               KaxTagDate();
+               KaxTagDate(const KaxTagDate & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagDate);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagDate(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiDateType : public EbmlUInteger {
+       public:
+               KaxTagMultiDateType() {}
+               KaxTagMultiDateType(const KaxTagMultiDateType & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiDateType);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiDateType(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiDateDateBegin : public EbmlDate {
+       public:
+               KaxTagMultiDateDateBegin() :EbmlDate() {}
+               KaxTagMultiDateDateBegin(const KaxTagMultiDateDateBegin & ElementToClone) :EbmlDate(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiDateDateBegin);}         
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiDateDateBegin(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiDateDateEnd : public EbmlDate {
+       public:
+               KaxTagMultiDateDateEnd() :EbmlDate() {}
+               KaxTagMultiDateDateEnd(const KaxTagMultiDateDateEnd & ElementToClone) :EbmlDate(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiDateDateEnd);}           
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiDateDateEnd(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiEntity : public EbmlMaster {
+       public:
+               KaxTagMultiEntity();
+               KaxTagMultiEntity(const KaxTagMultiEntity & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiEntity);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiEntity(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagEntity : public EbmlMaster {
+       public:
+               KaxTagEntity();
+               KaxTagEntity(const KaxTagEntity & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagEntity);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagEntity(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiEntityType : public EbmlUInteger {
+       public:
+               KaxTagMultiEntityType() {}
+               KaxTagMultiEntityType(const KaxTagMultiEntityType & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiEntityType);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiEntityType(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiEntityName : public EbmlUnicodeString {
+       public:
+               KaxTagMultiEntityName() {}
+               KaxTagMultiEntityName(const KaxTagMultiEntityName & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiEntityName);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiEntityName(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiEntityAddress : public EbmlUnicodeString {
+       public:
+               KaxTagMultiEntityAddress() {}
+               KaxTagMultiEntityAddress(const KaxTagMultiEntityAddress & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiEntityAddress);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiEntityAddress(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiEntityURL : public EbmlString {
+       public:
+               KaxTagMultiEntityURL() {}
+               KaxTagMultiEntityURL(const KaxTagMultiEntityURL & ElementToClone) :EbmlString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiEntityURL);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiEntityURL(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiEntityEmail : public EbmlString {
+       public:
+               KaxTagMultiEntityEmail() {}
+               KaxTagMultiEntityEmail(const KaxTagMultiEntityEmail & ElementToClone) :EbmlString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiEntityEmail);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiEntityEmail(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiIdentifier : public EbmlMaster {
+       public:
+               KaxTagMultiIdentifier();
+               KaxTagMultiIdentifier(const KaxTagMultiIdentifier & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiIdentifier);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiIdentifier(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagIdentifier : public EbmlMaster {
+       public:
+               KaxTagIdentifier();
+               KaxTagIdentifier(const KaxTagIdentifier & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagIdentifier);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagIdentifier(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiIdentifierType : public EbmlUInteger {
+       public:
+               KaxTagMultiIdentifierType() {}
+               KaxTagMultiIdentifierType(const KaxTagMultiIdentifierType & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiIdentifierType);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiIdentifierType(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiIdentifierBinary : public EbmlBinary {
+       public:
+               KaxTagMultiIdentifierBinary() {}
+               KaxTagMultiIdentifierBinary(const KaxTagMultiIdentifierBinary & ElementToClone) :EbmlBinary(ElementToClone){}
+               static EbmlElement & Create() {return *(new KaxTagMultiIdentifierBinary);}
+               bool ValidateSize() const {return true;} // we don't mind about what's inside
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiIdentifierBinary(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiIdentifierString : public EbmlUnicodeString {
+       public:
+               KaxTagMultiIdentifierString() {}
+               KaxTagMultiIdentifierString(const KaxTagMultiIdentifierString & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiIdentifierString);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiIdentifierString(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiLegal : public EbmlMaster {
+       public:
+               KaxTagMultiLegal();
+               KaxTagMultiLegal(const KaxTagMultiLegal & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiLegal);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiLegal(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagLegal : public EbmlMaster {
+       public:
+               KaxTagLegal();
+               KaxTagLegal(const KaxTagLegal & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagLegal);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagLegal(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiLegalType : public EbmlUInteger {
+       public:
+               KaxTagMultiLegalType() {}
+               KaxTagMultiLegalType(const KaxTagMultiLegalType & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiLegalType);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiLegalType(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiLegalContent : public EbmlUnicodeString {
+       public:
+               KaxTagMultiLegalContent() {}
+               KaxTagMultiLegalContent(const KaxTagMultiLegalContent & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiLegalContent);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiLegalContent(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiLegalURL : public EbmlString {
+       public:
+               KaxTagMultiLegalURL() {}
+               KaxTagMultiLegalURL(const KaxTagMultiLegalURL & ElementToClone) :EbmlString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiLegalURL);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiLegalURL(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiLegalAddress : public EbmlUnicodeString {
+       public:
+               KaxTagMultiLegalAddress() {}
+               KaxTagMultiLegalAddress(const KaxTagMultiLegalAddress & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiLegalAddress);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiLegalAddress(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiTitle : public EbmlMaster {
+       public:
+               KaxTagMultiTitle();
+               KaxTagMultiTitle(const KaxTagMultiTitle & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiTitle);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiTitle(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagTitle : public EbmlMaster {
+       public:
+               KaxTagTitle();
+               KaxTagTitle(const KaxTagTitle & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagTitle);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagTitle(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiTitleType : public EbmlUInteger {
+       public:
+               KaxTagMultiTitleType() {}
+               KaxTagMultiTitleType(const KaxTagMultiTitleType & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiTitleType);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiTitleType(*this);}
+};
+
+
+class MATROSKA_DLL_API KaxTagMultiTitleName : public EbmlUnicodeString {
+       public:
+               KaxTagMultiTitleName() {}
+               KaxTagMultiTitleName(const KaxTagMultiTitleName & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiTitleName);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiTitleName(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiTitleSubTitle : public EbmlUnicodeString {
+       public:
+               KaxTagMultiTitleSubTitle() {}
+               KaxTagMultiTitleSubTitle(const KaxTagMultiTitleSubTitle & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiTitleSubTitle);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiTitleSubTitle(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiTitleEdition : public EbmlUnicodeString {
+       public:
+               KaxTagMultiTitleEdition() {}
+               KaxTagMultiTitleEdition(const KaxTagMultiTitleEdition & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiTitleEdition);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiTitleEdition(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiTitleAddress : public EbmlUnicodeString {
+       public:
+               KaxTagMultiTitleAddress() {}
+               KaxTagMultiTitleAddress(const KaxTagMultiTitleAddress & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiTitleAddress);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiTitleAddress(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiTitleURL : public EbmlString {
+       public:
+               KaxTagMultiTitleURL() {}
+               KaxTagMultiTitleURL(const KaxTagMultiTitleURL & ElementToClone) :EbmlString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiTitleURL);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiTitleURL(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiTitleEmail : public EbmlString {
+       public:
+               KaxTagMultiTitleEmail() {}
+               KaxTagMultiTitleEmail(const KaxTagMultiTitleEmail & ElementToClone) :EbmlString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiTitleEmail);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiTitleEmail(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiTitleLanguage : public EbmlString {
+       public:
+               KaxTagMultiTitleLanguage() {}
+               KaxTagMultiTitleLanguage(const KaxTagMultiTitleLanguage & ElementToClone) :EbmlString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiTitleLanguage);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiTitleLanguage(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagMultiAttachment : public EbmlMaster {
+       public:
+               KaxTagMultiAttachment();
+               KaxTagMultiAttachment(const KaxTagMultiAttachment & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagMultiAttachment);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagMultiAttachment(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagAttachment : public EbmlMaster {
+       public:
+               KaxTagAttachment();
+               KaxTagAttachment(const KaxTagAttachment & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagAttachment);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagAttachment(*this);}
+};
+
+class MATROSKA_DLL_API KaxTagAttachmentID : public EbmlUInteger {
+       public:
+               KaxTagAttachmentID() {}
+               KaxTagAttachmentID(const KaxTagAttachmentID & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTagAttachmentID);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTagAttachmentID(*this);}
+};
+
+/*
+class MATROSKA_DLL_API KaxTagBPM : public EbmlFloat {
+       public:
+               KaxTagBPM() :EbmlFloat() {}
+               static EbmlElement & Create() {return *(new KaxTagBPM);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+};
+
+class MATROSKA_DLL_API KaxTagPopularimeter : public EbmlSInteger {
+       public:
+               KaxTagPopularimeter() {}
+               static EbmlElement & Create() {return *(new KaxTagPopularimeter);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+};
+
+class MATROSKA_DLL_API KaxTagRating : public EbmlBinary {
+       public:
+               KaxTagRating() {}
+               static EbmlElement & Create() {return *(new KaxTagRating);}
+               bool ValidateSize() const {return true;} // we don't mind about what's inside
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+};
+
+class MATROSKA_DLL_API KaxTagSetPart : public EbmlUInteger {
+       public:
+               KaxTagSetPart() {}
+               static EbmlElement & Create() {return *(new KaxTagSetPart);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+};
+
+class MATROSKA_DLL_API KaxTagUserDefinedURL : public EbmlString {
+       public:
+               KaxTagUserDefinedURL() {}
+               static EbmlElement & Create() {return *(new KaxTagUserDefinedURL);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+};
+
+class MATROSKA_DLL_API KaxTagVideoSecondaryGenre : public EbmlBinary {
+       public:
+               KaxTagVideoSecondaryGenre() {}
+               static EbmlElement & Create() {return *(new KaxTagVideoSecondaryGenre);}
+               bool ValidateSize() const {return (Size >= 4);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+};
+
+class MATROSKA_DLL_API KaxWritingApp : public EbmlUnicodeString {
+       public:
+               KaxWritingApp() {}
+               static EbmlElement & Create() {return *(new KaxWritingApp);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+};*/
+
+END_LIBMATROSKA_NAMESPACE
+
+#endif // LIBMATROSKA_TAGMULTI_H
diff --git a/matroska/KaxTags.h b/matroska/KaxTags.h
new file mode 100644 (file)
index 0000000..f6c4375
--- /dev/null
@@ -0,0 +1,58 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class MATROSKA_DLL_API description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxTags.h,v 1.7 2004/04/14 23:26:17 robux4 Exp $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#ifndef LIBMATROSKA_TAGS_H
+#define LIBMATROSKA_TAGS_H
+
+#include "matroska/KaxTypes.h"
+#include "ebml/EbmlMaster.h"
+
+using namespace LIBEBML_NAMESPACE;
+
+START_LIBMATROSKA_NAMESPACE
+
+class MATROSKA_DLL_API KaxTags : public EbmlMaster {
+       public:
+               KaxTags();
+               KaxTags(const KaxTags & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTags);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTags(*this);}
+};
+
+END_LIBMATROSKA_NAMESPACE
+
+#endif // LIBMATROSKA_TAGS_H
diff --git a/matroska/KaxTrackAudio.h b/matroska/KaxTrackAudio.h
new file mode 100644 (file)
index 0000000..ffbe259
--- /dev/null
@@ -0,0 +1,119 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class MATROSKA_DLL_API description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxTrackAudio.h,v 1.11 2004/04/14 23:26:17 robux4 Exp $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#ifndef LIBMATROSKA_TRACK_AUDIO_H
+#define LIBMATROSKA_TRACK_AUDIO_H
+
+#include "matroska/KaxTypes.h"
+#include "ebml/EbmlMaster.h"
+#include "ebml/EbmlFloat.h"
+#include "ebml/EbmlUInteger.h"
+#include "ebml/EbmlBinary.h"
+
+using namespace LIBEBML_NAMESPACE;
+
+START_LIBMATROSKA_NAMESPACE
+
+class MATROSKA_DLL_API KaxTrackAudio : public EbmlMaster {
+       public:
+               KaxTrackAudio();
+               KaxTrackAudio(const KaxTrackAudio & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTrackAudio);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTrackAudio(*this);}
+};
+
+class MATROSKA_DLL_API KaxAudioSamplingFreq : public EbmlFloat {
+       public:
+               KaxAudioSamplingFreq() :EbmlFloat(8000.0) {}
+               KaxAudioSamplingFreq(const KaxAudioSamplingFreq & ElementToClone) :EbmlFloat(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxAudioSamplingFreq);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxAudioSamplingFreq(*this);}
+};
+
+class MATROSKA_DLL_API KaxAudioOutputSamplingFreq : public EbmlFloat {
+       public:
+               KaxAudioOutputSamplingFreq() :EbmlFloat() {}
+               KaxAudioOutputSamplingFreq(const KaxAudioOutputSamplingFreq & ElementToClone) :EbmlFloat(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxAudioOutputSamplingFreq);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxAudioOutputSamplingFreq(*this);}
+};
+
+class MATROSKA_DLL_API KaxAudioChannels : public EbmlUInteger {
+       public:
+               KaxAudioChannels() :EbmlUInteger(1) {}
+               KaxAudioChannels(const KaxAudioChannels & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxAudioChannels);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxAudioChannels(*this);}
+};
+
+#if MATROSKA_VERSION >= 2
+class MATROSKA_DLL_API KaxAudioPosition : public EbmlBinary {
+       public:
+               KaxAudioPosition() {}
+               KaxAudioPosition(const KaxAudioPosition & ElementToClone) :EbmlBinary(ElementToClone){}
+               static EbmlElement & Create() {return *(new KaxAudioPosition);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               bool ValidateSize(void) const {return true;}
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxAudioPosition(*this);}
+};
+#endif // MATROSKA_VERSION
+
+class MATROSKA_DLL_API KaxAudioBitDepth : public EbmlUInteger {
+       public:
+               KaxAudioBitDepth() {}
+               KaxAudioBitDepth(const KaxAudioBitDepth & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxAudioBitDepth);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxAudioBitDepth(*this);}
+};
+
+END_LIBMATROSKA_NAMESPACE
+
+#endif // LIBMATROSKA_TRACK_AUDIO_H
diff --git a/matroska/KaxTrackEntryData.h b/matroska/KaxTrackEntryData.h
new file mode 100644 (file)
index 0000000..0203ac8
--- /dev/null
@@ -0,0 +1,357 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxTrackEntryData.h,v 1.9 2004/04/14 23:26:17 robux4 Exp $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+       \author John Cannon      <spyder2555 @ users.sf.net>
+*/
+#ifndef LIBMATROSKA_TRACK_ENTRY_DATA_H
+#define LIBMATROSKA_TRACK_ENTRY_DATA_H
+
+#include "matroska/KaxTypes.h"
+#include "ebml/EbmlUInteger.h"
+#include "ebml/EbmlFloat.h"
+#include "ebml/EbmlString.h"
+#include "ebml/EbmlUnicodeString.h"
+#include "ebml/EbmlBinary.h"
+#include "ebml/EbmlMaster.h"
+
+using namespace LIBEBML_NAMESPACE;
+
+START_LIBMATROSKA_NAMESPACE
+
+class MATROSKA_DLL_API KaxTrackNumber : public EbmlUInteger {
+       public:
+               KaxTrackNumber() {}
+               KaxTrackNumber(const KaxTrackNumber & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTrackNumber);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTrackNumber(*this);}
+};
+
+class MATROSKA_DLL_API KaxTrackUID : public EbmlUInteger {
+       public:
+               KaxTrackUID() {}
+               KaxTrackUID(const KaxTrackUID & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTrackUID);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTrackUID(*this);}
+};
+
+class MATROSKA_DLL_API KaxTrackType : public EbmlUInteger {
+       public:
+               KaxTrackType() {}
+               KaxTrackType(const KaxTrackType & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTrackType);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTrackType(*this);}
+};
+
+#if MATROSKA_VERSION >= 2
+class MATROSKA_DLL_API KaxTrackFlagEnabled : public EbmlUInteger {
+       public:
+               KaxTrackFlagEnabled() :EbmlUInteger(1) {}
+               KaxTrackFlagEnabled(const KaxTrackFlagEnabled & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTrackFlagEnabled);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTrackFlagEnabled(*this);}
+};
+#endif // MATROSKA_VERSION
+
+class MATROSKA_DLL_API KaxTrackFlagDefault : public EbmlUInteger {
+       public:
+               KaxTrackFlagDefault() :EbmlUInteger(1) {}
+               KaxTrackFlagDefault(const KaxTrackFlagDefault & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTrackFlagDefault);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTrackFlagDefault(*this);}
+};
+
+class MATROSKA_DLL_API KaxTrackFlagForced : public EbmlUInteger {
+       public:
+               KaxTrackFlagForced() :EbmlUInteger(0) {}
+               KaxTrackFlagForced(const KaxTrackFlagForced & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTrackFlagForced);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTrackFlagForced(*this);}
+};
+
+class MATROSKA_DLL_API KaxTrackFlagLacing : public EbmlUInteger {
+       public:
+               KaxTrackFlagLacing() :EbmlUInteger(1) {}
+               KaxTrackFlagLacing(const KaxTrackFlagLacing & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTrackFlagLacing);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTrackFlagLacing(*this);}
+};
+
+class MATROSKA_DLL_API KaxTrackMinCache : public EbmlUInteger {
+       public:
+               KaxTrackMinCache() :EbmlUInteger(0) {}
+               KaxTrackMinCache(const KaxTrackMinCache & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTrackMinCache);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTrackMinCache(*this);}
+};
+
+class MATROSKA_DLL_API KaxTrackMaxCache : public EbmlUInteger {
+       public:
+               KaxTrackMaxCache() {}
+               KaxTrackMaxCache(const KaxTrackMaxCache & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTrackMaxCache);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTrackMaxCache(*this);}
+};
+
+class MATROSKA_DLL_API KaxTrackDefaultDuration : public EbmlUInteger {
+       public:
+               KaxTrackDefaultDuration() {}
+               KaxTrackDefaultDuration(const KaxTrackDefaultDuration & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTrackDefaultDuration);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTrackDefaultDuration(*this);}
+};
+
+class MATROSKA_DLL_API KaxTrackTimecodeScale : public EbmlFloat {
+       public:
+               KaxTrackTimecodeScale() :EbmlFloat(1.0) {}
+               KaxTrackTimecodeScale(const KaxTrackTimecodeScale & ElementToClone) :EbmlFloat(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTrackTimecodeScale);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTrackTimecodeScale(*this);}
+};
+
+class MATROSKA_DLL_API KaxMaxBlockAdditionID : public EbmlUInteger {
+       public:
+               KaxMaxBlockAdditionID() :EbmlUInteger(0) {}
+               KaxMaxBlockAdditionID(const KaxMaxBlockAdditionID & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxMaxBlockAdditionID);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxMaxBlockAdditionID(*this);}
+};
+
+class MATROSKA_DLL_API KaxTrackName : public EbmlUnicodeString {
+       public:
+               KaxTrackName() {}
+               KaxTrackName(const KaxTrackName & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTrackName);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTrackName(*this);}
+};
+
+class MATROSKA_DLL_API KaxTrackLanguage : public EbmlString {
+       public:
+               KaxTrackLanguage() :EbmlString("eng") {}
+               KaxTrackLanguage(const KaxTrackLanguage & ElementToClone) :EbmlString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTrackLanguage);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTrackLanguage(*this);}
+};
+
+class MATROSKA_DLL_API KaxCodecID : public EbmlString {
+       public:
+               KaxCodecID() {}
+               KaxCodecID(const KaxCodecID & ElementToClone) :EbmlString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxCodecID);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxCodecID(*this);}
+};
+
+class MATROSKA_DLL_API KaxCodecPrivate : public EbmlBinary {
+       public:
+               KaxCodecPrivate() {}
+               KaxCodecPrivate(const KaxCodecPrivate & ElementToClone) :EbmlBinary(ElementToClone){}
+               static EbmlElement & Create() {return *(new KaxCodecPrivate);}
+               bool ValidateSize() const {return true;} // we don't mind about what's inside
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxCodecPrivate(*this);}
+};
+
+class MATROSKA_DLL_API KaxCodecName : public EbmlUnicodeString {
+       public:
+               KaxCodecName() {}
+               KaxCodecName(const KaxCodecName & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxCodecName);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxCodecName(*this);}
+};
+
+class MATROSKA_DLL_API KaxTrackAttachmentLink : public EbmlBinary {
+       public:
+               KaxTrackAttachmentLink() {}
+               KaxTrackAttachmentLink(const KaxTrackAttachmentLink & ElementToClone) :EbmlBinary(ElementToClone){}
+               static EbmlElement & Create() {return *(new KaxTrackAttachmentLink);}
+               bool ValidateSize() const {return true;} // we don't mind about what's inside
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTrackAttachmentLink(*this);}
+};
+
+class MATROSKA_DLL_API KaxTrackOverlay : public EbmlUInteger {
+       public:
+               KaxTrackOverlay() {}
+               KaxTrackOverlay(const KaxTrackOverlay & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTrackOverlay);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTrackOverlay(*this);}
+};
+
+class MATROSKA_DLL_API KaxTrackTranslate : public EbmlMaster {
+       public:
+               KaxTrackTranslate();
+               KaxTrackTranslate(const KaxTrackTranslate & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTrackTranslate);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTrackTranslate(*this);}
+};
+
+class MATROSKA_DLL_API KaxTrackTranslateCodec : public EbmlUInteger {
+       public:
+               KaxTrackTranslateCodec() {}
+               KaxTrackTranslateCodec(const KaxTrackTranslateCodec & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTrackTranslateCodec);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTrackTranslateCodec(*this);}
+};
+
+class MATROSKA_DLL_API KaxTrackTranslateEditionUID : public EbmlUInteger {
+       public:
+               KaxTrackTranslateEditionUID() {}
+               KaxTrackTranslateEditionUID(const KaxTrackTranslateEditionUID & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTrackTranslateEditionUID);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTrackTranslateEditionUID(*this);}
+};
+
+class MATROSKA_DLL_API KaxTrackTranslateTrackID : public EbmlBinary {
+       public:
+               KaxTrackTranslateTrackID() {}
+               KaxTrackTranslateTrackID(const KaxTrackTranslateTrackID & ElementToClone) :EbmlBinary(ElementToClone){}
+               static EbmlElement & Create() {return *(new KaxTrackTranslateTrackID);}
+               bool ValidateSize() const { return true;}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTrackTranslateTrackID(*this);}
+};
+
+#if MATROSKA_VERSION >= 2
+class MATROSKA_DLL_API KaxCodecSettings : public EbmlUnicodeString {
+       public:
+               KaxCodecSettings() {}
+               KaxCodecSettings(const KaxCodecSettings & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxCodecSettings);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxCodecSettings(*this);}
+};
+
+class MATROSKA_DLL_API KaxCodecInfoURL : public EbmlString {
+       public:
+               KaxCodecInfoURL() {}
+               KaxCodecInfoURL(const KaxCodecInfoURL & ElementToClone) :EbmlString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxCodecInfoURL);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxCodecInfoURL(*this);}
+};
+
+class MATROSKA_DLL_API KaxCodecDownloadURL : public EbmlString {
+       public:
+               KaxCodecDownloadURL() {}
+               KaxCodecDownloadURL(const KaxCodecDownloadURL & ElementToClone) :EbmlString(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxCodecDownloadURL);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxCodecDownloadURL(*this);}
+};
+
+class MATROSKA_DLL_API KaxCodecDecodeAll : public EbmlUInteger {
+       public:
+               KaxCodecDecodeAll() :EbmlUInteger(1) {}
+               KaxCodecDecodeAll(const KaxCodecDecodeAll & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxCodecDecodeAll);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxCodecDecodeAll(*this);}
+};
+#endif // MATROSKA_VERSION
+
+END_LIBMATROSKA_NAMESPACE
+
+#endif // LIBMATROSKA_TRACK_ENTRY_DATA_H
diff --git a/matroska/KaxTrackVideo.h b/matroska/KaxTrackVideo.h
new file mode 100644 (file)
index 0000000..92c0cf3
--- /dev/null
@@ -0,0 +1,235 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class MATROSKA_DLL_API description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxTrackVideo.h,v 1.9 2004/04/14 23:26:17 robux4 Exp $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#ifndef LIBMATROSKA_TRACK_VIDEO_H
+#define LIBMATROSKA_TRACK_VIDEO_H
+
+#include "matroska/KaxTypes.h"
+#include "ebml/EbmlMaster.h"
+#include "ebml/EbmlUInteger.h"
+#include "ebml/EbmlBinary.h"
+#include "ebml/EbmlFloat.h"
+
+using namespace LIBEBML_NAMESPACE;
+
+START_LIBMATROSKA_NAMESPACE
+
+class MATROSKA_DLL_API KaxTrackVideo : public EbmlMaster {
+       public:
+               KaxTrackVideo();
+               KaxTrackVideo(const KaxTrackVideo & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTrackVideo);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTrackVideo(*this);}
+};
+
+#if MATROSKA_VERSION >= 2
+class MATROSKA_DLL_API KaxVideoFlagInterlaced : public EbmlUInteger {
+       public:
+               KaxVideoFlagInterlaced() :EbmlUInteger(0) {}
+               KaxVideoFlagInterlaced(const KaxVideoFlagInterlaced & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxVideoFlagInterlaced);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxVideoFlagInterlaced(*this);}
+};
+
+class MATROSKA_DLL_API KaxVideoStereoMode : public EbmlUInteger {
+       public:
+               KaxVideoStereoMode() :EbmlUInteger(0) {}
+               KaxVideoStereoMode(const KaxVideoStereoMode & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxVideoStereoMode);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxVideoStereoMode(*this);}
+};
+#endif // MATROSKA_VERSION
+
+class MATROSKA_DLL_API KaxVideoPixelWidth : public EbmlUInteger {
+       public:
+               KaxVideoPixelWidth() {}
+               KaxVideoPixelWidth(const KaxVideoPixelWidth & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxVideoPixelWidth);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxVideoPixelWidth(*this);}
+};
+
+class MATROSKA_DLL_API KaxVideoPixelHeight : public EbmlUInteger {
+       public:
+               KaxVideoPixelHeight() {}
+               KaxVideoPixelHeight(const KaxVideoPixelHeight & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxVideoPixelHeight);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxVideoPixelHeight(*this);}
+};
+
+class MATROSKA_DLL_API KaxVideoPixelCropBottom : public EbmlUInteger {
+       public:
+               KaxVideoPixelCropBottom(): EbmlUInteger(0) {}
+               KaxVideoPixelCropBottom(const KaxVideoPixelCropBottom & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxVideoPixelCropBottom);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxVideoPixelCropBottom(*this);}
+};
+
+class MATROSKA_DLL_API KaxVideoPixelCropTop : public EbmlUInteger {
+       public:
+               KaxVideoPixelCropTop(): EbmlUInteger(0) {}
+               KaxVideoPixelCropTop(const KaxVideoPixelCropTop & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxVideoPixelCropTop);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxVideoPixelCropTop(*this);}
+};
+
+class MATROSKA_DLL_API KaxVideoPixelCropLeft : public EbmlUInteger {
+       public:
+               KaxVideoPixelCropLeft(): EbmlUInteger(0) {}
+               KaxVideoPixelCropLeft(const KaxVideoPixelCropLeft & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxVideoPixelCropLeft);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxVideoPixelCropLeft(*this);}
+};
+
+class MATROSKA_DLL_API KaxVideoPixelCropRight : public EbmlUInteger {
+       public:
+               KaxVideoPixelCropRight(): EbmlUInteger(0) {}
+               KaxVideoPixelCropRight(const KaxVideoPixelCropRight & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxVideoPixelCropRight);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxVideoPixelCropRight(*this);}
+};
+
+class MATROSKA_DLL_API KaxVideoDisplayWidth : public EbmlUInteger {
+       public:
+               KaxVideoDisplayWidth() {}
+               KaxVideoDisplayWidth(const KaxVideoDisplayWidth & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxVideoDisplayWidth);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxVideoDisplayWidth(*this);}
+};
+
+class MATROSKA_DLL_API KaxVideoDisplayHeight : public EbmlUInteger {
+       public:
+               KaxVideoDisplayHeight() {}
+               KaxVideoDisplayHeight(const KaxVideoDisplayHeight & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxVideoDisplayHeight);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxVideoDisplayHeight(*this);}
+};
+
+#if MATROSKA_VERSION >= 2
+class MATROSKA_DLL_API KaxVideoDisplayUnit : public EbmlUInteger {
+       public:
+               KaxVideoDisplayUnit() {}
+               KaxVideoDisplayUnit(const KaxVideoDisplayUnit & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxVideoDisplayUnit);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxVideoDisplayUnit(*this);}
+};
+
+class MATROSKA_DLL_API KaxVideoAspectRatio : public EbmlUInteger {
+       public:
+               KaxVideoAspectRatio() {}
+               KaxVideoAspectRatio(const KaxVideoAspectRatio & ElementToClone) :EbmlUInteger(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxVideoAspectRatio);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxVideoAspectRatio(*this);}
+};
+#endif // MATROSKA_VERSION
+
+class MATROSKA_DLL_API KaxVideoColourSpace : public EbmlBinary {
+       public:
+               KaxVideoColourSpace() {}
+               KaxVideoColourSpace(const KaxVideoColourSpace & ElementToClone) :EbmlBinary(ElementToClone){}
+               static EbmlElement & Create() {return *(new KaxVideoColourSpace);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               bool ValidateSize(void) const {return (Size == 4);}
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxVideoColourSpace(*this);}
+};
+
+#if MATROSKA_VERSION >= 2
+class MATROSKA_DLL_API KaxVideoGamma : public EbmlFloat {
+       public:
+               KaxVideoGamma() {}
+               KaxVideoGamma(const KaxVideoGamma & ElementToClone) :EbmlFloat(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxVideoGamma);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxVideoGamma(*this);}
+};
+#endif // MATROSKA_VERSION
+
+class MATROSKA_DLL_API KaxVideoFrameRate : public EbmlFloat {
+       public:
+               KaxVideoFrameRate() {}
+               KaxVideoFrameRate(const KaxVideoFrameRate & ElementToClone) :EbmlFloat(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxVideoFrameRate);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               uint32 RenderData(IOCallback & output, bool bForceRender, bool bSaveDefault);
+               EbmlElement * Clone() const {return new KaxVideoFrameRate(*this);}
+};
+
+
+END_LIBMATROSKA_NAMESPACE
+
+#endif // LIBMATROSKA_TRACK_VIDEO_H
diff --git a/matroska/KaxTracks.h b/matroska/KaxTracks.h
new file mode 100644 (file)
index 0000000..408736d
--- /dev/null
@@ -0,0 +1,96 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxTracks.h,v 1.7 2004/04/14 23:26:17 robux4 Exp $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#ifndef LIBMATROSKA_TRACKS_H
+#define LIBMATROSKA_TRACKS_H
+
+#include "matroska/KaxTypes.h"
+#include "ebml/EbmlMaster.h"
+#include "ebml/EbmlUInteger.h"
+#include "matroska/KaxTrackEntryData.h"
+
+using namespace LIBEBML_NAMESPACE;
+
+START_LIBMATROSKA_NAMESPACE
+
+class MATROSKA_DLL_API KaxTracks : public EbmlMaster {
+       public:
+               KaxTracks();
+               KaxTracks(const KaxTracks & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTracks);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTracks(*this);}
+};
+
+class MATROSKA_DLL_API KaxTrackEntry : public EbmlMaster {
+       public:
+               KaxTrackEntry();
+               KaxTrackEntry(const KaxTrackEntry & ElementToClone) :EbmlMaster(ElementToClone) {}
+               static EbmlElement & Create() {return *(new KaxTrackEntry);}
+               const EbmlCallbacks & Generic() const {return ClassInfos;}
+               static const EbmlCallbacks ClassInfos;
+               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+               EbmlElement * Clone() const {return new KaxTrackEntry(*this);}
+
+               EbmlUInteger & TrackNumber() const { return *(static_cast<EbmlUInteger *>(FindElt(KaxTrackNumber::ClassInfos))); }
+
+               void EnableLacing(bool bEnable = true);
+
+               /*!
+                       \note lacing set by default
+               */
+               inline bool LacingEnabled() const {
+                       KaxTrackFlagLacing * myLacing = static_cast<KaxTrackFlagLacing *>(FindFirstElt(KaxTrackFlagLacing::ClassInfos));
+                       return((myLacing == NULL) || (uint8(*myLacing) != 0));
+               }
+
+               void SetGlobalTimecodeScale(uint64 aGlobalTimecodeScale) {
+                       mGlobalTimecodeScale = aGlobalTimecodeScale;
+                       bGlobalTimecodeScaleIsSet = true;
+               }
+               uint64 GlobalTimecodeScale() const {
+                       assert(bGlobalTimecodeScaleIsSet); 
+                       return mGlobalTimecodeScale;
+               }
+
+       protected:
+               bool   bGlobalTimecodeScaleIsSet;
+               uint64 mGlobalTimecodeScale;
+};
+
+END_LIBMATROSKA_NAMESPACE
+
+#endif // LIBMATROSKA_TRACKS_H
diff --git a/matroska/KaxTypes.h b/matroska/KaxTypes.h
new file mode 100644 (file)
index 0000000..cbb90b9
--- /dev/null
@@ -0,0 +1,59 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxTypes.h,v 1.4 2004/04/14 23:26:17 robux4 Exp $
+*/
+#ifndef LIBMATROSKA_TYPES_H
+#define LIBMATROSKA_TYPES_H
+
+#include "matroska/KaxConfig.h"
+#include "ebml/EbmlTypes.h"
+#include "matroska/c/libmatroska_t.h"
+
+START_LIBMATROSKA_NAMESPACE
+
+enum LacingType {
+       LACING_NONE = 0,
+       LACING_XIPH,
+       LACING_FIXED,
+       LACING_EBML,
+       LACING_AUTO
+};
+
+enum BlockBlobType {
+       BLOCK_BLOB_NO_SIMPLE = 0,
+       BLOCK_BLOB_SIMPLE_AUTO,
+       BLOCK_BLOB_ALWAYS_SIMPLE,
+};
+
+END_LIBMATROSKA_NAMESPACE
+
+#endif // LIBMATROSKA_TYPES_H
diff --git a/matroska/KaxVersion.h b/matroska/KaxVersion.h
new file mode 100644 (file)
index 0000000..58add0d
--- /dev/null
@@ -0,0 +1,54 @@
+/****************************************************************************
+** <file/class description>
+**
+** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxVersion.h,v 1.13 2004/04/23 16:46:07 mosu Exp $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#ifndef LIBMATROSKA_VERSION_H
+#define LIBMATROSKA_VERSION_H
+
+#include <string>
+
+#include "ebml/EbmlConfig.h"
+#include "matroska/KaxConfig.h"
+
+START_LIBMATROSKA_NAMESPACE
+
+#define LIBMATROSKA_VERSION 0x000801
+
+static const std::string KaxCodeVersion = "0.8.1";
+static const std::string KaxCodeDate    = __TIMESTAMP__;
+
+/*!
+       \todo Improve the CRC/ECC system (backward and forward possible ?) to fit streaming/live writing/simple reading
+*/
+
+END_LIBMATROSKA_NAMESPACE
+
+#endif // LIBMATROSKA_VERSION_H
diff --git a/matroska/c/libmatroska.h b/matroska/c/libmatroska.h
new file mode 100644 (file)
index 0000000..36f7a1d
--- /dev/null
@@ -0,0 +1,119 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2003 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.
+**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+    \file libmatroska.h
+    \version \$Id: libmatroska.h,v 1.2 2004/04/14 23:26:17 robux4 Exp $
+    \author Steve Lhomme     <robux4 @ users.sf.net>
+    \author Ingo Ralf Blum   <ingoralfblum @ users.sf.net>
+
+    \brief C API to the libmatroska library
+    \note These are the functions that should be exported (visible from outisde the library)
+    \todo Put a function here for all the MUST in the Matroska spec
+    \todo Put a brief description of each function, and a description of the params and return value
+    \todo Change the int values to sized types
+*/
+
+#ifndef _LIBMATROSKA_H_INCLUDED_
+#define _LIBMATROSKA_H_INCLUDED_
+
+#include "libmatroska_t.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef OLD
+
+/*!
+    \fn int matroska_plug_log(matroska_error_callback)
+    \brief Attach a callback to be informed when error occurs
+    \param callback The callback that will be called when logging occurs \return 0 if successfull
+*/
+int matroska_plug_log(matroska_error_callback callback);
+
+/*!
+    \fn int matroska_unplug_log(matroska_error_callback)
+    \brief Unattach an attached callback to be informed when error occurs
+    \param callback The callback that was called when logging occurs \return 0 if successfull
+*/
+int matroska_unplug_log(matroska_error_callback callback);
+
+/*!
+    \fn matroska_id matroska_open_file(c_string,matroska_file_mode)
+    \brief Open an instance of an Matroska file
+    \param string The name of the file to open (including OS depedant path) \param mode The mode to open the file (read, write, etc)
+    \return NULL if the opening failed or an ID that will be used to access this file from the API
+*/
+matroska_stream MATROSKA_EXPORT matroska_open_stream_file(c_string string, open_mode mode);
+
+matroska_id MATROSKA_EXPORT matroska_open_stream(matroska_stream a_stream);
+
+/*!
+    \fn matroska_id matroska_open_url(c_string)
+    \brief Open an instance of an Matroska file from a URL
+    \param string The name of the URL to open \return NULL if the opening failed or an ID that will be used to access this file from the API
+    \warning Open only for reading ?
+    \note It requires that Curl is compiled or installed
+*/
+matroska_id matroska_open_url(c_string string);
+
+/*!
+    \fn int matroska_close(matroska_id)
+    \brief Close the specified Matroska instance
+    \param id The instance to close \return 0 if successfull
+*/
+void MATROSKA_EXPORT matroska_close(matroska_id id);
+
+void MATROSKA_EXPORT matroska_end(matroska_id id, uint32 totaltime);
+
+matroska_track MATROSKA_EXPORT matroska_create_track(matroska_id id, enum track_type type);
+
+void MATROSKA_EXPORT matroska_read_head(matroska_id id);
+void MATROSKA_EXPORT matroska_read_tracks(matroska_id id);
+
+uint8 MATROSKA_EXPORT matroska_get_number_track(matroska_id id);
+
+matroska_track MATROSKA_EXPORT matroska_get_track(matroska_id id, uint8 track_index);
+
+void MATROSKA_EXPORT matroska_get_track_info(matroska_id id, matroska_track track, track_info * infos);
+
+/*
+int matroska_track_write_block(matroska_track, void* buffer, unsigned int size);
+int matroska_track_close(matroska_track);
+*/
+
+#endif /* OLD */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _LIBMATROSKA_H_INCLUDED_ */
diff --git a/matroska/c/libmatroska_t.h b/matroska/c/libmatroska_t.h
new file mode 100644 (file)
index 0000000..9c4fc2c
--- /dev/null
@@ -0,0 +1,108 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2003 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+    \file libmatroska_t.h
+    \version \$Id: libmatroska_t.h,v 1.3 2004/04/14 23:26:17 robux4 Exp $
+    \author Steve Lhomme     <robux4 @ users.sf.net>
+    \author Ingo Ralf Blum   <ingoralfblum @ users.sf.net>
+
+    \brief Misc type definitions for the C API of libmatroska
+
+    \note These types should be compiler/language independant (just platform dependant)
+    \todo recover the sized types (uint16, int32, etc) here too (or maybe here only)
+*/
+
+#ifndef _LIBMATROSKA_T_H_INCLUDED_
+#define _LIBMATROSKA_T_H_INCLUDED_
+
+#include "ebml/c/libebml_t.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*!
+    \enum track_type
+*/
+typedef enum track_type {
+    track_video       = 0x01, ///< Rectangle-shaped non-transparent pictures aka video
+    track_audio       = 0x02, ///< Anything you can hear
+    track_complex     = 0x03, ///< Audio and video in same track, used by DV
+
+    track_logo        = 0x10, ///< Overlay-pictures, displayed over video
+    track_subtitle    = 0x11, ///< Text-subtitles. One track contains one language and only one track can be active (player-side configuration)
+    track_buttons     = 0x12, ///< Buttons meta-infos.
+
+    track_control     = 0x20  ///< Control-codes for menus and other stuff
+} track_type;
+
+/*!
+    \enum matroska_error_t
+    \brief a callback that the library use to inform of errors happening
+    \note this should be used by the libmatroska internals
+*/
+typedef enum {
+       error_null_pointer  ///< NULL pointer where something else is expected
+} matroska_error_t;
+
+typedef void *matroska_stream;
+
+/*!
+    \var void* matroska_id
+    \brief UID used to access an Matroska file instance
+*/
+typedef void* matroska_id;
+/*!
+    \var void* matroska_track
+    \brief UID used to access a track
+*/
+typedef void* matroska_track;
+/*!
+    \var char* c_string
+    \brief C-String, ie a buffer with characters terminated by \0
+*/
+typedef char* c_string;
+/*!
+    \var unsigned int matroska_file_mode
+    \brief A bit buffer, each bit representing a value for the file opening
+    \todo replace the unsigned int by a sized type (8 or 16 bits)
+*/
+typedef char * matroska_file_mode;
+/*!
+    \var void (*matroska_error_callback)(matroska_error_t error_code, char* error_message)
+    \brief a callback that the library use to inform of errors happening
+*/
+typedef void (*matroska_error_callback)(matroska_error_t error_code, char* error_message);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _LIBMATROSKA_T_H_INCLUDED_ */
diff --git a/src/FileKax.cpp b/src/FileKax.cpp
new file mode 100644 (file)
index 0000000..0385d1e
--- /dev/null
@@ -0,0 +1,449 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2003 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+    \file
+    \version \$Id: FileKax.cpp 640 2004-07-09 21:05:36Z mosu $
+    \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+//#include "StdInclude.h"
+#include "matroska/FileKax.h"
+//#include "Cluster.h"
+//#include "Track.h"
+//#include "Block.h"
+//#include "Frame.h"
+//#include "Version.h"
+
+START_LIBMATROSKA_NAMESPACE
+
+//typedef Track *TrackID;
+
+FileMatroska::FileMatroska(IOCallback & output)
+ :myFile(output)
+#ifdef OLD
+ ,myCurrReadBlock(NULL)
+ ,myMinClusterSize(5*1024)      // 5KB is the min size of a cluster
+ ,myMaxClusterSize(2*1024*1024) // 2MB is the max size of a cluster
+ ,myCurrReadBlockTrack(0)
+ ,myCurrWriteCluster(2*1024*1024) // myMaxClusterSize
+ ,myCurrReadCluster(NULL)
+ ,myReadBlockNumber(0)
+#endif // OLD
+{
+#ifdef OLD
+    myStreamInfo.MainHeaderSize = TypeHeader::default_size() +
+               ActualHeader::default_size() + 
+               ExtendedInfo::default_size() + 
+               ContentInfo::default_size();
+    myStreamInfo.TrackEntrySize = Track::default_size();
+    myStreamInfo.BlockHeadSize = BLOCK_HEADER_SIZE;
+    myStreamInfo.ClusterHeadSize = CLUSTER_HEADER_SIZE;
+    myStreamInfo.ClusterFootSize = CLUSTER_TRAILER_SIZE;
+#endif // OLD
+}
+
+FileMatroska::~FileMatroska()
+{
+//    if (myCurrCluster != NULL)
+//     throw 0; // there are some data left to write
+//    if (myCurrReadCluster != NULL || myCurrReadBlock != NULL)
+//     throw 0; // there are some data left to write
+}
+
+#ifdef OLD
+void FileMatroska::SetMaxClusterSize(const uint32 value)
+{
+    myMaxClusterSize = value;
+    myCurrWriteCluster.setMaxSize(value);
+}
+
+void FileMatroska::Close(const uint32 aTimeLength)
+{
+    Flush();
+
+    // get the file size
+    myFile.setFilePointer(0,seek_end);
+    myMainHeader.type_SetSize(myFile.getFilePointer());
+
+    // rewrite the header at the beginning
+    myFile.setFilePointer(0,seek_beginning);
+
+    // get the Track-entry size
+    uint32 track_entries_size = 0;
+    for (size_t i=0; i<myTracks.size(); i++)
+    {
+       track_entries_size += myTracks[i]->default_size();
+    }
+
+    myStreamInfo.TrackEntriesSize = track_entries_size;
+    myStreamInfo.TimeLength = aTimeLength;
+    myMainHeader.Render(myFile, myStreamInfo);
+
+    for (i=0; i<myTracks.size(); i++)
+    {
+       delete myTracks[i];
+    }
+}
+
+/*!
+    \warning after rendering the head, some parameters are locked
+*/
+uint32 FileMatroska::RenderHead(const std::string & aEncoderApp)
+{
+    try {
+       uint32 track_entries_size = 0;
+       for (size_t i=0; i<myTracks.size(); i++)
+       {
+           track_entries_size += myTracks[i]->default_size();
+       }
+
+       std::string aStr = LIB_NAME;
+       aStr += " ";
+       aStr += VERSION;
+       myStreamInfo.EncoderLib = aStr;
+
+       myStreamInfo.EncoderApp = aEncoderApp;
+
+       myStreamInfo.TrackEntryPosition = 0 + myStreamInfo.MainHeaderSize;
+       myStreamInfo.TrackEntriesSize = myTracks.size() * myStreamInfo.TrackEntrySize;
+
+       myStreamInfo.CodecEntryPosition = myStreamInfo.MainHeaderSize + myStreamInfo.TrackEntriesSize;
+       myStreamInfo.CodecEntrySize = 4;
+       for (i=0; i<myTracks.size(); i++)
+       {
+           myStreamInfo.CodecEntrySize += myTracks[i]->CodecSize();
+       }
+
+       // Main Header
+       uint32 result = myMainHeader.Render(myFile, myStreamInfo);
+
+       // Track Entries
+       for (i=0; i<myTracks.size(); i++)
+       {
+           myTracks[i]->RenderEntry(myFile, i+1);
+       }
+       myStreamInfo.ClusterPosition = myStreamInfo.CodecEntryPosition + myStreamInfo.CodecEntrySize;
+
+       // Codec Header
+       result = CodecHeader::Render(myFile, myTracks);
+
+       return result;
+    }
+    catch (exception & Ex)
+    {
+       throw Ex;
+    }
+}
+
+/*!
+    \return 0 if the track was not created, or a valid track number
+*/
+Track * FileMatroska::CreateTrack(const track_type aType)
+{
+    myTracks.push_back(new Track(aType));
+    return myTracks.back();
+}
+
+/*Track *FileMatroska::findTrack(Track * aTrack) const
+{
+    for (size_t i=0; i<myTracks.size(); i++)
+    {
+       if (myTracks[i] == aTrack)
+           return myTracks[i];
+    }
+
+    return NULL;
+}*/
+
+void FileMatroska::track_SetName(Track * aTrack, const std::string & aName)
+{
+    if (IsMyTrack(aTrack))
+    {
+        aTrack->SetName(aName);
+    }
+}
+
+void FileMatroska::track_SetLaced(Track * aTrack, const bool bLaced)
+{
+    if (IsMyTrack(aTrack))
+    {
+        aTrack->SetLaced(bLaced);
+    }
+}
+
+bool FileMatroska::AddFrame(Track * aTrack, const uint32 aTimecode, const binary *aFrame, const uint32 aFrameSize,
+                                          const bool aKeyFrame, const bool aBFrame)
+{
+    try {
+       // make sure we know that track
+       if (IsMyTrack(aTrack))
+       {
+           // pass the cluster to the track
+           // handle the creation of a new cluster if needed
+           if (aTrack->AddFrame(aTimecode, aFrame, aFrameSize, aKeyFrame, aBFrame))
+           {
+               while (!aTrack->SerialiseBlock(myCurrWriteCluster))
+               {
+                   /// \todo handle errors
+                   uint32 aNbBlock;
+                   myStreamInfo.ClusterSize += myCurrWriteCluster.Render(myFile, aNbBlock);
+                   myStreamInfo.NumberBlock += aNbBlock;
+                   myCurrWriteCluster.Flush();
+               }
+           }
+               return true;
+       }
+       return false;
+    }
+    catch (exception & Ex)
+    {
+       throw Ex;
+    }
+}
+
+void FileMatroska::Flush()
+{
+    uint32 aNbBlock;
+    myStreamInfo.ClusterSize += myCurrWriteCluster.Render(myFile,aNbBlock);
+    myStreamInfo.NumberBlock += aNbBlock;
+}
+
+uint32 FileMatroska::ReadHead()
+{
+    try {
+       uint32 result = myMainHeader.Read(myFile, myStreamInfo);
+
+       return result;
+    }
+    catch (exception & Ex)
+    {
+       throw Ex;
+    }
+}
+
+uint32 FileMatroska::ReadTracks()
+{
+    try {
+       uint32 result = 0;
+
+       // seek to the start of the Track Entries
+       myFile.setFilePointer(myStreamInfo.TrackEntryPosition);
+       // get the number of Track Entries
+       uint8 TrackNumber = myStreamInfo.TrackEntriesSize / myStreamInfo.TrackEntrySize;
+       // read all the Track Entries
+       myTracks.clear();
+       for (uint8 TrackIdx = 0; TrackIdx<TrackNumber; TrackIdx ++) {
+           Track * tmpTrack = Track::ReadEntry(myFile, TrackIdx+1, myStreamInfo);
+           if (tmpTrack == NULL)
+               throw 0;
+           
+           myTracks.push_back(tmpTrack);
+       }
+
+       return result;
+    }
+    catch (exception & Ex)
+    {
+       throw Ex;
+    }
+}
+
+uint32 FileMatroska::ReadCodec()
+{
+    try {
+       // seek to the start of the Track Entries
+       myFile.setFilePointer(myStreamInfo.CodecEntryPosition);
+
+       uint32 result = CodecHeader::Read(myFile, myTracks);
+
+       return result;
+    }
+    catch (exception & Ex)
+    {
+       throw Ex;
+    }
+}
+
+inline bool FileMatroska::IsMyTrack(const Track * aTrack) const
+{
+    if (aTrack == 0)
+       throw 0;
+
+    for (std::vector<Track*>::const_iterator i = myTracks.begin(); i != myTracks.end(); i ++)
+    {
+       if (*i == aTrack)
+           break;
+    }
+
+    if (i != myTracks.end())
+       return true;
+    else
+       return false;
+}
+
+void FileMatroska::SelectReadingTrack(Track * aTrack, bool select)
+{
+    if (IsMyTrack(aTrack))
+    {
+       // here we have the right track
+       // check if it's not already selected
+       for (std::vector<uint8>::iterator j = mySelectedTracks.begin();
+           j != mySelectedTracks.end(); j ++)
+       {
+           if (*j == aTrack->TrackNumber())
+               break;
+       }
+
+       if (select && j == mySelectedTracks.end())
+           mySelectedTracks.push_back(aTrack->TrackNumber());
+       else if (!select && j != mySelectedTracks.end())
+           mySelectedTracks.erase(j);
+
+       std::sort(mySelectedTracks.begin(), mySelectedTracks.end());
+    }
+}
+
+inline bool FileMatroska::IsReadingTrack(const uint8 aTrackNumber) const
+{
+    for (std::vector<uint8>::const_iterator trackIdx = mySelectedTracks.begin();
+         trackIdx != mySelectedTracks.end() && *trackIdx < aTrackNumber;
+        trackIdx++)
+    {}
+
+    if (trackIdx == mySelectedTracks.end())
+       return false;
+    else
+       return true;
+}
+
+//
+
+void FileMatroska::Track_GetInfo(const Track * aTrack, TrackInfo & aTrackInfo) const
+{
+    if (IsMyTrack(aTrack))
+    {
+       aTrack->GetInfo(aTrackInfo);
+    }
+}
+
+// Audio related getters/setters
+
+void FileMatroska::Track_GetInfo_Audio(const Track * aTrack, TrackInfoAudio & aTrackInfo) const
+{
+    if (IsMyTrack(aTrack))
+    {
+       aTrack->GetInfoAudio(aTrackInfo);
+    }
+}
+
+void FileMatroska::Track_SetInfo_Audio(Track * aTrack, const TrackInfoAudio & aTrackInfo)
+{
+    if (IsMyTrack(aTrack))
+    {
+       aTrack->SetInfoAudio(aTrackInfo);
+    }
+}
+
+// Video related getters/setters
+
+void FileMatroska::Track_GetInfo_Video(const Track * aTrack, TrackInfoVideo & aTrackInfo) const
+{
+    if (IsMyTrack(aTrack))
+    {
+       aTrack->GetInfoVideo(aTrackInfo);
+    }
+}
+
+void FileMatroska::Track_SetInfo_Video(Track * aTrack, const TrackInfoVideo & aTrackInfo)
+{
+    if (IsMyTrack(aTrack))
+    {
+       aTrack->SetInfoVideo(aTrackInfo);
+    }
+}
+
+/*!
+    \todo exit when there is no Block left
+*/
+bool FileMatroska::ReadFrame(Track * & aTrack, uint32 & aTimecode, const binary * & aFrame, uint32 & aFrameSize,
+                                               bool & aKeyFrame, bool & aBFrame)
+{
+    if (myCurrReadBlockTrack == 0)
+    {
+       do {
+           if (myReadBlockNumber >= myStreamInfo.NumberBlock)
+           {
+//             myReadBlockNumber = myStreamInfo.NumberBlock;
+               return false;
+           }
+
+           // get the next frame in the file
+           if (!myCurrReadCluster.BlockLeft())
+           {
+               myCurrReadCluster.Flush();
+               try {
+                   myCurrReadCluster.FindHead(myFile);
+               }
+               catch (exception & Ex)
+               {
+                   return false;
+               }
+           }
+
+           myCurrReadCluster.GetBlock( myCurrReadBlock, myCurrReadBlockSize, myCurrReadBlockTrack );
+           myReadBlockNumber++;
+       } while (!IsReadingTrack(myCurrReadBlockTrack));
+
+       // get the track associated (normally from myTracks)
+       aTrack = myTracks[myCurrReadBlockTrack-1];
+       // get the next frame from the current block
+       aTrack->HandleBlock(myCurrReadBlock, myCurrReadBlockSize);
+    }
+    else
+    {
+       // get the track associated (normally from myTracks)
+       aTrack = myTracks[myCurrReadBlockTrack-1];
+    }
+    
+    Frame *  myReadFrame;
+    aTrack->GetNextFrame(aTimecode, myReadFrame, aKeyFrame, aBFrame);
+    aFrame = myReadFrame->buf();
+    aFrameSize = myReadFrame->length();
+
+    if (aTrack->NoFrameLeft())
+    {
+       aTrack->FlushBlock();
+       myCurrReadBlockTrack = 0;
+    }
+
+    return true;
+}
+#endif // OLD
+
+END_LIBMATROSKA_NAMESPACE
diff --git a/src/KaxAttached.cpp b/src/KaxAttached.cpp
new file mode 100644 (file)
index 0000000..d725e39
--- /dev/null
@@ -0,0 +1,96 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxAttached.cpp 1202 2005-08-30 14:39:01Z robux4 $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#include "matroska/KaxAttached.h"
+#include "matroska/KaxContexts.h"
+
+// sub elements
+
+using namespace LIBEBML_NAMESPACE;
+
+START_LIBMATROSKA_NAMESPACE
+
+#if MATROSKA_VERSION == 1
+EbmlSemantic KaxAttached_ContextList[5] =
+#else // MATROSKA_VERSION
+EbmlSemantic KaxAttached_ContextList[6] =
+#endif // MATROSKA_VERSION
+{
+       EbmlSemantic(true,  true, KaxFileName::ClassInfos),
+       EbmlSemantic(true,  true, KaxMimeType::ClassInfos),
+       EbmlSemantic(true,  true, KaxFileData::ClassInfos),
+       EbmlSemantic(false, true, KaxFileDescription::ClassInfos),
+       EbmlSemantic(true,  true, KaxFileUID::ClassInfos),
+#if MATROSKA_VERSION >= 2
+       EbmlSemantic(false, true, KaxFileReferral::ClassInfos),
+#endif // MATROSKA_VERSION
+};
+
+EbmlId KaxAttached_TheId       (0x61A7, 2);
+EbmlId KaxFileDescription_TheId(0x467E, 2);
+EbmlId KaxFileName_TheId       (0x466E, 2);
+EbmlId KaxMimeType_TheId       (0x4660, 2);
+EbmlId KaxFileData_TheId       (0x465C, 2);
+EbmlId KaxFileUID_TheId        (0x46AE, 2);
+#if MATROSKA_VERSION >= 2
+EbmlId KaxFileReferral_TheId   (0x4675, 2);
+#endif // MATROSKA_VERSION
+
+const EbmlSemanticContext KaxAttached_Context = EbmlSemanticContext(countof(KaxAttached_ContextList), KaxAttached_ContextList, &KaxAttachments_Context, *GetKaxGlobal_Context, &KaxAttached::ClassInfos);
+const EbmlSemanticContext KaxFileDescription_Context = EbmlSemanticContext(0, NULL, &KaxAttachments_Context, *GetKaxGlobal_Context, &KaxFileDescription::ClassInfos);
+const EbmlSemanticContext KaxFileName_Context        = EbmlSemanticContext(0, NULL, &KaxAttachments_Context, *GetKaxGlobal_Context, &KaxFileName::ClassInfos);
+const EbmlSemanticContext KaxMimeType_Context        = EbmlSemanticContext(0, NULL, &KaxAttachments_Context, *GetKaxGlobal_Context, &KaxMimeType::ClassInfos);
+const EbmlSemanticContext KaxFileData_Context        = EbmlSemanticContext(0, NULL, &KaxAttachments_Context, *GetKaxGlobal_Context, &KaxFileData::ClassInfos);
+const EbmlSemanticContext KaxFileUID_Context         = EbmlSemanticContext(0, NULL, &KaxAttachments_Context, *GetKaxGlobal_Context, &KaxFileUID::ClassInfos);
+#if MATROSKA_VERSION >= 2
+const EbmlSemanticContext KaxFileReferral_Context    = EbmlSemanticContext(0, NULL, &KaxAttachments_Context, *GetKaxGlobal_Context, &KaxFileReferral::ClassInfos);
+#endif // MATROSKA_VERSION
+
+const EbmlCallbacks KaxAttached::ClassInfos(KaxAttached::Create, KaxAttached_TheId, "AttachedFile", KaxAttached_Context);
+const EbmlCallbacks KaxFileDescription::ClassInfos(KaxFileDescription::Create, KaxFileDescription_TheId, "FileDescription", KaxFileDescription_Context);
+const EbmlCallbacks KaxFileName::ClassInfos(KaxFileName::Create, KaxFileName_TheId, "FileName", KaxFileName_Context);
+const EbmlCallbacks KaxMimeType::ClassInfos(KaxMimeType::Create, KaxMimeType_TheId, "FileMimeType", KaxMimeType_Context);
+const EbmlCallbacks KaxFileData::ClassInfos(KaxFileData::Create, KaxFileData_TheId, "FileData", KaxFileData_Context);
+const EbmlCallbacks KaxFileUID::ClassInfos(KaxFileUID::Create, KaxFileUID_TheId, "FileUID", KaxFileUID_Context);
+#if MATROSKA_VERSION >= 2
+const EbmlCallbacks KaxFileReferral::ClassInfos(KaxFileReferral::Create, KaxFileReferral_TheId, "FileReferral", KaxFileReferral_Context);
+#endif // MATROSKA_VERSION
+
+KaxAttached::KaxAttached()
+ :EbmlMaster(KaxAttached_Context)
+{
+       SetSizeLength(2); // mandatory min size support (for easier updating) (2^(7*2)-2 = 16Ko)
+}
+
+END_LIBMATROSKA_NAMESPACE
diff --git a/src/KaxAttachments.cpp b/src/KaxAttachments.cpp
new file mode 100644 (file)
index 0000000..4a654fa
--- /dev/null
@@ -0,0 +1,60 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxAttachments.cpp 640 2004-07-09 21:05:36Z mosu $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#include "matroska/KaxAttachments.h"
+#include "matroska/KaxAttached.h"
+#include "matroska/KaxContexts.h"
+
+using namespace LIBEBML_NAMESPACE;
+
+// sub elements
+START_LIBMATROSKA_NAMESPACE
+
+EbmlSemantic KaxAttachments_ContextList[1] =
+{
+       EbmlSemantic(true, false, KaxAttached::ClassInfos),        ///< EBMLVersion
+};
+
+const EbmlSemanticContext KaxAttachments_Context = EbmlSemanticContext(countof(KaxAttachments_ContextList), KaxAttachments_ContextList, &KaxSegment_Context, *GetKaxGlobal_Context, &KaxAttachments::ClassInfos);
+
+EbmlId KaxAttachments_TheId(0x1941A469, 4);
+const EbmlCallbacks KaxAttachments::ClassInfos(KaxAttachments::Create, KaxAttachments_TheId, "Attachments", KaxAttachments_Context);
+
+KaxAttachments::KaxAttachments()
+ :EbmlMaster(KaxAttachments_Context)
+{
+       SetSizeLength(2); // mandatory min size support (for easier updating) (2^(7*2)-2 = 16Ko)
+}
+
+END_LIBMATROSKA_NAMESPACE
diff --git a/src/KaxBlock.cpp b/src/KaxBlock.cpp
new file mode 100644 (file)
index 0000000..9b121ab
--- /dev/null
@@ -0,0 +1,1096 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxBlock.cpp 1265 2007-01-14 17:20:35Z mosu $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+       \author Julien Coloos    <suiryc @ users.sf.net>
+*/
+#include <cassert>
+
+//#include <streams.h>
+
+#include "matroska/KaxBlock.h"
+#include "matroska/KaxContexts.h"
+#include "matroska/KaxBlockData.h"
+#include "matroska/KaxCluster.h"
+
+START_LIBMATROSKA_NAMESPACE
+
+#if MATROSKA_VERSION == 1
+const EbmlSemantic KaxBlockGroup_ContextList[6] =
+#else // MATROSKA_VERSION
+const EbmlSemantic KaxBlockGroup_ContextList[9] =
+#endif // MATROSKA_VERSION
+{
+       EbmlSemantic(true,  true,  KaxBlock::ClassInfos),
+#if MATROSKA_VERSION >= 2
+       EbmlSemantic(false, true,  KaxBlockVirtual::ClassInfos),
+#endif // MATROSKA_VERSION
+       EbmlSemantic(false, true,  KaxBlockDuration::ClassInfos),
+       EbmlSemantic(false, true,  KaxSlices::ClassInfos),
+       EbmlSemantic(true,  true,  KaxReferencePriority::ClassInfos),
+       EbmlSemantic(false, false, KaxReferenceBlock::ClassInfos),
+#if MATROSKA_VERSION >= 2
+       EbmlSemantic(false, true,  KaxReferenceVirtual::ClassInfos),
+       EbmlSemantic(false, true,  KaxCodecState::ClassInfos),
+#endif // MATROSKA_VERSION
+       EbmlSemantic(false, true,  KaxBlockAdditions::ClassInfos),
+};
+
+const EbmlSemantic KaxBlockAdditions_ContextList[1] =
+{
+       EbmlSemantic(true,  false,  KaxBlockMore::ClassInfos)
+};
+
+const EbmlSemantic KaxBlockMore_ContextList[2] =
+{
+       EbmlSemantic(true,  true,  KaxBlockAddID::ClassInfos),
+       EbmlSemantic(true,  true,  KaxBlockAdditional::ClassInfos)
+};
+
+EbmlId KaxBlockGroup_TheId     (0xA0, 1);
+EbmlId KaxBlock_TheId          (0xA1, 1);
+EbmlId KaxSimpleBlock_TheId    (0xA3, 1);
+EbmlId KaxBlockDuration_TheId  (0x9B, 1);
+#if MATROSKA_VERSION >= 2
+EbmlId KaxBlockVirtual_TheId   (0xA2, 1);
+EbmlId KaxCodecState_TheId     (0xA4, 1);
+#endif // MATROSKA_VERSION
+EbmlId KaxBlockAdditions_TheId (0x75A1, 2);
+EbmlId KaxBlockMore_TheId      (0xA6, 1);
+EbmlId KaxBlockAddID_TheId     (0xEE, 1);
+EbmlId KaxBlockAdditional_TheId(0xA5, 1);
+
+const EbmlSemanticContext KaxBlockGroup_Context = EbmlSemanticContext(countof(KaxBlockGroup_ContextList), KaxBlockGroup_ContextList, &KaxCluster_Context, *GetKaxGlobal_Context, &KaxBlockGroup::ClassInfos);
+const EbmlSemanticContext KaxBlock_Context = EbmlSemanticContext(0, NULL, &KaxBlockGroup_Context, *GetKaxGlobal_Context, &KaxBlock::ClassInfos);
+const EbmlSemanticContext KaxBlockDuration_Context = EbmlSemanticContext(0, NULL, &KaxBlockGroup_Context, *GetKaxGlobal_Context, &KaxBlockDuration::ClassInfos);
+#if MATROSKA_VERSION >= 2
+const EbmlSemanticContext KaxSimpleBlock_Context = EbmlSemanticContext(0, NULL, &KaxCluster_Context, *GetKaxGlobal_Context, &KaxSimpleBlock::ClassInfos);
+const EbmlSemanticContext KaxBlockVirtual_Context = EbmlSemanticContext(0, NULL, &KaxBlockGroup_Context, *GetKaxGlobal_Context, &KaxBlockVirtual::ClassInfos);
+const EbmlSemanticContext KaxCodecState_Context = EbmlSemanticContext(0, NULL, &KaxBlockGroup_Context, *GetKaxGlobal_Context, &KaxCodecState::ClassInfos);
+#endif // MATROSKA_VERSION
+const EbmlSemanticContext KaxBlockAdditions_Context = EbmlSemanticContext(countof(KaxBlockAdditions_ContextList), KaxBlockAdditions_ContextList, &KaxBlockGroup_Context, *GetKaxGlobal_Context, &KaxBlockAdditions::ClassInfos);
+const EbmlSemanticContext KaxBlockMore_Context = EbmlSemanticContext(countof(KaxBlockMore_ContextList), KaxBlockMore_ContextList, &KaxBlockAdditions_Context, *GetKaxGlobal_Context, &KaxBlockMore::ClassInfos);
+const EbmlSemanticContext KaxBlockAddID_Context = EbmlSemanticContext(0, NULL, &KaxBlockMore_Context, *GetKaxGlobal_Context, &KaxBlockAddID::ClassInfos);
+const EbmlSemanticContext KaxBlockAdditional_Context = EbmlSemanticContext(0, NULL, &KaxBlockMore_Context, *GetKaxGlobal_Context, &KaxBlockAdditional::ClassInfos);
+
+const EbmlCallbacks KaxBlockGroup::ClassInfos(KaxBlockGroup::Create, KaxBlockGroup_TheId, "BlockGroup", KaxBlockGroup_Context);
+const EbmlCallbacks KaxBlock::ClassInfos(KaxBlock::Create, KaxBlock_TheId, "Block", KaxBlock_Context);
+const EbmlCallbacks KaxBlockDuration::ClassInfos(KaxBlockDuration::Create, KaxBlockDuration_TheId, "BlockDuration", KaxBlockDuration_Context);
+#if MATROSKA_VERSION >= 2
+const EbmlCallbacks KaxSimpleBlock::ClassInfos(KaxSimpleBlock::Create, KaxSimpleBlock_TheId, "SimpleBlock", KaxSimpleBlock_Context);
+const EbmlCallbacks KaxBlockVirtual::ClassInfos(KaxBlockVirtual::Create, KaxBlockVirtual_TheId, "BlockVirtual", KaxBlockVirtual_Context);
+const EbmlCallbacks KaxCodecState::ClassInfos(KaxCodecState::Create, KaxCodecState_TheId, "CodecState", KaxCodecState_Context);
+#endif // MATROSKA_VERSION
+const EbmlCallbacks KaxBlockAdditions::ClassInfos(KaxBlockAdditions::Create, KaxBlockAdditions_TheId, "BlockAdditions", KaxBlockAdditions_Context);
+const EbmlCallbacks KaxBlockMore::ClassInfos(KaxBlockMore::Create, KaxBlockMore_TheId, "BlockMore", KaxBlockMore_Context);
+const EbmlCallbacks KaxBlockAddID::ClassInfos(KaxBlockAddID::Create, KaxBlockAddID_TheId, "BlockAddID", KaxBlockAddID_Context);
+const EbmlCallbacks KaxBlockAdditional::ClassInfos(KaxBlockAdditional::Create, KaxBlockAdditional_TheId, "BlockAdditional", KaxBlockAdditional_Context);
+
+DataBuffer * DataBuffer::Clone()
+{
+       binary *ClonedData = (binary *)malloc(mySize * sizeof(binary));
+       assert(ClonedData != NULL);
+       memcpy(ClonedData, myBuffer ,mySize );
+
+       SimpleDataBuffer * result = new SimpleDataBuffer(ClonedData, mySize, 0);
+       result->bValidValue = bValidValue;
+       return result;
+}
+
+SimpleDataBuffer::SimpleDataBuffer(const SimpleDataBuffer & ToClone)
+ :DataBuffer((binary *)malloc(ToClone.mySize * sizeof(binary)), ToClone.mySize, myFreeBuffer)
+{
+       assert(myBuffer != NULL);
+       memcpy(myBuffer, ToClone.myBuffer ,mySize );
+       bValidValue = ToClone.bValidValue;
+}
+
+bool KaxInternalBlock::ValidateSize() const
+{
+       return (Size >= 4); /// for the moment
+}
+
+KaxInternalBlock::~KaxInternalBlock()
+{
+       ReleaseFrames();
+}
+
+KaxInternalBlock::KaxInternalBlock(const KaxInternalBlock & ElementToClone)
+ :EbmlBinary(ElementToClone)
+ ,myBuffers(ElementToClone.myBuffers.size())
+ ,Timecode(ElementToClone.Timecode)
+ ,LocalTimecode(ElementToClone.LocalTimecode)
+ ,bLocalTimecodeUsed(ElementToClone.bLocalTimecodeUsed)
+ ,TrackNumber(ElementToClone.TrackNumber)
+ ,ParentCluster(ElementToClone.ParentCluster) ///< \todo not exactly
+{
+       // add a clone of the list
+       std::vector<DataBuffer *>::const_iterator Itr = ElementToClone.myBuffers.begin();
+       std::vector<DataBuffer *>::iterator myItr = myBuffers.begin();
+       while (Itr != ElementToClone.myBuffers.end())
+       {
+               *myItr = (*Itr)->Clone();
+               Itr++; myItr++;
+       }
+}
+
+
+KaxBlockGroup::~KaxBlockGroup()
+{
+//NOTE("KaxBlockGroup::~KaxBlockGroup");
+}
+
+KaxBlockGroup::KaxBlockGroup()
+ :EbmlMaster(KaxBlockGroup_Context)
+ ,ParentCluster(NULL)
+ ,ParentTrack(NULL)
+{}
+
+KaxBlockAdditions::KaxBlockAdditions()
+ :EbmlMaster(KaxBlockAdditions_Context)
+{}
+
+KaxBlockMore::KaxBlockMore()
+ :EbmlMaster(KaxBlockMore_Context)
+{}
+
+/*!
+       \todo handle flags
+       \todo hardcoded limit of the number of frames in a lace should be a parameter
+       \return true if more frames can be added to this Block
+*/
+bool KaxInternalBlock::AddFrame(const KaxTrackEntry & track, uint64 timecode, DataBuffer & buffer, LacingType lacing, bool invisible)
+{
+       bValueIsSet = true;
+       if (myBuffers.size() == 0) {
+               // first frame
+               Timecode = timecode;
+               TrackNumber = track.TrackNumber();
+               mInvisible = invisible;
+               mLacing = lacing;
+       }
+       myBuffers.push_back(&buffer);
+
+       // we don't allow more than 8 frames in a Block because the overhead improvement is minimal
+       if (myBuffers.size() >= 8 || lacing == LACING_NONE)
+               return false;
+
+       if (lacing == LACING_XIPH)
+               // decide wether a new frame can be added or not
+               // a frame in a lace is not efficient when the place necessary to code it in a lace is bigger 
+               // than the size of a simple Block. That means more than 6 bytes (4 in struct + 2 for EBML) to code the size
+               return (buffer.Size() < 6*0xFF);
+       else
+               return true;
+}
+
+/*!
+       \return Returns the lacing type that produces the smallest footprint.
+*/
+LacingType KaxInternalBlock::GetBestLacingType() const {
+       int XiphLacingSize, EbmlLacingSize, i;
+       bool SameSize = true;
+
+       if (myBuffers.size() <= 1)
+               return LACING_NONE;
+
+       XiphLacingSize = 1; // Number of laces is stored in 1 byte.
+       EbmlLacingSize = 1;
+       for (i = 0; i < (int)myBuffers.size() - 1; i++) {
+               if (myBuffers[i]->Size() != myBuffers[i + 1]->Size())
+                       SameSize = false;
+               XiphLacingSize += myBuffers[i]->Size() / 255 + 1;
+       }
+       EbmlLacingSize += CodedSizeLength(myBuffers[0]->Size(), 0, bSizeIsFinite);
+       for (i = 1; i < (int)myBuffers.size() - 1; i++)
+               EbmlLacingSize += CodedSizeLengthSigned(int64(myBuffers[i]->Size()) - int64(myBuffers[i - 1]->Size()), 0);
+       if (SameSize)
+               return LACING_FIXED;
+       else if (XiphLacingSize < EbmlLacingSize)
+               return LACING_XIPH;
+       else
+               return LACING_EBML;
+}
+
+uint64 KaxInternalBlock::UpdateSize(bool bSaveDefault, bool bForceRender)
+{
+       LacingType LacingHere;
+       assert(Data == NULL); // Data is not used for KaxInternalBlock
+       assert(TrackNumber < 0x4000); // no more allowed for the moment
+       unsigned int i;
+
+       // compute the final size of the data
+       switch (myBuffers.size()) {
+               case 0:
+                       Size = 0;
+                       break;
+               case 1:
+                       Size = 4 + myBuffers[0]->Size();
+                       break;
+               default:
+                       Size = 4 + 1; // 1 for the lacing head
+                       if (mLacing == LACING_AUTO)
+                               LacingHere = GetBestLacingType();
+                       else
+                               LacingHere = mLacing;
+                       switch (LacingHere)
+                       {
+                       case LACING_XIPH:
+                               for (i=0; i<myBuffers.size()-1; i++) {
+                                       Size += myBuffers[i]->Size() + (myBuffers[i]->Size() / 0xFF + 1);
+                               }
+                               break;
+                       case LACING_EBML:
+                               Size += myBuffers[0]->Size() + CodedSizeLength(myBuffers[0]->Size(), 0, bSizeIsFinite);
+                               for (i=1; i<myBuffers.size()-1; i++) {
+                                       Size += myBuffers[i]->Size() 
+                                               + CodedSizeLengthSigned(int64(myBuffers[i]->Size()) - int64(myBuffers[i-1]->Size()), 0);;
+                               }
+                               break;
+                       case LACING_FIXED:
+                               for (i=0; i<myBuffers.size()-1; i++) {
+                                       Size += myBuffers[i]->Size();
+                               }
+                               break;
+                       default:
+                               assert(0);
+                       }
+                       // Size of the last frame (not in lace)
+                       Size += myBuffers[i]->Size();
+                       break;
+       }
+
+       if (TrackNumber >= 0x80)
+               Size++; // the size will be coded with one more octet
+
+       return Size;
+}
+
+#if MATROSKA_VERSION >= 2
+KaxBlockVirtual::KaxBlockVirtual(const KaxBlockVirtual & ElementToClone)
+ :EbmlBinary(ElementToClone)
+ ,Timecode(ElementToClone.Timecode)
+ ,TrackNumber(ElementToClone.TrackNumber)
+ ,ParentCluster(ElementToClone.ParentCluster) ///< \todo not exactly
+{
+       Data = DataBlock;
+}
+
+uint64 KaxBlockVirtual::UpdateSize(bool bSaveDefault, bool bForceRender)
+{
+       assert(TrackNumber < 0x4000);
+       binary *cursor = Data;
+       // fill data
+       if (TrackNumber < 0x80) {
+               *cursor++ = TrackNumber | 0x80; // set the first bit to 1 
+       } else {
+               *cursor++ = (TrackNumber >> 8) | 0x40; // set the second bit to 1
+               *cursor++ = TrackNumber & 0xFF;
+       }
+
+       assert(ParentCluster != NULL);
+       int16 ActualTimecode = ParentCluster->GetBlockLocalTimecode(Timecode);
+       big_int16 b16(ActualTimecode);
+       b16.Fill(cursor);
+       cursor += 2;
+
+       *cursor++ = 0; // flags
+
+       return Size;
+}
+#endif // MATROSKA_VERSION
+
+/*!
+       \todo more optimisation is possible (render the Block head and don't copy the buffer in memory, care should be taken with the allocation of Data)
+       \todo the actual timecode to write should be retrieved from the Cluster from here
+*/
+uint32 KaxInternalBlock::RenderData(IOCallback & output, bool bForceRender, bool bSaveDefault)
+{
+       if (myBuffers.size() == 0) {
+               return 0;
+       } else {
+               assert(TrackNumber < 0x4000);
+               binary BlockHead[5], *cursor = BlockHead;
+               unsigned int i;
+
+               if (myBuffers.size() == 1) {
+                       Size = 4;
+                       mLacing = LACING_NONE;
+               } else {
+                       if (mLacing == LACING_NONE)
+                               mLacing = LACING_EBML; // supposedly the best of all
+                       Size = 4 + 1; // 1 for the lacing head (number of laced elements)
+               }
+               if (TrackNumber > 0x80)
+                       Size++;
+
+               // write Block Head
+               if (TrackNumber < 0x80) {
+                       *cursor++ = TrackNumber | 0x80; // set the first bit to 1 
+               } else {
+                       *cursor++ = (TrackNumber >> 8) | 0x40; // set the second bit to 1
+                       *cursor++ = TrackNumber & 0xFF;
+               }
+
+               assert(ParentCluster != NULL);
+               int16 ActualTimecode = ParentCluster->GetBlockLocalTimecode(Timecode);
+               big_int16 b16(ActualTimecode);
+               b16.Fill(cursor);
+               cursor += 2;
+
+               *cursor = 0; // flags
+
+               if (mLacing == LACING_AUTO) {
+                       mLacing = GetBestLacingType();
+               }
+
+               // invisible flag
+               if (mInvisible)
+                       *cursor = 0x08;
+
+               if (bIsSimple) {
+                       if (bIsKeyframe)
+                               *cursor |= 0x80;
+                       if (bIsDiscardable)
+                               *cursor |= 0x01;
+               }
+               
+               // lacing flag
+               switch (mLacing)
+               {
+               case LACING_XIPH:
+                       *cursor++ |= 0x02;
+                       break;
+               case LACING_EBML:
+                       *cursor++ |= 0x06;
+                       break;
+               case LACING_FIXED:
+                       *cursor++ |= 0x04;
+                       break;
+               case LACING_NONE:
+                       break;
+           default:
+                       assert(0);
+               }
+
+               output.writeFully(BlockHead, 4 + ((TrackNumber > 0x80) ? 1 : 0));
+
+               binary tmpValue;
+               switch (mLacing)
+               {
+               case LACING_XIPH:
+                       // number of laces
+                       tmpValue = myBuffers.size()-1;
+                       output.writeFully(&tmpValue, 1);
+
+                       // set the size of each member in the lace
+                       for (i=0; i<myBuffers.size()-1; i++) {
+                               tmpValue = 0xFF;
+                               uint16 tmpSize = myBuffers[i]->Size();
+                               while (tmpSize >= 0xFF) {
+                                       output.writeFully(&tmpValue, 1);
+                                       Size++;
+                                       tmpSize -= 0xFF;
+                               }
+                               tmpValue = binary(tmpSize);
+                               output.writeFully(&tmpValue, 1);
+                               Size++;
+                       }
+                       break;
+               case LACING_EBML:
+                       // number of laces
+                       tmpValue = myBuffers.size()-1;
+                       output.writeFully(&tmpValue, 1);
+
+                       {
+                               int64 _Size;
+                               int _CodedSize;
+                               binary _FinalHead[8]; // 64 bits max coded size
+
+                               _Size = myBuffers[0]->Size();
+
+                               _CodedSize = CodedSizeLength(_Size, 0, bSizeIsFinite);
+
+                               // first size in the lace is not a signed
+                               CodedValueLength(_Size, _CodedSize, _FinalHead);
+                               output.writeFully(_FinalHead, _CodedSize);
+                               Size += _CodedSize;
+
+                               // set the size of each member in the lace
+                               for (i=1; i<myBuffers.size()-1; i++) {
+                                       _Size = int64(myBuffers[i]->Size()) - int64(myBuffers[i-1]->Size());
+                                       _CodedSize = CodedSizeLengthSigned(_Size, 0);
+                                       CodedValueLengthSigned(_Size, _CodedSize, _FinalHead);
+                                       output.writeFully(_FinalHead, _CodedSize);
+                                       Size += _CodedSize;
+                               }
+                       }
+                       break;
+               case LACING_FIXED:
+                       // number of laces
+                       tmpValue = myBuffers.size()-1;
+                       output.writeFully(&tmpValue, 1);
+                       break;
+               case LACING_NONE:
+                       break;
+           default:
+                       assert(0);
+               }
+
+               // put the data of each frame
+               for (i=0; i<myBuffers.size(); i++) {
+                       output.writeFully(myBuffers[i]->Buffer(), myBuffers[i]->Size());
+                       Size += myBuffers[i]->Size();
+               }
+       }
+
+       return Size;
+}
+
+uint64 KaxInternalBlock::ReadInternalHead(IOCallback & input)
+{
+       binary Buffer[5], *cursor = Buffer;
+       uint64 Result = input.read(cursor, 4);
+       if (Result != 4)
+               return Result;
+       
+       // update internal values
+       TrackNumber = *cursor++;
+       if ((TrackNumber & 0x80) == 0) {
+               // there is extra data
+               if ((TrackNumber & 0x40) == 0) {
+                       // We don't support track numbers that large !
+                       return Result;
+               }
+               Result += input.read(&Buffer[4], 1);
+               TrackNumber = (TrackNumber & 0x3F) << 8;
+               TrackNumber += *cursor++;
+       } else {
+               TrackNumber &= 0x7F;
+       }
+
+    
+       big_int16 b16;
+       b16.Eval(cursor);
+       assert(ParentCluster != NULL);
+       Timecode = ParentCluster->GetBlockGlobalTimecode(int16(b16));
+       bLocalTimecodeUsed = false;
+       cursor += 2;
+
+       return Result;
+}
+
+/*!
+       \todo better zero copy handling
+*/
+uint64 KaxInternalBlock::ReadData(IOCallback & input, ScopeMode ReadFully)
+{
+       uint64 Result;
+
+       FirstFrameLocation = input.getFilePointer(); // will be updated accordingly below
+
+       if (ReadFully == SCOPE_ALL_DATA)
+       {
+               Result = EbmlBinary::ReadData(input, ReadFully);
+               binary *cursor = Data;
+               uint8 BlockHeadSize = 4;
+
+               // update internal values
+               TrackNumber = *cursor++;
+               if ((TrackNumber & 0x80) == 0) {
+                       // there is extra data
+                       if ((TrackNumber & 0x40) == 0) {
+                               // We don't support track numbers that large !
+                               return Result;
+                       }
+                       TrackNumber = (TrackNumber & 0x3F) << 8;
+                       TrackNumber += *cursor++;
+                       BlockHeadSize++;
+               } else {
+                       TrackNumber &= 0x7F;
+               }
+
+               big_int16 b16;
+               b16.Eval(cursor);
+               LocalTimecode = int16(b16);
+               bLocalTimecodeUsed = true;
+               cursor += 2;
+
+               if (EbmlId(*this) == KaxSimpleBlock::ClassInfos.GlobalId) {
+                       bIsKeyframe = (*cursor & 0x80) != 0;
+                       bIsDiscardable = (*cursor & 0x01) != 0;
+               }
+               mInvisible = (*cursor & 0x08) >> 3;
+               mLacing = LacingType((*cursor++ & 0x06) >> 1);
+
+               // put all Frames in the list
+               if (mLacing == LACING_NONE) {
+                       FirstFrameLocation += cursor - Data;
+                       DataBuffer * soloFrame = new DataBuffer(cursor, Size - BlockHeadSize);
+                       myBuffers.push_back(soloFrame);
+                       SizeList.resize(1);
+                       SizeList[0] = Size - BlockHeadSize;
+               } else {
+                       // read the number of frames in the lace
+                       uint32 LastBufferSize = Size - BlockHeadSize - 1; // 1 for number of frame
+                       uint8 FrameNum = *cursor++; // number of frames in the lace - 1
+                       // read the list of frame sizes
+                       uint8 Index;
+                       int32 FrameSize;
+                       uint32 SizeRead;
+                       uint64 SizeUnknown;
+
+                       SizeList.resize(FrameNum + 1);
+
+                       switch (mLacing)
+                       {
+                       case LACING_XIPH:
+                               for (Index=0; Index<FrameNum; Index++) {
+                                       // get the size of the frame
+                                       FrameSize = 0;
+                                       do {
+                                               FrameSize += uint8(*cursor);
+                                               LastBufferSize--;
+                                       } while (*cursor++ == 0xFF);
+                                       SizeList[Index] = FrameSize;
+                                       LastBufferSize -= FrameSize;
+                               }
+                               SizeList[Index] = LastBufferSize;
+                               break;
+                       case LACING_EBML:
+                               SizeRead = LastBufferSize;
+                               FrameSize = ReadCodedSizeValue(cursor, SizeRead, SizeUnknown);
+                               SizeList[0] = FrameSize;
+                               cursor += SizeRead;
+                               LastBufferSize -= FrameSize + SizeRead;
+
+                               for (Index=1; Index<FrameNum; Index++) {
+                                       // get the size of the frame
+                                       SizeRead = LastBufferSize;
+                                       FrameSize += ReadCodedSizeSignedValue(cursor, SizeRead, SizeUnknown);
+                                       SizeList[Index] = FrameSize;
+                                       cursor += SizeRead;
+                                       LastBufferSize -= FrameSize + SizeRead;
+                               }
+                               SizeList[Index] = LastBufferSize;
+                               break;
+                       case LACING_FIXED:
+                               for (Index=0; Index<=FrameNum; Index++) {
+                                       // get the size of the frame
+                                       SizeList[Index] = LastBufferSize / (FrameNum + 1);
+                               }
+                               break;
+                       default: // other lacing not supported
+                               assert(0);
+                       }
+
+                       FirstFrameLocation += cursor - Data;
+
+                       for (Index=0; Index<=FrameNum; Index++) {
+                               DataBuffer * lacedFrame = new DataBuffer(cursor, SizeList[Index]);
+                               myBuffers.push_back(lacedFrame);
+                               cursor += SizeList[Index];
+                       }
+               }
+               bValueIsSet = true;
+       }
+       else if (ReadFully == SCOPE_PARTIAL_DATA)
+       {
+               binary _TempHead[5];
+               Result = input.read(_TempHead, 5);
+               binary *cursor = _TempHead;
+               binary *_tmpBuf;
+               uint8 BlockHeadSize = 4;
+
+               // update internal values
+               TrackNumber = *cursor++;
+               if ((TrackNumber & 0x80) == 0) {
+                       // there is extra data
+                       if ((TrackNumber & 0x40) == 0) {
+                               // We don't support track numbers that large !
+                               return Result;
+                       }
+                       TrackNumber = (TrackNumber & 0x3F) << 8;
+                       TrackNumber += *cursor++;
+                       BlockHeadSize++;
+               } else {
+                       TrackNumber &= 0x7F;
+               }
+
+               big_int16 b16;
+               b16.Eval(cursor);
+               LocalTimecode = int16(b16);
+               bLocalTimecodeUsed = true;
+               cursor += 2;
+
+               if (EbmlId(*this) == KaxSimpleBlock::ClassInfos.GlobalId) {
+                       bIsKeyframe = (*cursor & 0x80) != 0;
+                       bIsDiscardable = (*cursor & 0x01) != 0;
+               }
+               mInvisible = (*cursor & 0x08) >> 3;
+               mLacing = LacingType((*cursor++ & 0x06) >> 1);
+               if (cursor == &_TempHead[4])
+               {
+                       _TempHead[0] = _TempHead[4];
+               } else {
+                       Result += input.read(_TempHead, 1);
+               }
+
+               FirstFrameLocation += cursor - _TempHead;
+
+               // put all Frames in the list
+               if (mLacing != LACING_NONE) {
+                       // read the number of frames in the lace
+                       uint32 LastBufferSize = Size - BlockHeadSize - 1; // 1 for number of frame
+                       uint8 FrameNum = _TempHead[0]; // number of frames in the lace - 1
+                       // read the list of frame sizes
+                       uint8 Index;
+                       int32 FrameSize;
+                       uint32 SizeRead;
+                       uint64 SizeUnknown;
+
+                       SizeList.resize(FrameNum + 1);
+
+                       switch (mLacing)
+                       {
+                       case LACING_XIPH:
+                               for (Index=0; Index<FrameNum; Index++) {
+                                       // get the size of the frame
+                                       FrameSize = 0;
+                                       do {
+                                               Result += input.read(_TempHead, 1);
+                                               FrameSize += uint8(_TempHead[0]);
+                                               LastBufferSize--;
+
+                                               FirstFrameLocation++;
+                                       } while (_TempHead[0] == 0xFF);
+
+                                       FirstFrameLocation++;
+                                       SizeList[Index] = FrameSize;
+                                       LastBufferSize -= FrameSize;
+                               }
+                               SizeList[Index] = LastBufferSize;
+                               break;
+                       case LACING_EBML:
+                               SizeRead = LastBufferSize;
+                               cursor = _tmpBuf = new binary[FrameNum*4]; /// \warning assume the mean size will be coded in less than 4 bytes
+                               Result += input.read(cursor, FrameNum*4);
+                               FrameSize = ReadCodedSizeValue(cursor, SizeRead, SizeUnknown);
+                               SizeList[0] = FrameSize;
+                               cursor += SizeRead;
+                               LastBufferSize -= FrameSize + SizeRead;
+
+                               for (Index=1; Index<FrameNum; Index++) {
+                                       // get the size of the frame
+                                       SizeRead = LastBufferSize;
+                                       FrameSize += ReadCodedSizeSignedValue(cursor, SizeRead, SizeUnknown);
+                                       SizeList[Index] = FrameSize;
+                                       cursor += SizeRead;
+                                       LastBufferSize -= FrameSize + SizeRead;
+                               }
+
+                               FirstFrameLocation += cursor - _tmpBuf;
+
+                               SizeList[Index] = LastBufferSize;
+                               delete [] _tmpBuf;
+                               break;
+                       case LACING_FIXED:
+                               for (Index=0; Index<=FrameNum; Index++) {
+                                       // get the size of the frame
+                                       SizeList[Index] = LastBufferSize / (FrameNum + 1);
+                               }
+                               break;
+                       default: // other lacing not supported
+                               assert(0);
+                       }
+               } else {
+                       SizeList.resize(1);
+                       SizeList[0] = Size - BlockHeadSize;
+               }
+               bValueIsSet = false;
+               Result = Size;
+       } else {
+               bValueIsSet = false;
+               Result = Size;
+       }
+
+       return Result;
+}
+
+bool KaxBlockGroup::AddFrame(const KaxTrackEntry & track, uint64 timecode, DataBuffer & buffer, LacingType lacing)
+{
+       KaxBlock & theBlock = GetChild<KaxBlock>(*this);
+       assert(ParentCluster != NULL);
+       theBlock.SetParent(*ParentCluster);
+       ParentTrack = &track;
+       return theBlock.AddFrame(track, timecode, buffer, lacing);
+}
+
+bool KaxBlockGroup::AddFrame(const KaxTrackEntry & track, uint64 timecode, DataBuffer & buffer, const KaxBlockGroup & PastBlock, LacingType lacing)
+{
+//     assert(past_timecode < 0);
+
+       KaxBlock & theBlock = GetChild<KaxBlock>(*this);
+       assert(ParentCluster != NULL);
+       theBlock.SetParent(*ParentCluster);
+       ParentTrack = &track;
+       bool bRes = theBlock.AddFrame(track, timecode, buffer, lacing);
+
+       KaxReferenceBlock & thePastRef = GetChild<KaxReferenceBlock>(*this);
+       thePastRef.SetReferencedBlock(PastBlock);
+       thePastRef.SetParentBlock(*this);
+
+       return bRes;
+}
+
+bool KaxBlockGroup::AddFrame(const KaxTrackEntry & track, uint64 timecode, DataBuffer & buffer, const KaxBlockGroup & PastBlock, const KaxBlockGroup & ForwBlock, LacingType lacing)
+{
+//     assert(past_timecode < 0);
+
+//     assert(forw_timecode > 0);
+       
+       KaxBlock & theBlock = GetChild<KaxBlock>(*this);
+       assert(ParentCluster != NULL);
+       theBlock.SetParent(*ParentCluster);
+       ParentTrack = &track;
+       bool bRes = theBlock.AddFrame(track, timecode, buffer, lacing);
+
+       KaxReferenceBlock & thePastRef = GetChild<KaxReferenceBlock>(*this);
+       thePastRef.SetReferencedBlock(PastBlock);
+       thePastRef.SetParentBlock(*this);
+
+       KaxReferenceBlock & theFutureRef = AddNewChild<KaxReferenceBlock>(*this);
+       theFutureRef.SetReferencedBlock(ForwBlock);
+       theFutureRef.SetParentBlock(*this);
+
+       return bRes;
+}
+
+bool KaxBlockGroup::AddFrame(const KaxTrackEntry & track, uint64 timecode, DataBuffer & buffer, const KaxBlockBlob * PastBlock, const KaxBlockBlob * ForwBlock, LacingType lacing)
+{
+       KaxBlock & theBlock = GetChild<KaxBlock>(*this);
+       assert(ParentCluster != NULL);
+       theBlock.SetParent(*ParentCluster);
+       ParentTrack = &track;
+       bool bRes = theBlock.AddFrame(track, timecode, buffer, lacing);
+
+       if (PastBlock != NULL)
+       {
+               KaxReferenceBlock & thePastRef = GetChild<KaxReferenceBlock>(*this);
+               thePastRef.SetReferencedBlock(PastBlock);
+               thePastRef.SetParentBlock(*this);
+       }
+
+       if (ForwBlock != NULL)
+       {
+               KaxReferenceBlock & theFutureRef = AddNewChild<KaxReferenceBlock>(*this);
+               theFutureRef.SetReferencedBlock(ForwBlock);
+               theFutureRef.SetParentBlock(*this);
+       }
+
+       return bRes;
+}
+
+/*!
+       \todo we may cache the reference to the timecode block
+*/
+uint64 KaxBlockGroup::GlobalTimecode() const
+{
+       assert(ParentCluster != NULL); // impossible otherwise
+       KaxInternalBlock & MyBlock = *static_cast<KaxBlock *>(this->FindElt(KaxBlock::ClassInfos));
+       return MyBlock.GlobalTimecode();
+
+}
+
+uint16 KaxBlockGroup::TrackNumber() const
+{
+       KaxInternalBlock & MyBlock = *static_cast<KaxBlock *>(this->FindElt(KaxBlock::ClassInfos));
+       return MyBlock.TrackNum();
+}
+
+uint64 KaxBlockGroup::ClusterPosition() const
+{
+       assert(ParentCluster != NULL); // impossible otherwise
+       return ParentCluster->GetPosition();
+}
+
+uint64 KaxInternalBlock::ClusterPosition() const
+{
+       assert(ParentCluster != NULL); // impossible otherwise
+       return ParentCluster->GetPosition();
+}
+
+unsigned int KaxBlockGroup::ReferenceCount() const
+{
+       unsigned int Result = 0;
+       KaxReferenceBlock * MyBlockAdds = static_cast<KaxReferenceBlock *>(FindFirstElt(KaxReferenceBlock::ClassInfos));
+       if (MyBlockAdds != NULL) {
+               Result++;
+               while ((MyBlockAdds = static_cast<KaxReferenceBlock *>(FindNextElt(*MyBlockAdds))) != NULL)
+               {
+                       Result++;
+               }
+       }
+       return Result;
+}
+
+const KaxReferenceBlock & KaxBlockGroup::Reference(unsigned int Index) const
+{
+       KaxReferenceBlock * MyBlockAdds = static_cast<KaxReferenceBlock *>(FindFirstElt(KaxReferenceBlock::ClassInfos));
+       assert(MyBlockAdds != NULL); // call of a non existing reference
+       
+       while (Index != 0) {
+               MyBlockAdds = static_cast<KaxReferenceBlock *>(FindNextElt(*MyBlockAdds));
+               assert(MyBlockAdds != NULL);
+               Index--;
+       }
+       return *MyBlockAdds;
+}
+
+void KaxBlockGroup::ReleaseFrames()
+{
+       KaxInternalBlock & MyBlock = *static_cast<KaxBlock *>(this->FindElt(KaxBlock::ClassInfos));
+       MyBlock.ReleaseFrames();
+}
+
+void KaxInternalBlock::ReleaseFrames()
+{
+       // free the allocated Frames
+       int i;
+       for (i=myBuffers.size()-1; i>=0; i--) {
+               if (myBuffers[i] != NULL) {
+                       myBuffers[i]->FreeBuffer(*myBuffers[i]);
+                       delete myBuffers[i];
+                       myBuffers[i] = NULL;
+               }
+       }
+}
+
+void KaxBlockGroup::SetBlockDuration(uint64 TimeLength)
+{
+       assert(ParentTrack != NULL);
+       int64 scale = ParentTrack->GlobalTimecodeScale();
+       KaxBlockDuration & myDuration = *static_cast<KaxBlockDuration *>(FindFirstElt(KaxBlockDuration::ClassInfos, true));
+       *(static_cast<EbmlUInteger *>(&myDuration)) = TimeLength / uint64(scale);
+}
+
+bool KaxBlockGroup::GetBlockDuration(uint64 &TheTimecode) const
+{
+       KaxBlockDuration * myDuration = static_cast<KaxBlockDuration *>(FindElt(KaxBlockDuration::ClassInfos));
+       if (myDuration == NULL) {
+               return false;
+       }
+
+       assert(ParentTrack != NULL);
+       TheTimecode = uint64(*myDuration) * ParentTrack->GlobalTimecodeScale();
+       return true;
+}
+
+KaxBlockGroup::operator KaxInternalBlock &() {
+       KaxBlock & theBlock = GetChild<KaxBlock>(*this);
+       return theBlock;
+}
+
+void KaxBlockGroup::SetParent(KaxCluster & aParentCluster) {
+       ParentCluster = &aParentCluster;
+       KaxBlock & theBlock = GetChild<KaxBlock>(*this);
+       theBlock.SetParent( aParentCluster );
+}
+
+void KaxInternalBlock::SetParent(KaxCluster & aParentCluster)
+{
+       ParentCluster = &aParentCluster;
+       if (bLocalTimecodeUsed) {
+               Timecode = aParentCluster.GetBlockGlobalTimecode(LocalTimecode);
+               bLocalTimecodeUsed = false;
+       }
+}
+
+int64 KaxInternalBlock::GetDataPosition(size_t FrameNumber)
+{
+       int64 _Result = -1;
+
+       if (bValueIsSet && FrameNumber < SizeList.size())
+       {
+               _Result = FirstFrameLocation;
+       
+               size_t _Idx = 0;
+               while(FrameNumber--)
+               {
+                       _Result += SizeList[_Idx++];
+               }
+       }
+
+       return _Result;
+}
+
+int64 KaxInternalBlock::GetFrameSize(size_t FrameNumber)
+{
+       int64 _Result = -1;
+
+       if (/*bValueIsSet &&*/ FrameNumber < SizeList.size())
+       {
+               _Result = SizeList[FrameNumber];
+       }
+
+       return _Result;
+}
+
+KaxBlockBlob::operator KaxBlockGroup &()
+{
+       assert(!bUseSimpleBlock);
+       assert(Block.group);
+       return *Block.group;
+}
+
+KaxBlockBlob::operator const KaxBlockGroup &() const
+{
+       assert(!bUseSimpleBlock);
+       assert(Block.group);
+       return *Block.group;
+}
+
+KaxBlockBlob::operator KaxInternalBlock &()
+{
+       assert(Block.group);
+#if MATROSKA_VERSION >= 2
+       if (bUseSimpleBlock)
+               return *Block.simpleblock;
+       else
+#endif
+               return *Block.group;
+}
+
+KaxBlockBlob::operator const KaxInternalBlock &() const
+{
+       assert(Block.group);
+#if MATROSKA_VERSION >= 2
+       if (bUseSimpleBlock)
+               return *Block.simpleblock;
+       else
+#endif
+               return *Block.group;
+}
+
+#if MATROSKA_VERSION >= 2
+KaxBlockBlob::operator KaxSimpleBlock &()
+{
+       assert(bUseSimpleBlock);
+       assert(Block.simpleblock);
+       return *Block.simpleblock;
+}
+#endif
+
+bool KaxBlockBlob::AddFrameAuto(const KaxTrackEntry & track, uint64 timecode, DataBuffer & buffer, LacingType lacing, const KaxBlockBlob * PastBlock, const KaxBlockBlob * ForwBlock)
+{
+       bool bResult = false;
+#if MATROSKA_VERSION >= 2
+       if ((SimpleBlockMode == BLOCK_BLOB_ALWAYS_SIMPLE) || (SimpleBlockMode == BLOCK_BLOB_SIMPLE_AUTO && PastBlock == NULL && ForwBlock == NULL)) {
+               assert(bUseSimpleBlock == true);
+               if (Block.simpleblock == NULL) {
+                       Block.simpleblock = new KaxSimpleBlock();
+                       Block.simpleblock->SetParent(*ParentCluster);
+               }
+
+               bResult = Block.simpleblock->AddFrame(track, timecode, buffer, lacing);
+               if (PastBlock == NULL && ForwBlock == NULL) {
+                       Block.simpleblock->SetKeyframe(true);
+                       Block.simpleblock->SetDiscardable(false);
+               } else {
+                       Block.simpleblock->SetKeyframe(false);
+                       if ((ForwBlock == NULL || ((const KaxInternalBlock &)*ForwBlock).GlobalTimecode() <= timecode) &&
+                               (PastBlock == NULL || ((const KaxInternalBlock &)*PastBlock).GlobalTimecode() <= timecode))
+                               Block.simpleblock->SetDiscardable(false);
+                       else
+                               Block.simpleblock->SetDiscardable(true);
+               }
+       }
+       else
+#endif
+       {
+               if (ReplaceSimpleByGroup()) {
+                       bResult = Block.group->AddFrame(track, timecode, buffer, PastBlock, ForwBlock, lacing);
+               }
+       }
+
+       return bResult;
+}
+
+void KaxBlockBlob::SetParent(KaxCluster & parent_clust)
+{
+       ParentCluster = &parent_clust;
+}
+
+void KaxBlockBlob::SetBlockDuration(uint64 TimeLength)
+{
+       if (ReplaceSimpleByGroup())
+               Block.group->SetBlockDuration(TimeLength);
+}
+
+bool KaxBlockBlob::ReplaceSimpleByGroup()
+{
+       if (SimpleBlockMode== BLOCK_BLOB_ALWAYS_SIMPLE)
+               return false;
+
+       if (!bUseSimpleBlock) {
+               if (Block.group == NULL) {
+                       Block.group = new KaxBlockGroup();
+               }
+       }
+#if MATROSKA_VERSION >= 2
+       else 
+       {
+
+               if (Block.simpleblock != NULL) {
+                       KaxSimpleBlock *old_simpleblock = Block.simpleblock;
+                       Block.group = new KaxBlockGroup();
+                       // _TODO_ : move all the data to the blockgroup
+                       assert(false);
+                       // -> while(frame) AddFrame(myBuffer)
+                       delete old_simpleblock;
+               } else {
+                       Block.group = new KaxBlockGroup();
+               }
+       }
+#endif
+       if (ParentCluster != NULL)
+               Block.group->SetParent(*ParentCluster);
+
+       bUseSimpleBlock = false;
+       return true;
+}
+
+void KaxBlockBlob::SetBlockGroup( KaxBlockGroup &BlockRef )
+{
+       assert(!bUseSimpleBlock);
+       Block.group = &BlockRef;
+}
+
+END_LIBMATROSKA_NAMESPACE
diff --git a/src/KaxBlockData.cpp b/src/KaxBlockData.cpp
new file mode 100644 (file)
index 0000000..b204f27
--- /dev/null
@@ -0,0 +1,138 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxBlockData.cpp 1226 2005-10-13 21:16:43Z robux4 $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#include <cassert>
+
+#include "matroska/KaxBlockData.h"
+#include "matroska/KaxContexts.h"
+#include "matroska/KaxBlock.h"
+
+using namespace LIBEBML_NAMESPACE;
+
+START_LIBMATROSKA_NAMESPACE
+
+const EbmlSemantic KaxSlices_ContextList[1] =
+{
+       EbmlSemantic(false, false,  KaxTimeSlice::ClassInfos),
+};
+
+const EbmlSemantic KaxTimeSlice_ContextList[5] =
+{
+       EbmlSemantic(false, true,  KaxSliceLaceNumber::ClassInfos),
+       EbmlSemantic(false, true,  KaxSliceFrameNumber::ClassInfos),
+       EbmlSemantic(false, true,  KaxSliceBlockAddID::ClassInfos),
+       EbmlSemantic(false, true,  KaxSliceDelay::ClassInfos),
+       EbmlSemantic(false, true,  KaxSliceDuration::ClassInfos),
+};
+
+EbmlId KaxReferencePriority_TheId(0xFA, 1);
+EbmlId KaxReferenceBlock_TheId   (0xFB, 1);
+EbmlId KaxSlices_TheId           (0x8E, 1);
+EbmlId KaxTimeSlice_TheId        (0xE8, 1);
+EbmlId KaxSliceLaceNumber_TheId  (0xCC, 1);
+EbmlId KaxSliceFrameNumber_TheId (0xCD, 1);
+EbmlId KaxSliceBlockAddID_TheId  (0xCB, 1);
+EbmlId KaxSliceDelay_TheId       (0xCE, 1);
+EbmlId KaxSliceDuration_TheId    (0xCF, 1);
+#if MATROSKA_VERSION >= 2
+EbmlId KaxReferenceVirtual_TheId (0xFD, 1);
+#endif // MATROSKA_VERSION
+
+const EbmlSemanticContext KaxReferencePriority_Context = EbmlSemanticContext(0, NULL, &KaxBlockGroup_Context, *GetKaxGlobal_Context, &KaxReferencePriority::ClassInfos);
+const EbmlSemanticContext KaxReferenceBlock_Context = EbmlSemanticContext(0, NULL, &KaxBlockGroup_Context, *GetKaxGlobal_Context, &KaxReferenceBlock::ClassInfos);
+const EbmlSemanticContext KaxSlices_Context = EbmlSemanticContext(countof(KaxSlices_ContextList), KaxSlices_ContextList, &KaxBlockGroup_Context, *GetKaxGlobal_Context, &KaxSlices::ClassInfos);
+const EbmlSemanticContext KaxTimeSlice_Context = EbmlSemanticContext(countof(KaxTimeSlice_ContextList), KaxTimeSlice_ContextList, &KaxSlices_Context, *GetKaxGlobal_Context, &KaxTimeSlice::ClassInfos);
+const EbmlSemanticContext KaxSliceLaceNumber_Context = EbmlSemanticContext(0, NULL, &KaxTimeSlice_Context, *GetKaxGlobal_Context, &KaxSliceLaceNumber::ClassInfos);
+const EbmlSemanticContext KaxSliceFrameNumber_Context = EbmlSemanticContext(0, NULL, &KaxTimeSlice_Context, *GetKaxGlobal_Context, &KaxSliceFrameNumber::ClassInfos);
+const EbmlSemanticContext KaxSliceBlockAddID_Context = EbmlSemanticContext(0, NULL, &KaxTimeSlice_Context, *GetKaxGlobal_Context, &KaxSliceBlockAddID::ClassInfos);
+const EbmlSemanticContext KaxSliceDelay_Context = EbmlSemanticContext(0, NULL, &KaxTimeSlice_Context, *GetKaxGlobal_Context, &KaxSliceDelay::ClassInfos);
+const EbmlSemanticContext KaxSliceDuration_Context = EbmlSemanticContext(0, NULL, &KaxTimeSlice_Context, *GetKaxGlobal_Context, &KaxSliceDuration::ClassInfos);
+#if MATROSKA_VERSION >= 2
+const EbmlSemanticContext KaxReferenceVirtual_Context = EbmlSemanticContext(0, NULL, &KaxBlockGroup_Context, *GetKaxGlobal_Context, &KaxReferenceVirtual::ClassInfos);
+#endif // MATROSKA_VERSION
+
+const EbmlCallbacks KaxReferencePriority::ClassInfos(KaxReferencePriority::Create, KaxReferencePriority_TheId, "FlagReferenced", KaxReferencePriority_Context);
+const EbmlCallbacks KaxReferenceBlock::ClassInfos(KaxReferenceBlock::Create, KaxReferenceBlock_TheId, "ReferenceBlock", KaxReferenceBlock_Context);
+const EbmlCallbacks KaxSlices::ClassInfos(KaxSlices::Create, KaxSlices_TheId, "Slices", KaxSlices_Context);
+const EbmlCallbacks KaxTimeSlice::ClassInfos(KaxTimeSlice::Create, KaxTimeSlice_TheId, "TimeSlice", KaxTimeSlice_Context);
+const EbmlCallbacks KaxSliceLaceNumber::ClassInfos(KaxSliceLaceNumber::Create, KaxSliceLaceNumber_TheId, "SliceLaceNumber", KaxSliceLaceNumber_Context);
+const EbmlCallbacks KaxSliceFrameNumber::ClassInfos(KaxSliceFrameNumber::Create, KaxSliceFrameNumber_TheId, "SliceFrameNumber", KaxSliceFrameNumber_Context);
+const EbmlCallbacks KaxSliceBlockAddID::ClassInfos(KaxSliceBlockAddID::Create, KaxSliceBlockAddID_TheId, "SliceBlockAddID", KaxSliceBlockAddID_Context);
+const EbmlCallbacks KaxSliceDelay::ClassInfos(KaxSliceDelay::Create, KaxSliceDelay_TheId, "SliceDelay", KaxSliceDelay_Context);
+const EbmlCallbacks KaxSliceDuration::ClassInfos(KaxSliceDuration::Create, KaxSliceDuration_TheId, "SliceDuration", KaxSliceDuration_Context);
+#if MATROSKA_VERSION >= 2
+const EbmlCallbacks KaxReferenceVirtual::ClassInfos(KaxReferenceVirtual::Create, KaxReferenceVirtual_TheId, "ReferenceVirtual", KaxReferenceVirtual_Context);
+#endif // MATROSKA_VERSION
+
+KaxSlices::KaxSlices()
+ :EbmlMaster(KaxSlices_Context)
+{}
+
+KaxTimeSlice::KaxTimeSlice()
+ :EbmlMaster(KaxTimeSlice_Context)
+{}
+
+const KaxBlockBlob & KaxReferenceBlock::RefBlock() const
+{
+       assert(RefdBlock != NULL);
+       return *RefdBlock;
+}
+
+uint64 KaxReferenceBlock::UpdateSize(bool bSaveDefault, bool bForceRender)
+{
+       if (!bTimecodeSet) {
+               assert(RefdBlock != NULL);
+               assert(ParentBlock != NULL);
+
+               const KaxInternalBlock &block = *RefdBlock;
+               Value = (int64(block.GlobalTimecode()) - int64(ParentBlock->GlobalTimecode())) / int64(ParentBlock->GlobalTimecodeScale());
+       }
+       return EbmlSInteger::UpdateSize(bSaveDefault, bForceRender);
+}
+
+void KaxReferenceBlock::SetReferencedBlock(const KaxBlockBlob * aRefdBlock)
+{
+       assert(RefdBlock == NULL);
+       assert(aRefdBlock != NULL);
+       RefdBlock = aRefdBlock; 
+       bValueIsSet = true;
+}
+
+void KaxReferenceBlock::SetReferencedBlock(const KaxBlockGroup & aRefdBlock)
+{
+       KaxBlockBlob *block_blob = new KaxBlockBlob(BLOCK_BLOB_NO_SIMPLE);
+       block_blob->SetBlockGroup(*const_cast<KaxBlockGroup*>(&aRefdBlock));
+       RefdBlock = block_blob; 
+       bValueIsSet = true;
+}
+
+END_LIBMATROSKA_NAMESPACE
diff --git a/src/KaxChapters.cpp b/src/KaxChapters.cpp
new file mode 100644 (file)
index 0000000..cbb163c
--- /dev/null
@@ -0,0 +1,208 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxChapters.cpp 1201 2005-08-30 14:28:27Z robux4 $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#include "matroska/KaxChapters.h"
+#include "matroska/KaxContexts.h"
+
+// sub elements
+START_LIBMATROSKA_NAMESPACE
+
+EbmlSemantic KaxChapters_ContextList[1] =
+{
+    EbmlSemantic(true, false,  KaxEditionEntry::ClassInfos),
+};
+
+EbmlSemantic KaxEditionEntry_ContextList[5] =
+{
+    EbmlSemantic(false, true , KaxEditionUID::ClassInfos),
+    EbmlSemantic(true , true , KaxEditionFlagHidden::ClassInfos),
+    EbmlSemantic(true , true , KaxEditionFlagDefault::ClassInfos),
+    EbmlSemantic(false, true , KaxEditionFlagOrdered::ClassInfos),
+    EbmlSemantic(true , false, KaxChapterAtom::ClassInfos),
+};
+
+EbmlSemantic KaxChapterAtom_ContextList[12] =
+{
+    EbmlSemantic(false, false, KaxChapterAtom::ClassInfos),
+    EbmlSemantic(true,  true,  KaxChapterUID::ClassInfos),
+    EbmlSemantic(true,  true,  KaxChapterTimeStart::ClassInfos),
+    EbmlSemantic(false, true,  KaxChapterTimeEnd::ClassInfos),
+    EbmlSemantic(true , true,  KaxChapterFlagHidden::ClassInfos),
+    EbmlSemantic(true , true,  KaxChapterFlagEnabled::ClassInfos),
+    EbmlSemantic(false, true,  KaxChapterSegmentUID::ClassInfos),
+    EbmlSemantic(false, true,  KaxChapterSegmentEditionUID::ClassInfos),
+    EbmlSemantic(false, true,  KaxChapterPhysicalEquiv::ClassInfos),
+    EbmlSemantic(false, true,  KaxChapterTrack::ClassInfos),
+    EbmlSemantic(false, false, KaxChapterDisplay::ClassInfos),
+    EbmlSemantic(false, false, KaxChapterProcess::ClassInfos),
+};
+
+EbmlSemantic KaxChapterTrack_ContextList[1] =
+{
+    EbmlSemantic(true, false, KaxChapterTrackNumber::ClassInfos),
+};
+
+EbmlSemantic KaxChapterDisplay_ContextList[3] =
+{
+    EbmlSemantic(true,  true,  KaxChapterString::ClassInfos),
+    EbmlSemantic(true,  false, KaxChapterLanguage::ClassInfos),
+    EbmlSemantic(false, false, KaxChapterCountry::ClassInfos),
+};
+
+EbmlSemantic KaxChapterProcess_ContextList[3] =
+{
+    EbmlSemantic(true,  true,  KaxChapterProcessCodecID::ClassInfos),
+    EbmlSemantic(false, true,  KaxChapterProcessPrivate::ClassInfos),
+    EbmlSemantic(false, false, KaxChapterProcessCommand::ClassInfos),
+};
+
+EbmlSemantic KaxChapterProcessCommand_ContextList[2] =
+{
+    EbmlSemantic(true,  true,  KaxChapterProcessTime::ClassInfos),
+    EbmlSemantic(true,  true,  KaxChapterProcessData::ClassInfos),
+};
+
+const EbmlSemanticContext KaxChapters_Context = EbmlSemanticContext(countof(KaxChapters_ContextList), KaxChapters_ContextList, &KaxSegment_Context, *GetKaxGlobal_Context, &KaxChapters::ClassInfos);
+const EbmlSemanticContext KaxEditionEntry_Context = EbmlSemanticContext(countof(KaxEditionEntry_ContextList), KaxEditionEntry_ContextList, &KaxChapters_Context, *GetKaxGlobal_Context, &KaxEditionEntry::ClassInfos);
+const EbmlSemanticContext KaxEditionUID_Context = EbmlSemanticContext(0, NULL, &KaxEditionEntry_Context, *GetKaxGlobal_Context, &KaxEditionUID::ClassInfos);
+const EbmlSemanticContext KaxEditionFlagHidden_Context = EbmlSemanticContext(0, NULL, &KaxEditionEntry_Context, *GetKaxGlobal_Context, &KaxEditionFlagHidden::ClassInfos);
+const EbmlSemanticContext KaxEditionFlagDefault_Context = EbmlSemanticContext(0, NULL, &KaxEditionEntry_Context, *GetKaxGlobal_Context, &KaxEditionFlagDefault::ClassInfos);
+const EbmlSemanticContext KaxEditionFlagOrdered_Context = EbmlSemanticContext(0, NULL, &KaxEditionEntry_Context, *GetKaxGlobal_Context, &KaxEditionFlagOrdered::ClassInfos);
+const EbmlSemanticContext KaxChapterAtom_Context = EbmlSemanticContext(countof(KaxChapterAtom_ContextList), KaxChapterAtom_ContextList, &KaxEditionEntry_Context, *GetKaxGlobal_Context, &KaxChapterAtom::ClassInfos);
+const EbmlSemanticContext KaxChapterTrack_Context = EbmlSemanticContext(countof(KaxChapterTrack_ContextList), KaxChapterTrack_ContextList, &KaxChapterAtom_Context, *GetKaxGlobal_Context, &KaxChapterTrack::ClassInfos);
+const EbmlSemanticContext KaxChapterDisplay_Context = EbmlSemanticContext(countof(KaxChapterDisplay_ContextList), KaxChapterDisplay_ContextList, &KaxChapterAtom_Context, *GetKaxGlobal_Context, &KaxChapterDisplay::ClassInfos);
+const EbmlSemanticContext KaxChapterUID_Context = EbmlSemanticContext(0, NULL, &KaxChapterAtom_Context, *GetKaxGlobal_Context, &KaxChapterUID::ClassInfos);
+const EbmlSemanticContext KaxChapterTimeStart_Context = EbmlSemanticContext(0, NULL, &KaxChapterAtom_Context, *GetKaxGlobal_Context, &KaxChapterTimeStart::ClassInfos);
+const EbmlSemanticContext KaxChapterTimeEnd_Context = EbmlSemanticContext(0, NULL, &KaxChapterAtom_Context, *GetKaxGlobal_Context, &KaxChapterTimeEnd::ClassInfos);
+const EbmlSemanticContext KaxChapterFlagHidden_Context = EbmlSemanticContext(0, NULL, &KaxChapterAtom_Context, *GetKaxGlobal_Context, &KaxChapterFlagHidden::ClassInfos);
+const EbmlSemanticContext KaxChapterFlagEnabled_Context = EbmlSemanticContext(0, NULL, &KaxChapterAtom_Context, *GetKaxGlobal_Context, &KaxChapterFlagEnabled::ClassInfos);
+const EbmlSemanticContext KaxChapterSegmentUID_Context = EbmlSemanticContext(0, NULL, &KaxChapterAtom_Context, *GetKaxGlobal_Context, &KaxChapterSegmentUID::ClassInfos);
+const EbmlSemanticContext KaxChapterSegmentEditionUID_Context = EbmlSemanticContext(0, NULL, &KaxChapterAtom_Context, *GetKaxGlobal_Context, &KaxChapterSegmentEditionUID::ClassInfos);
+const EbmlSemanticContext KaxChapterPhysicalEquiv_Context = EbmlSemanticContext(0, NULL, &KaxChapterAtom_Context, *GetKaxGlobal_Context, &KaxChapterPhysicalEquiv::ClassInfos);
+const EbmlSemanticContext KaxChapterTrackNumber_Context = EbmlSemanticContext(0, NULL, &KaxChapterTrack_Context, *GetKaxGlobal_Context, &KaxChapterTrackNumber::ClassInfos);
+const EbmlSemanticContext KaxChapterString_Context = EbmlSemanticContext(0, NULL, &KaxChapterDisplay_Context, *GetKaxGlobal_Context, &KaxChapterString::ClassInfos);
+const EbmlSemanticContext KaxChapterLanguage_Context = EbmlSemanticContext(0, NULL, &KaxChapterLanguage_Context, *GetKaxGlobal_Context, &KaxChapterLanguage::ClassInfos);
+const EbmlSemanticContext KaxChapterCountry_Context = EbmlSemanticContext(0, NULL, &KaxChapterCountry_Context, *GetKaxGlobal_Context, &KaxChapterCountry::ClassInfos);
+const EbmlSemanticContext KaxChapterProcess_Context = EbmlSemanticContext(countof(KaxChapterProcess_ContextList), KaxChapterProcess_ContextList, &KaxChapterAtom_Context, *GetKaxGlobal_Context, &KaxChapterProcess::ClassInfos);
+const EbmlSemanticContext KaxChapterProcessCodecID_Context = EbmlSemanticContext(0, NULL, &KaxChapterProcess_Context, *GetKaxGlobal_Context, &KaxChapterProcessCodecID::ClassInfos);
+const EbmlSemanticContext KaxChapterProcessPrivate_Context = EbmlSemanticContext(0, NULL, &KaxChapterProcess_Context, *GetKaxGlobal_Context, &KaxChapterProcessPrivate::ClassInfos);
+const EbmlSemanticContext KaxChapterProcessCommand_Context = EbmlSemanticContext(countof(KaxChapterProcessCommand_ContextList), KaxChapterProcessCommand_ContextList, &KaxChapterProcess_Context, *GetKaxGlobal_Context, &KaxChapterProcessCommand::ClassInfos);
+const EbmlSemanticContext KaxChapterProcessTime_Context = EbmlSemanticContext(0, NULL, &KaxChapterProcessCommand_Context, *GetKaxGlobal_Context, &KaxChapterProcessTime::ClassInfos);
+const EbmlSemanticContext KaxChapterProcessData_Context = EbmlSemanticContext(0, NULL, &KaxChapterProcessCommand_Context, *GetKaxGlobal_Context, &KaxChapterProcessData::ClassInfos);
+
+EbmlId KaxChapters_TheId               (0x1043A770, 4);
+EbmlId KaxEditionEntry_TheId           (0x45B9, 2);
+EbmlId KaxEditionUID_TheId             (0x45BC, 2);
+EbmlId KaxEditionFlagHidden_TheId      (0x45BD, 2);
+EbmlId KaxEditionFlagDefault_TheId     (0x45DB, 2);
+EbmlId KaxEditionFlagOrdered_TheId     (0x45DD, 2);
+EbmlId KaxChapterAtom_TheId            (0xB6, 1);
+EbmlId KaxChapterUID_TheId             (0x73C4, 2);
+EbmlId KaxChapterTimeStart_TheId       (0x91, 1);
+EbmlId KaxChapterTimeEnd_TheId         (0x92, 1);
+EbmlId KaxChapterFlagHidden_TheId      (0x98, 1);
+EbmlId KaxChapterFlagEnabled_TheId     (0x4598, 2);
+EbmlId KaxChapterSegmentUID_TheId      (0x6E67, 2);
+EbmlId KaxChapterSegmentEditionUID_TheId(0x6EBC, 2);
+EbmlId KaxChapterPhysicalEquiv_TheId   (0x63C3, 2);
+EbmlId KaxChapterTrack_TheId           (0x8F, 1);
+EbmlId KaxChapterTrackNumber_TheId     (0x89, 1);
+EbmlId KaxChapterDisplay_TheId         (0x80, 1);
+EbmlId KaxChapterString_TheId          (0x85, 1);
+EbmlId KaxChapterLanguage_TheId        (0x437C, 2);
+EbmlId KaxChapterCountry_TheId         (0x437E, 2);
+EbmlId KaxChapterProcess_TheId         (0x6944, 2);
+EbmlId KaxChapterProcessCodecID_TheId  (0x6955, 2);
+EbmlId KaxChapterProcessPrivate_TheId  (0x450D, 2);
+EbmlId KaxChapterProcessCommand_TheId  (0x6911, 2);
+EbmlId KaxChapterProcessTime_TheId     (0x6922, 2);
+EbmlId KaxChapterProcessData_TheId     (0x6933, 2);
+
+const EbmlCallbacks KaxChapters::ClassInfos(KaxChapters::Create, KaxChapters_TheId, "Chapters", KaxChapters_Context);
+const EbmlCallbacks KaxEditionEntry::ClassInfos(KaxEditionEntry::Create, KaxEditionEntry_TheId, "EditionEntry", KaxEditionEntry_Context);
+const EbmlCallbacks KaxEditionUID::ClassInfos(KaxEditionUID::Create, KaxEditionUID_TheId, "EditionUID", KaxEditionUID_Context);
+const EbmlCallbacks KaxEditionFlagHidden::ClassInfos(KaxEditionFlagHidden::Create, KaxEditionFlagHidden_TheId, "EditionFlagHidden", KaxEditionFlagHidden_Context);
+const EbmlCallbacks KaxEditionFlagDefault::ClassInfos(KaxEditionFlagDefault::Create, KaxEditionFlagDefault_TheId, "EditionFlagDefault", KaxEditionFlagDefault_Context);
+const EbmlCallbacks KaxEditionFlagOrdered::ClassInfos(KaxEditionFlagOrdered::Create, KaxEditionFlagOrdered_TheId, "EditionFlagOrdered", KaxEditionFlagOrdered_Context);
+const EbmlCallbacks KaxChapterAtom::ClassInfos(KaxChapterAtom::Create, KaxChapterAtom_TheId, "ChapterAtom", KaxChapterAtom_Context);
+const EbmlCallbacks KaxChapterUID::ClassInfos(KaxChapterUID::Create, KaxChapterUID_TheId, "ChapterUID", KaxChapterUID_Context);
+const EbmlCallbacks KaxChapterTimeStart::ClassInfos(KaxChapterTimeStart::Create, KaxChapterTimeStart_TheId, "ChapterTimeStart", KaxChapterTimeStart_Context);
+const EbmlCallbacks KaxChapterTimeEnd::ClassInfos(KaxChapterTimeEnd::Create, KaxChapterTimeEnd_TheId, "ChapterTimeEnd", KaxChapterTimeEnd_Context);
+const EbmlCallbacks KaxChapterFlagHidden::ClassInfos(KaxChapterFlagHidden::Create, KaxChapterFlagHidden_TheId, "ChapterFlagHidden", KaxChapterFlagHidden_Context);
+const EbmlCallbacks KaxChapterFlagEnabled::ClassInfos(KaxChapterFlagEnabled::Create, KaxChapterFlagEnabled_TheId, "ChapterFlagEnabled", KaxChapterFlagEnabled_Context);
+const EbmlCallbacks KaxChapterSegmentUID::ClassInfos(KaxChapterSegmentUID::Create, KaxChapterSegmentUID_TheId, "ChapterSegmentUID", KaxChapterSegmentUID_Context);
+const EbmlCallbacks KaxChapterSegmentEditionUID::ClassInfos(KaxChapterSegmentEditionUID::Create, KaxChapterSegmentEditionUID_TheId, "ChapterSegmentEditionUID", KaxChapterSegmentEditionUID_Context);
+const EbmlCallbacks KaxChapterPhysicalEquiv::ClassInfos(KaxChapterPhysicalEquiv::Create, KaxChapterPhysicalEquiv_TheId, "ChapterPhysicalEquiv", KaxChapterPhysicalEquiv_Context);
+const EbmlCallbacks KaxChapterTrack::ClassInfos(KaxChapterTrack::Create, KaxChapterTrack_TheId, "ChapterTrack", KaxChapterTrack_Context);
+const EbmlCallbacks KaxChapterTrackNumber::ClassInfos(KaxChapterTrackNumber::Create, KaxChapterTrackNumber_TheId, "ChapterTrackNumber", KaxChapterTrackNumber_Context);
+const EbmlCallbacks KaxChapterDisplay::ClassInfos(KaxChapterDisplay::Create, KaxChapterDisplay_TheId, "ChapterDisplay", KaxChapterDisplay_Context);
+const EbmlCallbacks KaxChapterString::ClassInfos(KaxChapterString::Create, KaxChapterString_TheId, "ChapterString", KaxChapterString_Context);
+const EbmlCallbacks KaxChapterLanguage::ClassInfos(KaxChapterLanguage::Create, KaxChapterLanguage_TheId, "ChapterLanguage", KaxChapterLanguage_Context);
+const EbmlCallbacks KaxChapterCountry::ClassInfos(KaxChapterCountry::Create, KaxChapterCountry_TheId, "ChapterCountry", KaxChapterCountry_Context);
+const EbmlCallbacks KaxChapterProcess::ClassInfos(KaxChapterProcess::Create, KaxChapterProcess_TheId, "ChapterProcess", KaxChapterProcess_Context);
+const EbmlCallbacks KaxChapterProcessCodecID::ClassInfos(KaxChapterProcessCodecID::Create, KaxChapterProcessCodecID_TheId, "ChapterProcessCodecID", KaxChapterProcessCodecID_Context);
+const EbmlCallbacks KaxChapterProcessPrivate::ClassInfos(KaxChapterProcessPrivate::Create, KaxChapterProcessPrivate_TheId, "ChapterProcessPrivate", KaxChapterProcessPrivate_Context);
+const EbmlCallbacks KaxChapterProcessCommand::ClassInfos(KaxChapterProcessCommand::Create, KaxChapterProcessCommand_TheId, "ChapterProcessCommand", KaxChapterProcessCommand_Context);
+const EbmlCallbacks KaxChapterProcessTime::ClassInfos(KaxChapterProcessTime::Create, KaxChapterProcessTime_TheId, "ChapterProcessTime", KaxChapterProcessTime_Context);
+const EbmlCallbacks KaxChapterProcessData::ClassInfos(KaxChapterProcessData::Create, KaxChapterProcessData_TheId, "ChapterProcessData", KaxChapterProcessData_Context);
+
+KaxChapters::KaxChapters()
+ :EbmlMaster(KaxChapters_Context)
+{}
+
+KaxEditionEntry::KaxEditionEntry()
+:EbmlMaster(KaxEditionEntry_Context)
+{}
+
+KaxChapterAtom::KaxChapterAtom()
+:EbmlMaster(KaxChapterAtom_Context)
+{}
+
+KaxChapterTrack::KaxChapterTrack()
+:EbmlMaster(KaxChapterTrack_Context)
+{}
+
+KaxChapterDisplay::KaxChapterDisplay()
+:EbmlMaster(KaxChapterDisplay_Context)
+{}
+
+KaxChapterProcess::KaxChapterProcess()
+:EbmlMaster(KaxChapterProcess_Context)
+{}
+
+KaxChapterProcessCommand::KaxChapterProcessCommand()
+:EbmlMaster(KaxChapterProcessCommand_Context)
+{}
+
+END_LIBMATROSKA_NAMESPACE
diff --git a/src/KaxCluster.cpp b/src/KaxCluster.cpp
new file mode 100644 (file)
index 0000000..d520e7a
--- /dev/null
@@ -0,0 +1,335 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxCluster.cpp 1228 2005-10-14 19:36:51Z robux4 $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#include "matroska/KaxCluster.h"
+#include "matroska/KaxClusterData.h"
+#include "matroska/KaxBlock.h"
+#include "matroska/KaxContexts.h"
+#include "matroska/KaxSegment.h"
+
+// sub elements
+START_LIBMATROSKA_NAMESPACE
+
+#if MATROSKA_VERSION == 1
+EbmlSemantic KaxCluster_ContextList[5] =
+#else // MATROSKA_VERSION
+EbmlSemantic KaxCluster_ContextList[6] =
+#endif // MATROSKA_VERSION
+{
+       EbmlSemantic(true,  true,  KaxClusterTimecode::ClassInfos),
+       EbmlSemantic(false, true,  KaxClusterSilentTracks::ClassInfos),
+       EbmlSemantic(false, true,  KaxClusterPrevSize::ClassInfos),
+       EbmlSemantic(false, false, KaxBlockGroup::ClassInfos),
+#if MATROSKA_VERSION == 2
+       EbmlSemantic(false, false, KaxSimpleBlock::ClassInfos),
+#endif
+       EbmlSemantic(false, true,  KaxClusterPosition::ClassInfos),
+};
+
+const EbmlSemanticContext KaxCluster_Context = EbmlSemanticContext(countof(KaxCluster_ContextList), KaxCluster_ContextList, &KaxSegment_Context, *GetKaxGlobal_Context, &KaxCluster::ClassInfos);
+
+EbmlId KaxCluster_TheId(0x1F43B675, 4);
+const EbmlCallbacks KaxCluster::ClassInfos(KaxCluster::Create, KaxCluster_TheId, "Cluster", KaxCluster_Context);
+
+KaxCluster::KaxCluster()
+       :EbmlMaster(KaxCluster_Context)
+       ,currentNewBlock(NULL)
+       ,ParentSegment(NULL)
+       ,bFirstFrameInside(false)
+       ,bPreviousTimecodeIsSet(false)
+       ,bTimecodeScaleIsSet(false)
+       ,bSilentTracksUsed(false)
+{}
+
+KaxCluster::KaxCluster(const KaxCluster & ElementToClone) 
+ :EbmlMaster(ElementToClone)
+ ,bSilentTracksUsed(ElementToClone.bSilentTracksUsed)
+{
+       // update the parent of each children
+       std::vector<EbmlElement *>::const_iterator Itr = ElementList.begin();
+       while (Itr != ElementList.end())
+       {
+               if (EbmlId(**Itr) == KaxBlockGroup::ClassInfos.GlobalId) {
+                       static_cast<KaxBlockGroup   *>(*Itr)->SetParent(*this);
+               } else if (EbmlId(**Itr) == KaxBlock::ClassInfos.GlobalId) {
+                       static_cast<KaxBlock        *>(*Itr)->SetParent(*this);
+#if MATROSKA_VERSION >= 2
+               } else if (EbmlId(**Itr) == KaxBlockVirtual::ClassInfos.GlobalId) {
+                       static_cast<KaxBlockVirtual *>(*Itr)->SetParent(*this);
+#endif // MATROSKA_VERSION
+               }
+       }
+}
+
+bool KaxCluster::AddBlockBlob(KaxBlockBlob * NewBlob)
+{
+       Blobs.push_back(NewBlob);
+       return true;
+}
+
+bool KaxCluster::AddFrameInternal(const KaxTrackEntry & track, uint64 timecode, DataBuffer & buffer, KaxBlockGroup * & MyNewBlock, const KaxBlockGroup * PastBlock, const KaxBlockGroup * ForwBlock, LacingType lacing)
+{
+       if (!bFirstFrameInside) {
+               bFirstFrameInside = true;
+               MinTimecode = MaxTimecode = timecode;
+       } else {
+               if (timecode < MinTimecode)
+                       MinTimecode = timecode;
+               if (timecode > MaxTimecode)
+                       MaxTimecode = timecode;
+       }
+
+       MyNewBlock = NULL;
+
+       if (lacing == LACING_NONE || !track.LacingEnabled()) {
+               currentNewBlock = NULL;
+       }
+
+       // force creation of a new block
+       if (currentNewBlock == NULL || uint32(track.TrackNumber()) != uint32(currentNewBlock->TrackNumber()) || PastBlock != NULL || ForwBlock != NULL) {
+               KaxBlockGroup & aNewBlock = GetNewBlock();
+               MyNewBlock = currentNewBlock = &aNewBlock;
+               currentNewBlock = &aNewBlock;
+       }
+
+       if (PastBlock != NULL) {
+               if (ForwBlock != NULL) {
+                       if (currentNewBlock->AddFrame(track, timecode, buffer, *PastBlock, *ForwBlock, lacing)) {
+                               // more data are allowed in this Block
+                               return true;
+                       } else {
+                               currentNewBlock = NULL;
+                               return false;
+                       }
+               } else {
+                       if (currentNewBlock->AddFrame(track, timecode, buffer, *PastBlock, lacing)) {
+                               // more data are allowed in this Block
+                               return true;
+                       } else {
+                               currentNewBlock = NULL;
+                               return false;
+                       }
+               }
+       } else {
+               if (currentNewBlock->AddFrame(track, timecode, buffer, lacing)) {
+                       // more data are allowed in this Block
+                       return true;
+               } else {
+                       currentNewBlock = NULL;
+                       return false;
+               }
+       }
+}
+
+bool KaxCluster::AddFrame(const KaxTrackEntry & track, uint64 timecode, DataBuffer & buffer, KaxBlockGroup * & MyNewBlock, LacingType lacing)
+{
+       assert(Blobs.size() == 0); // mutually exclusive for the moment
+       return AddFrameInternal(track, timecode, buffer, MyNewBlock, NULL, NULL, lacing);
+}
+
+bool KaxCluster::AddFrame(const KaxTrackEntry & track, uint64 timecode, DataBuffer & buffer, KaxBlockGroup * & MyNewBlock, const KaxBlockGroup & PastBlock, LacingType lacing)
+{
+       assert(Blobs.size() == 0); // mutually exclusive for the moment
+       return AddFrameInternal(track, timecode, buffer, MyNewBlock, &PastBlock, NULL, lacing);
+}
+
+bool KaxCluster::AddFrame(const KaxTrackEntry & track, uint64 timecode, DataBuffer & buffer, KaxBlockGroup * & MyNewBlock, const KaxBlockGroup & PastBlock, const KaxBlockGroup & ForwBlock, LacingType lacing)
+{
+       assert(Blobs.size() == 0); // mutually exclusive for the moment
+       return AddFrameInternal(track, timecode, buffer, MyNewBlock, &PastBlock, &ForwBlock, lacing);
+}
+
+/*!
+       \todo only put the Blocks written in the cue entries
+*/
+uint32 KaxCluster::Render(IOCallback & output, KaxCues & CueToUpdate, bool bSaveDefault)
+{
+       uint32 Result = 0;
+       size_t TrkIndex, Index;
+
+       // update the Timecode of the Cluster before writing
+       KaxClusterTimecode * Timecode = static_cast<KaxClusterTimecode *>(this->FindElt(KaxClusterTimecode::ClassInfos));
+       *static_cast<EbmlUInteger *>(Timecode) = GlobalTimecode() / GlobalTimecodeScale();
+
+       if (Blobs.size() == 0) {
+               // old-school direct KaxBlockGroup
+
+               // SilentTracks handling
+               // check the parent cluster for existing tracks and see if they are contained in this cluster or not
+               if (bSilentTracksUsed)
+               {
+                       KaxTracks & MyTracks = *static_cast<KaxTracks *>(ParentSegment->FindElt(KaxTracks::ClassInfos));
+                       for (TrkIndex = 0; TrkIndex < MyTracks.ListSize(); TrkIndex++) {
+                               if (EbmlId(*MyTracks[TrkIndex]) == KaxTrackEntry::ClassInfos.GlobalId)
+                               {
+                                       KaxTrackEntry & entry = *static_cast<KaxTrackEntry *>(MyTracks[TrkIndex]);
+                                       uint32 tracknum = entry.TrackNumber();
+                                       for (Index = 0; Index < ElementList.size(); Index++) {
+                                               if (EbmlId(*ElementList[Index]) == KaxBlockGroup::ClassInfos.GlobalId) {
+                                                       KaxBlockGroup & group = *static_cast<KaxBlockGroup *>(ElementList[Index]);
+                                                       if (group.TrackNumber() == tracknum)
+                                                               break; // this track is used
+                                               }
+                                       }
+                                       // the track wasn't found in this cluster
+                                       if (Index == ElementList.size())
+                                       {
+                                               KaxClusterSilentTracks * SilentTracks = static_cast<KaxClusterSilentTracks *>(this->FindFirstElt(KaxClusterSilentTracks::ClassInfos));
+                                               assert(SilentTracks != NULL); // the flag bSilentTracksUsed should be set when creating the Cluster
+                                               KaxClusterSilentTrackNumber * trackelt = static_cast<KaxClusterSilentTrackNumber *>(SilentTracks->AddNewElt(KaxClusterSilentTrackNumber::ClassInfos));
+                                               *static_cast<EbmlUInteger *>(trackelt) = tracknum;
+                                       }
+                               }
+                       }
+               }
+
+               Result = EbmlMaster::Render(output, bSaveDefault);
+               // For all Blocks add their position on the CueEntry
+               
+               for (Index = 0; Index < ElementList.size(); Index++) {
+                       if (EbmlId(*ElementList[Index]) == KaxBlockGroup::ClassInfos.GlobalId) {
+                               CueToUpdate.PositionSet(*static_cast<const KaxBlockGroup *>(ElementList[Index]));
+                       }
+               }
+       } else {
+               // new school, using KaxBlockBlob
+               for (Index = 0; Index<Blobs.size(); Index++)
+               {
+#if MATROSKA_VERSION >= 2
+                       if (Blobs[Index]->IsSimpleBlock())
+                               ElementList.push_back( &(KaxSimpleBlock&) *Blobs[Index] );
+                       else
+#endif
+                               ElementList.push_back( &(KaxBlockGroup&) *Blobs[Index] );
+               }
+
+               // SilentTracks handling
+               // check the parent cluster for existing tracks and see if they are contained in this cluster or not
+               if (bSilentTracksUsed)
+               {
+                       KaxTracks & MyTracks = *static_cast<KaxTracks *>(ParentSegment->FindElt(KaxTracks::ClassInfos));
+                       for (TrkIndex = 0; TrkIndex < MyTracks.ListSize(); TrkIndex++) {
+                               if (EbmlId(*MyTracks[TrkIndex]) == KaxTrackEntry::ClassInfos.GlobalId)
+                               {
+                                       KaxTrackEntry & entry = *static_cast<KaxTrackEntry *>(MyTracks[TrkIndex]);
+                                       uint32 tracknum = entry.TrackNumber();
+                                       for (Index = 0; Index<Blobs.size(); Index++) {
+                                               if (((KaxInternalBlock&)*Blobs[Index]).TrackNum() == tracknum)
+                                                               break; // this track is used
+                                       }
+                                       // the track wasn't found in this cluster
+                                       if (Index == ElementList.size())
+                                       {
+                                               KaxClusterSilentTracks * SilentTracks = static_cast<KaxClusterSilentTracks *>(this->FindFirstElt(KaxClusterSilentTracks::ClassInfos));
+                                               assert(SilentTracks != NULL); // the flag bSilentTracksUsed should be set when creating the Cluster
+                                               KaxClusterSilentTrackNumber * trackelt = static_cast<KaxClusterSilentTrackNumber *>(SilentTracks->AddNewElt(KaxClusterSilentTrackNumber::ClassInfos));
+                                               *static_cast<EbmlUInteger *>(trackelt) = tracknum;
+                                       }
+                               }
+                       }
+               }
+
+               Result = EbmlMaster::Render(output, bSaveDefault);
+
+               // For all Blocks add their position on the CueEntry
+               for (Index = 0; Index<Blobs.size(); Index++) {
+                       CueToUpdate.PositionSet(*Blobs[Index]);
+               }
+
+               Blobs.clear();
+       }
+
+       return Result;
+}
+
+/*!
+       \todo automatically choose valid timecode for the Cluster based on the previous cluster timecode (must be incremental)
+*/
+uint64 KaxCluster::GlobalTimecode() const
+{
+       assert(bPreviousTimecodeIsSet);
+       uint64 result = MinTimecode;
+
+       if (result < PreviousTimecode)
+               result = PreviousTimecode + 1;
+       
+       return result;
+}
+
+/*!
+       \brief retrieve the relative 
+       \todo !!! We need a way to know the TimecodeScale
+*/
+int16 KaxCluster::GetBlockLocalTimecode(uint64 aGlobalTimecode) const
+{
+       int64 TimecodeDelay = (int64(aGlobalTimecode) - int64(GlobalTimecode())) / int64(GlobalTimecodeScale());
+       assert(TimecodeDelay >= int16(0x8000) && TimecodeDelay <= int16(0x7FFF));
+       return int16(TimecodeDelay);
+}
+
+uint64 KaxCluster::GetBlockGlobalTimecode(int16 GlobalSavedTimecode)
+{
+       if (!bFirstFrameInside) {
+               KaxClusterTimecode * Timecode = static_cast<KaxClusterTimecode *>(this->FindElt(KaxClusterTimecode::ClassInfos));
+               assert (bFirstFrameInside); // use the InitTimecode() hack for now
+               MinTimecode = MaxTimecode = PreviousTimecode = *static_cast<EbmlUInteger *>(Timecode);
+               bFirstFrameInside = true;
+               bPreviousTimecodeIsSet = true;
+       }
+       return int64(GlobalSavedTimecode * GlobalTimecodeScale()) + GlobalTimecode();
+}
+
+KaxBlockGroup & KaxCluster::GetNewBlock()
+{
+       KaxBlockGroup & MyBlock = AddNewChild<KaxBlockGroup>(*this);
+       MyBlock.SetParent(*this);
+       return MyBlock;
+}
+
+void KaxCluster::ReleaseFrames()
+{
+       size_t Index;
+       
+       for (Index = 0; Index < ElementList.size(); Index++) {
+               if (EbmlId(*ElementList[Index]) == KaxBlockGroup::ClassInfos.GlobalId) {
+                       static_cast<KaxBlockGroup*>(ElementList[Index])->ReleaseFrames();
+               }
+       }
+}
+
+uint64 KaxCluster::GetPosition() const
+{
+       assert(ParentSegment != NULL);
+       return ParentSegment->GetRelativePosition(*this);
+}
+
+END_LIBMATROSKA_NAMESPACE
diff --git a/src/KaxClusterData.cpp b/src/KaxClusterData.cpp
new file mode 100644 (file)
index 0000000..ec195dd
--- /dev/null
@@ -0,0 +1,67 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxClusterData.cpp 955 2004-11-28 15:24:37Z robux4 $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#include "matroska/KaxClusterData.h"
+#include "matroska/KaxContexts.h"
+
+START_LIBMATROSKA_NAMESPACE
+
+EbmlId KaxClusterTimecode_TheId         (0xE7, 1);
+EbmlId KaxClusterSilentTracks_TheId     (0x5854, 2);
+EbmlId KaxClusterSilentTrackNumber_TheId(0x58D7, 2);
+EbmlId KaxClusterPrevSize_TheId         (0xAB, 1);
+EbmlId KaxClusterPosition_TheId         (0xA7, 1);
+
+EbmlSemantic KaxClusterSilentTracks_ContextList[1] =
+{
+       EbmlSemantic(false,  false, KaxClusterSilentTrackNumber::ClassInfos),
+};
+
+const EbmlSemanticContext KaxClusterTimecode_Context = EbmlSemanticContext(0, NULL, &KaxCluster_Context, *GetKaxGlobal_Context, &KaxClusterTimecode::ClassInfos);
+const EbmlSemanticContext KaxClusterSilentTracks_Context = EbmlSemanticContext(countof(KaxClusterSilentTracks_ContextList), KaxClusterSilentTracks_ContextList, &KaxCluster_Context, *GetKaxGlobal_Context, &KaxClusterSilentTracks::ClassInfos);
+const EbmlSemanticContext KaxClusterSilentTrackNumber_Context = EbmlSemanticContext(0, NULL, &KaxClusterSilentTracks_Context, *GetKaxGlobal_Context, &KaxClusterSilentTrackNumber::ClassInfos);
+const EbmlSemanticContext KaxClusterPosition_Context = EbmlSemanticContext(0, NULL, &KaxCluster_Context, *GetKaxGlobal_Context, &KaxClusterPosition::ClassInfos);
+const EbmlSemanticContext KaxClusterPrevSize_Context = EbmlSemanticContext(0, NULL, &KaxCluster_Context, *GetKaxGlobal_Context, &KaxClusterPrevSize::ClassInfos);
+
+const EbmlCallbacks KaxClusterTimecode::ClassInfos(KaxClusterTimecode::Create, KaxClusterTimecode_TheId, "ClusterTimecode", KaxClusterTimecode_Context);
+const EbmlCallbacks KaxClusterSilentTracks::ClassInfos(KaxClusterSilentTracks::Create, KaxClusterSilentTracks_TheId, "ClusterSilentTracks", KaxClusterSilentTracks_Context);
+const EbmlCallbacks KaxClusterSilentTrackNumber::ClassInfos(KaxClusterSilentTrackNumber::Create, KaxClusterSilentTrackNumber_TheId, "ClusterSilentTrackNumber", KaxClusterSilentTrackNumber_Context);
+const EbmlCallbacks KaxClusterPrevSize::ClassInfos(KaxClusterPrevSize::Create, KaxClusterPrevSize_TheId, "ClusterPrevSize", KaxClusterPrevSize_Context);
+const EbmlCallbacks KaxClusterPosition::ClassInfos(KaxClusterPosition::Create, KaxClusterPosition_TheId, "ClusterPosition", KaxClusterPosition_Context);
+
+KaxClusterSilentTracks::KaxClusterSilentTracks()
+:EbmlMaster(KaxClusterSilentTracks_Context)
+{}
+
+END_LIBMATROSKA_NAMESPACE
diff --git a/src/KaxContentEncoding.cpp b/src/KaxContentEncoding.cpp
new file mode 100644 (file)
index 0000000..f46e87b
--- /dev/null
@@ -0,0 +1,254 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxContentEncoding.cpp 640 2004-07-09 21:05:36Z mosu $
+       \author Moritz Bunkus <moritz @ bunkus.org>
+*/
+#include "matroska/KaxContentEncoding.h"
+#include "matroska/KaxContexts.h"
+
+START_LIBMATROSKA_NAMESPACE
+
+const EbmlSemantic KaxContentEncodings_ContextList[1] = {
+  EbmlSemantic(true, true, KaxContentEncoding::ClassInfos),
+};
+
+const EbmlSemantic KaxContentEncoding_ContextList[5] = {
+  EbmlSemantic(true, true, KaxContentEncodingOrder::ClassInfos),
+  EbmlSemantic(true, true, KaxContentEncodingScope::ClassInfos),
+  EbmlSemantic(true, true, KaxContentEncodingType::ClassInfos),
+  EbmlSemantic(false, true, KaxContentCompression::ClassInfos),
+  EbmlSemantic(false, true, KaxContentEncryption::ClassInfos),
+};
+
+const EbmlSemantic KaxContentCompression_ContextList[2] = {
+  EbmlSemantic(true, true, KaxContentCompAlgo::ClassInfos),
+  EbmlSemantic(false, true, KaxContentCompSettings::ClassInfos),
+};
+
+const EbmlSemantic KaxContentEncryption_ContextList[6] = {
+  EbmlSemantic(false, true, KaxContentEncAlgo::ClassInfos),
+  EbmlSemantic(false, true, KaxContentEncKeyID::ClassInfos),
+  EbmlSemantic(false, true, KaxContentSignature::ClassInfos),
+  EbmlSemantic(false, true, KaxContentSigKeyID::ClassInfos),
+  EbmlSemantic(false, true, KaxContentSigAlgo::ClassInfos),
+  EbmlSemantic(false, true, KaxContentSigHashAlgo::ClassInfos),
+};
+
+EbmlId KaxContentEncodings_TheId       (0x6d80, 2);
+EbmlId KaxContentEncoding_TheId        (0x6240, 2);
+EbmlId KaxContentEncodingOrder_TheId   (0x5031, 2);
+EbmlId KaxContentEncodingScope_TheId   (0x5032, 2);
+EbmlId KaxContentEncodingType_TheId    (0x5033, 2);
+EbmlId KaxContentCompression_TheId     (0x5034, 2);
+EbmlId KaxContentCompAlgo_TheId        (0x4254, 2);
+EbmlId KaxContentCompSettings_TheId    (0x4255, 2);
+EbmlId KaxContentEncryption_TheId      (0x5035, 2);
+EbmlId KaxContentEncAlgo_TheId         (0x47e1, 2);
+EbmlId KaxContentEncKeyID_TheId        (0x47e2, 2);
+EbmlId KaxContentSignature_TheId       (0x47e3, 2);
+EbmlId KaxContentSigKeyID_TheId        (0x47e4, 2);
+EbmlId KaxContentSigAlgo_TheId         (0x47e5, 2);
+EbmlId KaxContentSigHashAlgo_TheId     (0x47e6, 2);
+const EbmlSemanticContext KaxContentEncodings_Context =
+EbmlSemanticContext(countof(KaxContentEncodings_ContextList),
+                    KaxContentEncodings_ContextList, &KaxTrackEntry_Context,
+                    *GetKaxGlobal_Context,
+                    &KaxContentEncodings::ClassInfos);
+
+const EbmlSemanticContext KaxContentEncoding_Context =
+EbmlSemanticContext(countof(KaxContentEncoding_ContextList),
+                    KaxContentEncoding_ContextList,
+                    &KaxContentEncodings_Context,
+                    *GetKaxGlobal_Context,
+                    &KaxContentEncoding::ClassInfos);
+
+const EbmlSemanticContext KaxContentEncodingOrder_Context =
+EbmlSemanticContext(0, NULL, &KaxContentEncoding_Context,
+                    *GetKaxGlobal_Context,
+                    &KaxContentEncodingOrder::ClassInfos);
+
+const EbmlSemanticContext KaxContentEncodingScope_Context =
+EbmlSemanticContext(0, NULL, &KaxContentEncoding_Context,
+                    *GetKaxGlobal_Context,
+                    &KaxContentEncodingScope::ClassInfos);
+
+const EbmlSemanticContext KaxContentEncodingType_Context =
+EbmlSemanticContext(0, NULL, &KaxContentEncoding_Context,
+                    *GetKaxGlobal_Context,
+                    &KaxContentEncodingType::ClassInfos);
+
+const EbmlSemanticContext KaxContentCompression_Context =
+EbmlSemanticContext(countof(KaxContentCompression_ContextList),
+                    KaxContentCompression_ContextList,
+                    &KaxContentEncoding_Context, *GetKaxGlobal_Context,
+                    &KaxContentCompression::ClassInfos);
+
+const EbmlSemanticContext KaxContentCompAlgo_Context =
+EbmlSemanticContext(0, NULL, &KaxContentCompression_Context,
+                    *GetKaxGlobal_Context,
+                    &KaxContentCompAlgo::ClassInfos);
+
+const EbmlSemanticContext KaxContentCompSettings_Context =
+EbmlSemanticContext(0, NULL, &KaxContentCompression_Context,
+                    *GetKaxGlobal_Context,
+                    &KaxContentCompSettings::ClassInfos);
+
+const EbmlSemanticContext KaxContentEncryption_Context =
+EbmlSemanticContext(countof(KaxContentEncryption_ContextList),
+                    KaxContentEncryption_ContextList,
+                    &KaxContentEncoding_Context, *GetKaxGlobal_Context,
+                    &KaxContentEncryption::ClassInfos);
+
+const EbmlSemanticContext KaxContentEncAlgo_Context =
+EbmlSemanticContext(0, NULL, &KaxContentEncryption_Context,
+                    *GetKaxGlobal_Context,
+                    &KaxContentEncAlgo::ClassInfos);
+
+const EbmlSemanticContext KaxContentEncKeyID_Context =
+EbmlSemanticContext(0, NULL, &KaxContentEncryption_Context,
+                    *GetKaxGlobal_Context,
+                    &KaxContentEncKeyID::ClassInfos);
+
+const EbmlSemanticContext KaxContentSignature_Context =
+EbmlSemanticContext(0, NULL, &KaxContentEncryption_Context,
+                    *GetKaxGlobal_Context,
+                    &KaxContentSignature::ClassInfos);
+
+const EbmlSemanticContext KaxContentSigAlgo_Context =
+EbmlSemanticContext(0, NULL, &KaxContentEncryption_Context,
+                    *GetKaxGlobal_Context,
+                    &KaxContentSigKeyID::ClassInfos);
+
+const EbmlSemanticContext KaxContentSigHashAlgo_Context =
+EbmlSemanticContext(0, NULL, &KaxContentEncryption_Context,
+                    *GetKaxGlobal_Context,
+                    &KaxContentSigKeyID::ClassInfos);
+
+const EbmlSemanticContext KaxContentSigKeyID_Context =
+EbmlSemanticContext(0, NULL, &KaxContentEncryption_Context,
+                    *GetKaxGlobal_Context,
+                    &KaxContentSigKeyID::ClassInfos);
+
+const EbmlCallbacks
+KaxContentEncodings::ClassInfos(KaxContentEncodings::Create,
+                                KaxContentEncodings_TheId,
+                                "ContentEncodings",
+                                KaxContentEncodings_Context);
+const EbmlCallbacks
+KaxContentEncoding::ClassInfos(KaxContentEncoding::Create,
+                               KaxContentEncoding_TheId,
+                               "ContentEncoding",
+                               KaxContentEncoding_Context);
+const EbmlCallbacks
+KaxContentEncodingOrder::ClassInfos(KaxContentEncodingOrder::Create,
+                                    KaxContentEncodingOrder_TheId,
+                                    "ContentEncodingOrder",
+                                    KaxContentEncodingOrder_Context);
+const EbmlCallbacks
+KaxContentEncodingScope::ClassInfos(KaxContentEncodingScope::Create,
+                                    KaxContentEncodingScope_TheId,
+                                    "ContentEncodingScope",
+                                    KaxContentEncodingScope_Context);
+const EbmlCallbacks
+KaxContentEncodingType::ClassInfos(KaxContentEncodingType::Create,
+                                   KaxContentEncodingType_TheId,
+                                   "ContentEncodingType",
+                                   KaxContentEncodingType_Context);
+const EbmlCallbacks
+KaxContentCompression::ClassInfos(KaxContentCompression::Create,
+                                  KaxContentCompression_TheId,
+                                  "ContentCompression",
+                                  KaxContentCompression_Context);
+const EbmlCallbacks
+KaxContentCompAlgo::ClassInfos(KaxContentCompAlgo::Create,
+                               KaxContentCompAlgo_TheId,
+                               "ContentCompAlgo",
+                               KaxContentCompAlgo_Context);
+const EbmlCallbacks
+KaxContentCompSettings::ClassInfos(KaxContentCompSettings::Create,
+                                   KaxContentCompSettings_TheId,
+                                   "ContentCompSettings",
+                                   KaxContentCompSettings_Context);
+const EbmlCallbacks
+KaxContentEncryption::ClassInfos(KaxContentEncryption::Create,
+                                 KaxContentEncryption_TheId,
+                                 "ContentEncryption",
+                                 KaxContentEncryption_Context);
+const EbmlCallbacks
+KaxContentEncAlgo::ClassInfos(KaxContentEncAlgo::Create,
+                              KaxContentEncAlgo_TheId,
+                              "ContentEncAlgo",
+                              KaxContentEncAlgo_Context);
+const EbmlCallbacks
+KaxContentEncKeyID::ClassInfos(KaxContentEncKeyID::Create,
+                               KaxContentEncKeyID_TheId,
+                               "ContentEncKeyID",
+                               KaxContentEncKeyID_Context);
+const EbmlCallbacks
+KaxContentSignature::ClassInfos(KaxContentSignature::Create,
+                                KaxContentSignature_TheId,
+                                "ContentSignature",
+                                KaxContentSignature_Context);
+const EbmlCallbacks
+KaxContentSigAlgo::ClassInfos(KaxContentSigAlgo::Create,
+                              KaxContentSigAlgo_TheId,
+                              "ContentSigAlgo",
+                              KaxContentSigAlgo_Context);
+const EbmlCallbacks
+KaxContentSigHashAlgo::ClassInfos(KaxContentSigHashAlgo::Create,
+                                  KaxContentSigHashAlgo_TheId,
+                                  "ContentSigHashAlgo",
+                                  KaxContentSigHashAlgo_Context);
+const EbmlCallbacks
+KaxContentSigKeyID::ClassInfos(KaxContentSigKeyID::Create,
+                               KaxContentSigKeyID_TheId,
+                               "ContentSigKeyID",
+                               KaxContentSigKeyID_Context);
+
+KaxContentEncodings::KaxContentEncodings():
+  EbmlMaster(KaxContentEncodings_Context) {
+}
+
+KaxContentEncoding::KaxContentEncoding():
+  EbmlMaster(KaxContentEncoding_Context) {
+}
+
+KaxContentCompression::KaxContentCompression():
+  EbmlMaster(KaxContentCompression_Context) {
+}
+
+KaxContentEncryption::KaxContentEncryption():
+  EbmlMaster(KaxContentEncryption_Context) {
+}
+
+END_LIBMATROSKA_NAMESPACE
diff --git a/src/KaxContexts.cpp b/src/KaxContexts.cpp
new file mode 100644 (file)
index 0000000..2e128ce
--- /dev/null
@@ -0,0 +1,48 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxContexts.cpp 640 2004-07-09 21:05:36Z mosu $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#include "ebml/EbmlContexts.h"
+#include "matroska/KaxContexts.h"
+
+using namespace LIBEBML_NAMESPACE;
+
+START_LIBMATROSKA_NAMESPACE
+
+// for the moment
+const EbmlSemanticContext & GetKaxGlobal_Context()
+{
+       return GetEbmlGlobal_Context();
+}
+
+END_LIBMATROSKA_NAMESPACE
diff --git a/src/KaxCues.cpp b/src/KaxCues.cpp
new file mode 100644 (file)
index 0000000..7aee21c
--- /dev/null
@@ -0,0 +1,172 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxCues.cpp 1265 2007-01-14 17:20:35Z mosu $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#include <cassert>
+
+#include "matroska/KaxCues.h"
+#include "matroska/KaxCuesData.h"
+#include "matroska/KaxContexts.h"
+#include "ebml/EbmlStream.h"
+
+// sub elements
+START_LIBMATROSKA_NAMESPACE
+
+EbmlSemantic KaxCues_ContextList[1] = 
+{
+       EbmlSemantic(true,  false,  KaxCuePoint::ClassInfos),
+};
+
+const EbmlSemanticContext KaxCues_Context = EbmlSemanticContext(countof(KaxCues_ContextList), KaxCues_ContextList, &KaxSegment_Context, *GetKaxGlobal_Context, &KaxCues::ClassInfos);
+
+EbmlId KaxCues_TheId(0x1C53BB6B, 4);
+const EbmlCallbacks KaxCues::ClassInfos(KaxCues::Create, KaxCues_TheId, "Cues", KaxCues_Context);
+
+KaxCues::KaxCues()
+       :EbmlMaster(KaxCues_Context)
+{}
+
+KaxCues::~KaxCues()
+{
+       assert(myTempReferences.size() == 0); // otherwise that means you have added references and forgot to set the position
+}
+
+bool KaxCues::AddBlockGroup(const KaxBlockGroup & BlockRef)
+{
+       // Do not add the element if it's already present.
+       std::vector<const KaxBlockBlob *>::iterator ListIdx;
+       KaxBlockBlob &BlockReference = *(new KaxBlockBlob(BLOCK_BLOB_NO_SIMPLE));
+       BlockReference.SetBlockGroup(*const_cast<KaxBlockGroup*>(&BlockRef));
+
+       for (ListIdx = myTempReferences.begin(); ListIdx != myTempReferences.end(); ListIdx++)
+               if (*ListIdx == &BlockReference)
+                       return true;
+
+       myTempReferences.push_back(&BlockReference);
+       return true;
+}
+
+bool KaxCues::AddBlockBlob(const KaxBlockBlob & BlockReference)
+{
+       // Do not add the element if it's already present.
+       std::vector<const KaxBlockBlob *>::iterator ListIdx;
+
+       for (ListIdx = myTempReferences.begin(); ListIdx != myTempReferences.end(); ListIdx++)
+               if (*ListIdx == &BlockReference)
+                       return true;
+
+       myTempReferences.push_back(&BlockReference);
+       return true;
+}
+
+void KaxCues::PositionSet(const KaxBlockBlob & BlockReference)
+{
+       // look for the element in the temporary references
+       std::vector<const KaxBlockBlob *>::iterator ListIdx;
+
+       for (ListIdx = myTempReferences.begin(); ListIdx != myTempReferences.end(); ListIdx++) {
+               if (*ListIdx == &BlockReference) {
+                       // found, now add the element to the entry list
+                       KaxCuePoint & NewPoint = AddNewChild<KaxCuePoint>(*this);
+                       NewPoint.PositionSet(BlockReference, GlobalTimecodeScale());
+                       myTempReferences.erase(ListIdx);
+                       break;
+               }
+       }
+}
+
+void KaxCues::PositionSet(const KaxBlockGroup & BlockRef)
+{
+       // look for the element in the temporary references
+       std::vector<const KaxBlockBlob *>::iterator ListIdx;
+
+       for (ListIdx = myTempReferences.begin(); ListIdx != myTempReferences.end(); ListIdx++) {
+               const KaxInternalBlock &refTmp = **ListIdx;
+               if (refTmp.GlobalTimecode() == BlockRef.GlobalTimecode() &&
+                       refTmp.TrackNum() == BlockRef.TrackNumber()) {
+                       // found, now add the element to the entry list
+                       KaxCuePoint & NewPoint = AddNewChild<KaxCuePoint>(*this);
+                       NewPoint.PositionSet(**ListIdx, GlobalTimecodeScale());
+                       myTempReferences.erase(ListIdx);
+                       break;
+               }
+       }
+}
+
+/*!
+       \warning Assume that the list has been sorted (Sort())
+*/
+const KaxCuePoint * KaxCues::GetTimecodePoint(uint64 aTimecode) const
+{
+       uint64 TimecodeToLocate = aTimecode / GlobalTimecodeScale();
+       const KaxCuePoint * aPointPrev = NULL;
+       uint64 aPrevTime = 0;
+       const KaxCuePoint * aPointNext = NULL;
+       uint64 aNextTime = EBML_PRETTYLONGINT(0xFFFFFFFFFFFF);
+
+       for (unsigned int i=0; i<ListSize(); i++)
+       {
+               if (EbmlId(*(*this)[i]) == KaxCuePoint::ClassInfos.GlobalId) {
+                       const KaxCuePoint *tmp = static_cast<const KaxCuePoint *>((*this)[i]);
+                       // check the tile
+                       const KaxCueTime *aTime = static_cast<const KaxCueTime *>(tmp->FindFirstElt(KaxCueTime::ClassInfos));
+                       if (aTime != NULL)
+                       {
+                               uint64 _Time = uint64(*aTime);
+                               if (_Time > aPrevTime && _Time < TimecodeToLocate) {
+                                       aPrevTime = _Time;
+                                       aPointPrev = tmp;
+                               }
+                               if (_Time < aNextTime && _Time > TimecodeToLocate) {
+                                       aNextTime= _Time;
+                                       aPointNext = tmp;
+                               }
+                       }
+               }
+       }
+
+       return aPointPrev;
+}
+
+uint64 KaxCues::GetTimecodePosition(uint64 aTimecode) const
+{
+       const KaxCuePoint * aPoint = GetTimecodePoint(aTimecode);
+       if (aPoint == NULL)
+               return 0;
+
+       const KaxCueTrackPositions * aTrack = aPoint->GetSeekPosition();
+       if (aTrack == NULL)
+               return 0;
+
+       return aTrack->ClusterPosition();
+}
+
+END_LIBMATROSKA_NAMESPACE
diff --git a/src/KaxCuesData.cpp b/src/KaxCuesData.cpp
new file mode 100644 (file)
index 0000000..17b688c
--- /dev/null
@@ -0,0 +1,329 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxCuesData.cpp 1265 2007-01-14 17:20:35Z mosu $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#include <cassert>
+
+#include "matroska/KaxCuesData.h"
+#include "matroska/KaxContexts.h"
+#include "matroska/KaxBlock.h"
+#include "matroska/KaxBlockData.h"
+#include "matroska/KaxCluster.h"
+#include "matroska/KaxSegment.h"
+
+START_LIBMATROSKA_NAMESPACE
+
+EbmlSemantic KaxCuePoint_ContextList[2] =
+{
+       EbmlSemantic(true,  true,  KaxCueTime::ClassInfos),
+       EbmlSemantic(true,  false, KaxCueTrackPositions::ClassInfos),
+};
+
+#if MATROSKA_VERSION == 1
+EbmlSemantic KaxCueTrackPositions_ContextList[3] =
+#else // MATROSKA_VERSION
+EbmlSemantic KaxCueTrackPositions_ContextList[5] =
+#endif // MATROSKA_VERSION
+{
+       EbmlSemantic(true,  true,  KaxCueTrack::ClassInfos),
+       EbmlSemantic(true,  true,  KaxCueClusterPosition::ClassInfos),
+       EbmlSemantic(false, true,  KaxCueBlockNumber::ClassInfos),
+#if MATROSKA_VERSION >= 2
+       EbmlSemantic(false, true,  KaxCueCodecState::ClassInfos),
+       EbmlSemantic(false, false, KaxCueReference::ClassInfos),
+#endif // MATROSKA_VERSION
+};
+
+#if MATROSKA_VERSION >= 2
+EbmlSemantic KaxCueReference_ContextList[4] =
+{
+       EbmlSemantic(true,  true,  KaxCueRefTime::ClassInfos),
+       EbmlSemantic(true,  true,  KaxCueRefCluster::ClassInfos),
+       EbmlSemantic(false, true,  KaxCueRefNumber::ClassInfos),
+       EbmlSemantic(false, true,  KaxCueRefCodecState::ClassInfos),
+};
+#endif // MATROSKA_VERSION
+
+EbmlId KaxCuePoint_TheId          (0xBB, 1);
+EbmlId KaxCueTime_TheId           (0xB3, 1);
+EbmlId KaxCueTrackPositions_TheId (0xB7, 1);
+EbmlId KaxCueTrack_TheId          (0xF7, 1);
+EbmlId KaxCueClusterPosition_TheId(0xF1, 1);
+EbmlId KaxCueBlockNumber_TheId    (0x5378, 2);
+#if MATROSKA_VERSION >= 2
+EbmlId KaxCueCodecState_TheId     (0xEA, 1);
+EbmlId KaxCueReference_TheId      (0xDB, 1);
+EbmlId KaxCueRefTime_TheId        (0x96, 1);
+EbmlId KaxCueRefCluster_TheId     (0x97, 1);
+EbmlId KaxCueRefNumber_TheId      (0x535F, 2);
+EbmlId KaxCueRefCodecState_TheId  (0xEB, 1);
+#endif // MATROSKA_VERSION
+
+const EbmlSemanticContext KaxCuePoint_Context = EbmlSemanticContext(countof(KaxCuePoint_ContextList), KaxCuePoint_ContextList, &KaxCues_Context, *GetKaxGlobal_Context, &KaxCuePoint::ClassInfos);
+const EbmlSemanticContext KaxCueTime_Context = EbmlSemanticContext(0, NULL, &KaxCuePoint_Context, *GetKaxGlobal_Context, &KaxCueTime::ClassInfos);
+const EbmlSemanticContext KaxCueTrackPositions_Context = EbmlSemanticContext(countof(KaxCueTrackPositions_ContextList), KaxCueTrackPositions_ContextList, &KaxCuePoint_Context, *GetKaxGlobal_Context, &KaxCueTrackPositions::ClassInfos);
+const EbmlSemanticContext KaxCueTrack_Context = EbmlSemanticContext(0, NULL, &KaxCueTrackPositions_Context, *GetKaxGlobal_Context, &KaxCueTrack::ClassInfos);
+const EbmlSemanticContext KaxCueClusterPosition_Context = EbmlSemanticContext(0, NULL, &KaxCueTrackPositions_Context, *GetKaxGlobal_Context, &KaxCueClusterPosition::ClassInfos);
+const EbmlSemanticContext KaxCueBlockNumber_Context = EbmlSemanticContext(0, NULL, &KaxCueTrackPositions_Context, *GetKaxGlobal_Context, &KaxCueBlockNumber::ClassInfos);
+#if MATROSKA_VERSION >= 2
+const EbmlSemanticContext KaxCueCodecState_Context = EbmlSemanticContext(0, NULL, &KaxCueTrackPositions_Context, *GetKaxGlobal_Context, &KaxCueCodecState::ClassInfos);
+const EbmlSemanticContext KaxCueReference_Context = EbmlSemanticContext(countof(KaxCueReference_ContextList), KaxCueReference_ContextList, &KaxCueTrackPositions_Context, *GetKaxGlobal_Context, &KaxCueReference::ClassInfos);
+const EbmlSemanticContext KaxCueRefTime_Context = EbmlSemanticContext(0, NULL, &KaxCueReference_Context, *GetKaxGlobal_Context, &KaxCueRefTime::ClassInfos);
+const EbmlSemanticContext KaxCueRefCluster_Context = EbmlSemanticContext(0, NULL, &KaxCueRefTime_Context, *GetKaxGlobal_Context, &KaxCueRefCluster::ClassInfos);
+const EbmlSemanticContext KaxCueRefNumber_Context = EbmlSemanticContext(0, NULL, &KaxCueRefTime_Context, *GetKaxGlobal_Context, &KaxCueRefNumber::ClassInfos);
+const EbmlSemanticContext KaxCueRefCodecState_Context = EbmlSemanticContext(0, NULL, &KaxCueRefTime_Context, *GetKaxGlobal_Context, &KaxCueRefCodecState::ClassInfos);
+#endif // MATROSKA_VERSION
+
+const EbmlCallbacks KaxCuePoint::ClassInfos(KaxCuePoint::Create, KaxCuePoint_TheId, "CuePoint", KaxCuePoint_Context);
+const EbmlCallbacks KaxCueTime::ClassInfos(KaxCueTime::Create, KaxCueTime_TheId, "CueTime", KaxCueTime_Context);
+const EbmlCallbacks KaxCueTrackPositions::ClassInfos(KaxCueTrackPositions::Create, KaxCueTrackPositions_TheId, "CueTrackPositions", KaxCueTrackPositions_Context);
+const EbmlCallbacks KaxCueTrack::ClassInfos(KaxCueTrack::Create, KaxCueTrack_TheId, "CueTrack", KaxCueTrack_Context);
+const EbmlCallbacks KaxCueClusterPosition::ClassInfos(KaxCueClusterPosition::Create, KaxCueClusterPosition_TheId, "CueClusterPosition", KaxCueClusterPosition_Context);
+const EbmlCallbacks KaxCueBlockNumber::ClassInfos(KaxCueBlockNumber::Create, KaxCueBlockNumber_TheId, "CueBlockNumber", KaxCueBlockNumber_Context);
+#if MATROSKA_VERSION >= 2
+const EbmlCallbacks KaxCueCodecState::ClassInfos(KaxCueCodecState::Create, KaxCueCodecState_TheId, "CueCodecState", KaxCueCodecState_Context);
+const EbmlCallbacks KaxCueReference::ClassInfos(KaxCueReference::Create, KaxCueReference_TheId, "CueReference", KaxCueReference_Context);
+const EbmlCallbacks KaxCueRefTime::ClassInfos(KaxCueRefTime::Create, KaxCueRefTime_TheId, "CueRefTime", KaxCueRefTime_Context);
+const EbmlCallbacks KaxCueRefCluster::ClassInfos(KaxCueRefCluster::Create, KaxCueRefCluster_TheId, "CueRefCluster", KaxCueRefCluster_Context);
+const EbmlCallbacks KaxCueRefNumber::ClassInfos(KaxCueRefNumber::Create, KaxCueRefNumber_TheId, "CueRefNumber", KaxCueRefNumber_Context);
+const EbmlCallbacks KaxCueRefCodecState::ClassInfos(KaxCueRefCodecState::Create, KaxCueRefCodecState_TheId, "CueRefCodecState", KaxCueRefCodecState_Context);
+#endif // MATROSKA_VERSION
+
+KaxCuePoint::KaxCuePoint() 
+ :EbmlMaster(KaxCuePoint_Context)
+{}
+
+KaxCueTrackPositions::KaxCueTrackPositions()
+ :EbmlMaster(KaxCueTrackPositions_Context)
+{}
+
+#if MATROSKA_VERSION >= 2
+KaxCueReference::KaxCueReference()
+ :EbmlMaster(KaxCueReference_Context)
+{}
+#endif // MATROSKA_VERSION
+
+/*!
+       \todo handle codec state checking
+       \todo remove duplicate references (reference to 2 frames that each reference the same frame)
+*/
+void KaxCuePoint::PositionSet(const KaxBlockGroup & BlockReference, uint64 GlobalTimecodeScale)
+{
+       // fill me
+       KaxCueTime & NewTime = GetChild<KaxCueTime>(*this);
+       *static_cast<EbmlUInteger*>(&NewTime) = BlockReference.GlobalTimecode() / GlobalTimecodeScale;
+
+       KaxCueTrackPositions & NewPositions = AddNewChild<KaxCueTrackPositions>(*this);
+       KaxCueTrack & TheTrack = GetChild<KaxCueTrack>(NewPositions);
+       *static_cast<EbmlUInteger*>(&TheTrack) = BlockReference.TrackNumber();
+       
+       KaxCueClusterPosition & TheClustPos = GetChild<KaxCueClusterPosition>(NewPositions);
+       *static_cast<EbmlUInteger*>(&TheClustPos) = BlockReference.ClusterPosition();
+
+#if MATROSKA_VERSION >= 2
+       // handle reference use
+       if (BlockReference.ReferenceCount() != 0)
+       {
+               unsigned int i;
+               for (i=0; i<BlockReference.ReferenceCount(); i++) {
+                       KaxCueReference & NewRefs = AddNewChild<KaxCueReference>(NewPositions);
+                       NewRefs.AddReference(BlockReference.Reference(i).RefBlock(), GlobalTimecodeScale);
+               }
+       }
+
+       KaxCodecState *CodecState = static_cast<KaxCodecState *>(BlockReference.FindFirstElt(KaxCodecState::ClassInfos));
+       if (CodecState != NULL) {
+               KaxCueCodecState &CueCodecState = AddNewChild<KaxCueCodecState>(NewPositions);
+               *static_cast<EbmlUInteger*>(&CueCodecState) = BlockReference.GetParentCluster()->GetParentSegment()->GetRelativePosition(CodecState->GetElementPosition());
+       }
+#endif // MATROSKA_VERSION
+
+       bValueIsSet = true;
+}
+
+void KaxCuePoint::PositionSet(const KaxBlockBlob & BlobReference, uint64 GlobalTimecodeScale)
+{
+       const KaxInternalBlock &BlockReference = BlobReference;
+
+       // fill me
+       KaxCueTime & NewTime = GetChild<KaxCueTime>(*this);
+       *static_cast<EbmlUInteger*>(&NewTime) = BlockReference.GlobalTimecode() / GlobalTimecodeScale;
+
+       KaxCueTrackPositions & NewPositions = AddNewChild<KaxCueTrackPositions>(*this);
+       KaxCueTrack & TheTrack = GetChild<KaxCueTrack>(NewPositions);
+       *static_cast<EbmlUInteger*>(&TheTrack) = BlockReference.TrackNum();
+       
+       KaxCueClusterPosition & TheClustPos = GetChild<KaxCueClusterPosition>(NewPositions);
+       *static_cast<EbmlUInteger*>(&TheClustPos) = BlockReference.ClusterPosition();
+
+#if 0 // MATROSKA_VERSION >= 2
+       // handle reference use
+       if (BlockReference.ReferenceCount() != 0)
+       {
+               unsigned int i;
+               for (i=0; i<BlockReference.ReferenceCount(); i++) {
+                       KaxCueReference & NewRefs = AddNewChild<KaxCueReference>(NewPositions);
+                       NewRefs.AddReference(BlockReference.Reference(i).RefBlock(), GlobalTimecodeScale);
+               }
+       }
+#endif // MATROSKA_VERSION
+
+#if MATROSKA_VERSION >= 2
+       if (!BlobReference.IsSimpleBlock()) {
+               const KaxBlockGroup &BlockGroup = BlobReference;
+               const KaxCodecState *CodecState = static_cast<KaxCodecState *>(BlockGroup.FindFirstElt(KaxCodecState::ClassInfos));
+               if (CodecState != NULL) {
+                       KaxCueCodecState &CueCodecState = AddNewChild<KaxCueCodecState>(NewPositions);
+                       *static_cast<EbmlUInteger*>(&CueCodecState) = BlockGroup.GetParentCluster()->GetParentSegment()->GetRelativePosition(CodecState->GetElementPosition());
+               }
+       }
+#endif // MATROSKA_VERSION
+
+       bValueIsSet = true;
+}
+
+#if MATROSKA_VERSION >= 2
+/*!
+       \todo handle codec state checking
+*/
+void KaxCueReference::AddReference(const KaxBlockBlob & BlockReference, uint64 GlobalTimecodeScale)
+{
+       const KaxInternalBlock & theBlock = BlockReference;
+       KaxCueRefTime & NewTime = GetChild<KaxCueRefTime>(*this);
+       *static_cast<EbmlUInteger*>(&NewTime) = theBlock.GlobalTimecode() / GlobalTimecodeScale;
+
+       KaxCueRefCluster & TheClustPos = GetChild<KaxCueRefCluster>(*this);
+       *static_cast<EbmlUInteger*>(&TheClustPos) = theBlock.ClusterPosition();
+
+#ifdef OLD
+       // handle recursive reference use
+       if (BlockReference.ReferenceCount() != 0)
+       {
+               unsigned int i;
+               for (i=0; i<BlockReference.ReferenceCount(); i++) {
+                       AddReference(BlockReference.Reference(i).RefBlock());
+               }
+       }
+#endif /* OLD */
+}
+#endif
+
+bool KaxCuePoint::operator<(const EbmlElement & EltB) const
+{
+       assert(EbmlId(*this) == KaxCuePoint_TheId);
+       assert(EbmlId(EltB) == KaxCuePoint_TheId);
+
+       const KaxCuePoint & theEltB = *static_cast<const KaxCuePoint *>(&EltB);
+
+       // compare timecode
+       const KaxCueTime * TimeCodeA = static_cast<const KaxCueTime *>(FindElt(KaxCueTime::ClassInfos));
+       if (TimeCodeA == NULL)
+               return false;
+
+       const KaxCueTime * TimeCodeB = static_cast<const KaxCueTime *>(theEltB.FindElt(KaxCueTime::ClassInfos));
+       if (TimeCodeB == NULL)
+               return false;
+
+       if (*TimeCodeA < *TimeCodeB)
+               return true;
+
+       if (*TimeCodeB < *TimeCodeA)
+               return false;
+
+       // compare tracks (timecodes are equal)
+       const KaxCueTrack * TrackA = static_cast<const KaxCueTrack *>(FindElt(KaxCueTrack::ClassInfos));
+       if (TrackA == NULL)
+               return false;
+
+       const KaxCueTrack * TrackB = static_cast<const KaxCueTrack *>(theEltB.FindElt(KaxCueTrack::ClassInfos));
+       if (TrackB == NULL)
+               return false;
+
+       if (*TrackA < *TrackB)
+               return true;
+
+       if (*TrackB < *TrackA)
+               return false;
+
+       return false;
+}
+
+bool KaxCuePoint::Timecode(uint64 & aTimecode, uint64 GlobalTimecodeScale) const
+{
+       const KaxCueTime *aTime = static_cast<const KaxCueTime *>(FindFirstElt(KaxCueTime::ClassInfos));
+       if (aTime == NULL)
+               return false;
+       aTimecode = uint64(*aTime) * GlobalTimecodeScale;
+       return true;
+}
+
+/*!
+       \brief return the position of the Cluster to load
+*/
+const KaxCueTrackPositions * KaxCuePoint::GetSeekPosition() const
+{
+       const KaxCueTrackPositions * result = NULL;
+       uint64 aPosition = EBML_PRETTYLONGINT(0xFFFFFFFFFFFFFFF);
+       // find the position of the "earlier" Cluster
+       const KaxCueTrackPositions *aPoss = static_cast<const KaxCueTrackPositions *>(FindFirstElt(KaxCueTrackPositions::ClassInfos));
+       while (aPoss != NULL)
+       {
+               const KaxCueClusterPosition *aPos = static_cast<const KaxCueClusterPosition *>(aPoss->FindFirstElt(KaxCueClusterPosition::ClassInfos));
+               if (aPos != NULL && uint64(*aPos) < aPosition) {
+                       aPosition = uint64(*aPos);
+                       result = aPoss;
+               }
+               
+               aPoss = static_cast<const KaxCueTrackPositions *>(FindNextElt(*aPoss));
+       }
+       return result;
+}
+
+uint64 KaxCueTrackPositions::ClusterPosition() const
+{
+       const KaxCueClusterPosition *aPos = static_cast<const KaxCueClusterPosition *>(FindFirstElt(KaxCueClusterPosition::ClassInfos));
+       if (aPos == NULL)
+               return 0;
+
+       return uint64(*aPos);
+}
+
+uint16 KaxCueTrackPositions::TrackNumber() const
+{
+       const KaxCueTrack *aTrack = static_cast<const KaxCueTrack *>(FindFirstElt(KaxCueTrack::ClassInfos));
+       if (aTrack == NULL)
+               return 0;
+
+       return uint16(*aTrack);
+}
+
+
+END_LIBMATROSKA_NAMESPACE
diff --git a/src/KaxInfo.cpp b/src/KaxInfo.cpp
new file mode 100644 (file)
index 0000000..8b8242d
--- /dev/null
@@ -0,0 +1,77 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxInfo.cpp 1078 2005-03-03 13:13:04Z robux4 $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#include "matroska/KaxInfo.h"
+#include "matroska/KaxInfoData.h"
+
+#include "matroska/KaxContexts.h"
+
+// sub elements
+START_LIBMATROSKA_NAMESPACE
+
+const EbmlSemantic KaxInfo_ContextList[14] =
+{
+       EbmlSemantic(false, true,  KaxSegmentUID::ClassInfos),
+       EbmlSemantic(false, true,  KaxSegmentFilename::ClassInfos),
+       EbmlSemantic(false, true,  KaxPrevUID::ClassInfos),
+       EbmlSemantic(false, true,  KaxPrevFilename::ClassInfos),
+       EbmlSemantic(false, true,  KaxNextUID::ClassInfos),
+       EbmlSemantic(false, true,  KaxNextFilename::ClassInfos),
+       EbmlSemantic(false, false, KaxSegmentFamily::ClassInfos),
+       EbmlSemantic(false, false, KaxChapterTranslate::ClassInfos),
+       EbmlSemantic(true,  true,  KaxTimecodeScale::ClassInfos),
+       EbmlSemantic(false, true,  KaxDuration::ClassInfos),
+       EbmlSemantic(false, true,  KaxDateUTC::ClassInfos),
+       EbmlSemantic(false, true,  KaxTitle::ClassInfos),
+       EbmlSemantic(true,  true,  KaxMuxingApp::ClassInfos),
+       EbmlSemantic(true,  true,  KaxWritingApp::ClassInfos),
+};
+
+const EbmlSemanticContext KaxInfo_Context = EbmlSemanticContext(countof(KaxInfo_ContextList), KaxInfo_ContextList, &KaxSegment_Context, *GetKaxGlobal_Context, &KaxInfo::ClassInfos);
+const EbmlSemanticContext KaxMuxingApp_Context = EbmlSemanticContext(0, NULL, &KaxInfo_Context, *GetKaxGlobal_Context, &KaxMuxingApp::ClassInfos);
+const EbmlSemanticContext KaxWritingApp_Context = EbmlSemanticContext(0, NULL, &KaxInfo_Context, *GetKaxGlobal_Context, &KaxWritingApp::ClassInfos);
+
+EbmlId KaxInfo_TheId      (0x1549A966, 4);
+EbmlId KaxMuxingApp_TheId (0x4D80, 2);
+EbmlId KaxWritingApp_TheId(0x5741, 2);
+
+const EbmlCallbacks KaxInfo::ClassInfos(KaxInfo::Create, KaxInfo_TheId, "Info", KaxInfo_Context);
+const EbmlCallbacks KaxMuxingApp::ClassInfos(KaxMuxingApp::Create, KaxMuxingApp_TheId, "MuxingApp", KaxMuxingApp_Context);
+const EbmlCallbacks KaxWritingApp::ClassInfos(KaxWritingApp::Create, KaxWritingApp_TheId, "WritingApp", KaxWritingApp_Context);
+
+KaxInfo::KaxInfo()
+       :EbmlMaster(KaxInfo_Context)
+{}
+
+END_LIBMATROSKA_NAMESPACE
diff --git a/src/KaxInfoData.cpp b/src/KaxInfoData.cpp
new file mode 100644 (file)
index 0000000..5a1b597
--- /dev/null
@@ -0,0 +1,101 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxInfoData.cpp 1078 2005-03-03 13:13:04Z robux4 $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+       \author John Cannon      <spyder2555 @ users.sf.net>
+*/
+#include "matroska/KaxInfoData.h"
+#include "matroska/KaxContexts.h"
+
+START_LIBMATROSKA_NAMESPACE
+
+const EbmlSemantic KaxChapterTranslate_ContextList[3] =
+{
+       EbmlSemantic(false, false, KaxChapterTranslateEditionUID::ClassInfos),
+       EbmlSemantic(true,  true,  KaxChapterTranslateCodec::ClassInfos),
+       EbmlSemantic(true,  true,  KaxChapterTranslateID::ClassInfos),
+};
+
+EbmlId KaxSegmentUID_TheId      (0x73A4, 2);
+EbmlId KaxSegmentFilename_TheId (0x7384, 2);
+EbmlId KaxPrevUID_TheId         (0x3CB923, 3);
+EbmlId KaxPrevFilename_TheId    (0x3C83AB, 3);
+EbmlId KaxNextUID_TheId         (0x3EB923, 3);
+EbmlId KaxNextFilename_TheId    (0x3E83BB, 3);
+EbmlId KaxSegmentFamily_TheId   (0x4444, 2);
+EbmlId KaxChapterTranslate_TheId(0x6924, 2);
+EbmlId KaxChapterTranslateEditionUID_TheId(0x69FC, 2);
+EbmlId KaxChapterTranslateCodec_TheId(0x69BF, 2);
+EbmlId KaxChapterTranslateID_TheId(0x69A5, 2);
+EbmlId KaxTimecodeScale_TheId   (0x2AD7B1, 3);
+EbmlId KaxDuration_TheId        (0x4489, 2);
+EbmlId KaxDateUTC_TheId         (0x4461, 2);
+EbmlId KaxTitle_TheId           (0x7BA9, 2);
+
+const EbmlSemanticContext KaxSegmentUID_Context = EbmlSemanticContext(0, NULL, &KaxInfo_Context, *GetKaxGlobal_Context, &KaxSegmentUID::ClassInfos);
+const EbmlSemanticContext KaxSegmentFilename_Context = EbmlSemanticContext(0, NULL, &KaxInfo_Context, *GetKaxGlobal_Context, &KaxSegmentFilename::ClassInfos);
+const EbmlSemanticContext KaxPrevUID_Context = EbmlSemanticContext(0, NULL, &KaxInfo_Context, *GetKaxGlobal_Context, &KaxPrevUID::ClassInfos);
+const EbmlSemanticContext KaxPrevFilename_Context = EbmlSemanticContext(0, NULL, &KaxInfo_Context, *GetKaxGlobal_Context, &KaxPrevFilename::ClassInfos);
+const EbmlSemanticContext KaxNextUID_Context = EbmlSemanticContext(0, NULL, &KaxInfo_Context, *GetKaxGlobal_Context, &KaxNextUID::ClassInfos);
+const EbmlSemanticContext KaxNextFilename_Context = EbmlSemanticContext(0, NULL, &KaxInfo_Context, *GetKaxGlobal_Context, &KaxNextFilename::ClassInfos);
+const EbmlSemanticContext KaxSegmentFamily_Context = EbmlSemanticContext(0, NULL, &KaxInfo_Context, *GetKaxGlobal_Context, &KaxSegmentFamily::ClassInfos);
+const EbmlSemanticContext KaxChapterTranslate_Context = EbmlSemanticContext(countof(KaxChapterTranslate_ContextList), KaxChapterTranslate_ContextList, &KaxInfo_Context, *GetKaxGlobal_Context, &KaxChapterTranslate::ClassInfos);
+const EbmlSemanticContext KaxChapterTranslateEditionUID_Context = EbmlSemanticContext(0, NULL, &KaxChapterTranslate_Context, *GetKaxGlobal_Context, &KaxChapterTranslateEditionUID::ClassInfos);
+const EbmlSemanticContext KaxChapterTranslateCodec_Context = EbmlSemanticContext(0, NULL, &KaxChapterTranslate_Context, *GetKaxGlobal_Context, &KaxChapterTranslateCodec::ClassInfos);
+const EbmlSemanticContext KaxChapterTranslateID_Context = EbmlSemanticContext(0, NULL, &KaxChapterTranslate_Context, *GetKaxGlobal_Context, &KaxChapterTranslateID::ClassInfos);
+const EbmlSemanticContext KaxTimecodeScale_Context = EbmlSemanticContext(0, NULL, &KaxInfo_Context, *GetKaxGlobal_Context, &KaxTimecodeScale::ClassInfos);
+const EbmlSemanticContext KaxDuration_Context = EbmlSemanticContext(0, NULL, &KaxInfo_Context, *GetKaxGlobal_Context, &KaxDuration::ClassInfos);
+const EbmlSemanticContext KaxDateUTC_Context = EbmlSemanticContext(0, NULL, &KaxInfo_Context, *GetKaxGlobal_Context, &KaxDateUTC::ClassInfos);
+const EbmlSemanticContext KaxTitle_Context = EbmlSemanticContext(0, NULL, &KaxInfo_Context, *GetKaxGlobal_Context, &KaxTitle::ClassInfos);
+
+
+const EbmlCallbacks KaxSegmentUID::ClassInfos(KaxSegmentUID::Create, KaxSegmentUID_TheId, "SegmentUID", KaxSegmentUID_Context);
+const EbmlCallbacks KaxSegmentFilename::ClassInfos(KaxSegmentFilename::Create, KaxSegmentFilename_TheId, "SegmentFilename", KaxSegmentFilename_Context);
+const EbmlCallbacks KaxPrevUID::ClassInfos(KaxPrevUID::Create, KaxPrevUID_TheId, "PrevUID", KaxPrevUID_Context);
+const EbmlCallbacks KaxPrevFilename::ClassInfos(KaxPrevFilename::Create, KaxPrevFilename_TheId, "PrevFilename", KaxPrevFilename_Context);
+const EbmlCallbacks KaxNextUID::ClassInfos(KaxNextUID::Create, KaxNextUID_TheId, "NextUID", KaxNextUID_Context);
+const EbmlCallbacks KaxNextFilename::ClassInfos(KaxNextFilename::Create, KaxNextFilename_TheId, "NextFilename", KaxNextFilename_Context);
+const EbmlCallbacks KaxSegmentFamily::ClassInfos(KaxSegmentFamily::Create, KaxSegmentFamily_TheId, "SegmentFamily", KaxSegmentFamily_Context);
+const EbmlCallbacks KaxChapterTranslate::ClassInfos(KaxChapterTranslate::Create, KaxChapterTranslate_TheId, "ChapterTranslate", KaxChapterTranslate_Context);
+const EbmlCallbacks KaxChapterTranslateEditionUID::ClassInfos(KaxChapterTranslateEditionUID::Create, KaxChapterTranslateEditionUID_TheId, "ChapterTranslateEditionUID", KaxChapterTranslateEditionUID_Context);
+const EbmlCallbacks KaxChapterTranslateCodec::ClassInfos(KaxChapterTranslateCodec::Create, KaxChapterTranslateCodec_TheId, "ChapterTranslateCodec", KaxChapterTranslateCodec_Context);
+const EbmlCallbacks KaxChapterTranslateID::ClassInfos(KaxChapterTranslateID::Create, KaxChapterTranslateID_TheId, "ChapterTranslateID", KaxChapterTranslateID_Context);
+const EbmlCallbacks KaxTimecodeScale::ClassInfos(KaxTimecodeScale::Create, KaxTimecodeScale_TheId, "TimecodeScale", KaxTimecodeScale_Context);
+const EbmlCallbacks KaxDuration::ClassInfos(KaxDuration::Create, KaxDuration_TheId, "Duration", KaxDuration_Context);
+const EbmlCallbacks KaxDateUTC::ClassInfos(KaxDateUTC::Create, KaxDateUTC_TheId, "DateUTC", KaxDateUTC_Context);
+const EbmlCallbacks KaxTitle::ClassInfos(KaxTitle::Create, KaxTitle_TheId, "Title", KaxTitle_Context);
+
+KaxChapterTranslate::KaxChapterTranslate()
+       :EbmlMaster(KaxChapterTranslate_Context)
+{}
+
+END_LIBMATROSKA_NAMESPACE
diff --git a/src/KaxSeekHead.cpp b/src/KaxSeekHead.cpp
new file mode 100644 (file)
index 0000000..571a4b9
--- /dev/null
@@ -0,0 +1,181 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxSeekHead.cpp 640 2004-07-09 21:05:36Z mosu $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#include "matroska/KaxSeekHead.h"
+#include "matroska/KaxContexts.h"
+#include "matroska/KaxSegment.h"
+#include "matroska/KaxCues.h"
+
+using namespace LIBEBML_NAMESPACE;
+
+// sub elements
+START_LIBMATROSKA_NAMESPACE
+
+EbmlSemantic KaxSeekHead_ContextList[1] = 
+{
+       EbmlSemantic(true,  false,  KaxSeek::ClassInfos),
+};
+
+EbmlSemantic KaxSeek_ContextList[2] = 
+{
+       EbmlSemantic(true,  true,  KaxSeekID::ClassInfos),
+       EbmlSemantic(true,  true,  KaxSeekPosition::ClassInfos),
+};
+
+const EbmlSemanticContext KaxSeekHead_Context = EbmlSemanticContext(countof(KaxSeekHead_ContextList), KaxSeekHead_ContextList, &KaxSegment_Context, *GetKaxGlobal_Context, &KaxSeekHead::ClassInfos);
+const EbmlSemanticContext KaxSeek_Context = EbmlSemanticContext(countof(KaxSeek_ContextList), KaxSeek_ContextList, &KaxSeekHead_Context, *GetKaxGlobal_Context, &KaxSeek::ClassInfos);
+const EbmlSemanticContext KaxSeekID_Context = EbmlSemanticContext(0, NULL, &KaxSeek_Context, *GetKaxGlobal_Context, &KaxSeekID::ClassInfos);
+const EbmlSemanticContext KaxSeekPosition_Context = EbmlSemanticContext(0, NULL, &KaxSeek_Context, *GetKaxGlobal_Context, &KaxSeekPosition::ClassInfos);
+
+EbmlId KaxSeekHead_TheId    (0x114D9B74, 4);
+EbmlId KaxSeek_TheId        (0x4DBB, 2);
+EbmlId KaxSeekID_TheId      (0x53AB, 2);
+EbmlId KaxSeekPosition_TheId(0x53AC, 2);
+
+const EbmlCallbacks KaxSeekHead::ClassInfos(KaxSeekHead::Create, KaxSeekHead_TheId, "SeekHeader", KaxSeekHead_Context);
+const EbmlCallbacks KaxSeek::ClassInfos(KaxSeek::Create, KaxSeek_TheId, "SeekPoint", KaxSeek_Context);
+const EbmlCallbacks KaxSeekID::ClassInfos(KaxSeekID::Create, KaxSeekID_TheId, "SeekID", KaxSeekID_Context);
+const EbmlCallbacks KaxSeekPosition::ClassInfos(KaxSeekPosition::Create, KaxSeekPosition_TheId, "SeekPosition", KaxSeekPosition_Context);
+
+KaxSeekHead::KaxSeekHead()
+       :EbmlMaster(KaxSeekHead_Context)
+{}
+
+KaxSeek::KaxSeek()
+       :EbmlMaster(KaxSeek_Context)
+{}
+
+/*!
+       \todo verify that the element is not already in the list
+*/
+void KaxSeekHead::IndexThis(const EbmlElement & aElt, const KaxSegment & ParentSegment)
+{
+       // create a new point
+       KaxSeek & aNewPoint = AddNewChild<KaxSeek>(*this);
+
+       // add the informations to this element
+       KaxSeekPosition & aNewPos = GetChild<KaxSeekPosition>(aNewPoint);
+       *static_cast<EbmlUInteger *>(&aNewPos) = ParentSegment.GetRelativePosition(aElt);
+
+       KaxSeekID & aNewID = GetChild<KaxSeekID>(aNewPoint);
+       binary ID[4];
+       for (int i=aElt.Generic().GlobalId.Length; i>0; i--) {
+               ID[4-i] = (aElt.Generic().GlobalId.Value >> 8*(i-1)) & 0xFF;
+       }
+       aNewID.CopyBuffer(ID, aElt.Generic().GlobalId.Length);
+}
+
+KaxSeek * KaxSeekHead::FindFirstOf(const EbmlCallbacks & Callbacks) const
+{
+       // parse all the Entries and find the first to match the type
+       KaxSeek * aElt = static_cast<KaxSeek *>(FindFirstElt(KaxSeek::ClassInfos));
+       while (aElt != NULL)
+       {
+               KaxSeekID * aId = NULL;
+               for (unsigned int i = 0; i<aElt->ListSize(); i++) {
+                       if (EbmlId(*(*aElt)[i]) == KaxSeekID::ClassInfos.GlobalId) {
+                               aId = static_cast<KaxSeekID*>((*aElt)[i]);
+                               EbmlId aEbmlId(aId->GetBuffer(), aId->GetSize());
+                               if (aEbmlId == Callbacks.GlobalId)
+                               {
+                                       return aElt;
+                               }
+                               break;
+                       }
+               }
+               aElt = static_cast<KaxSeek *>(FindNextElt(*aElt));
+       }
+
+       return NULL;
+}
+
+KaxSeek * KaxSeekHead::FindNextOf(const KaxSeek &aPrev) const
+{
+       unsigned int iIndex;
+       KaxSeek *tmp;
+       
+       // look for the previous in the list
+       for (iIndex = 0; iIndex<ElementList.size(); iIndex++)
+       {
+               if (ElementList[iIndex] == static_cast<const EbmlElement*>(&aPrev))
+                       break;
+       }
+
+       if (iIndex <ElementList.size()) {
+               iIndex++;
+               for (; iIndex<ElementList.size(); iIndex++)
+               {
+                       if (EbmlId(*(ElementList[iIndex])) == KaxSeek::ClassInfos.GlobalId)
+                       {
+                               tmp = static_cast<KaxSeek *>(ElementList[iIndex]);
+                               if (tmp->IsEbmlId(aPrev))
+                                       return tmp;
+                       }
+               }
+       }
+
+       return NULL;
+}
+
+int64 KaxSeek::Location() const
+{
+       KaxSeekPosition *aPos = static_cast<KaxSeekPosition*>(FindFirstElt(KaxSeekPosition::ClassInfos));
+       if (aPos == NULL)
+               return 0;
+       return uint64(*aPos);
+}
+
+bool KaxSeek::IsEbmlId(const EbmlId & aId) const
+{
+       KaxSeekID *_Id = static_cast<KaxSeekID*>(FindFirstElt(KaxSeekID::ClassInfos));
+       if (_Id == NULL)
+               return false;
+       EbmlId aEbmlId(_Id->GetBuffer(), _Id->GetSize());
+       return (aId == aEbmlId);
+}
+
+bool KaxSeek::IsEbmlId(const KaxSeek & aPoint) const
+{
+       KaxSeekID *_IdA = static_cast<KaxSeekID*>(FindFirstElt(KaxSeekID::ClassInfos));
+       if (_IdA == NULL)
+               return false;
+       KaxSeekID *_IdB = static_cast<KaxSeekID*>(aPoint.FindFirstElt(KaxSeekID::ClassInfos));
+       if (_IdB == NULL)
+               return false;
+       EbmlId aEbmlIdA(_IdA->GetBuffer(), _IdA->GetSize());
+       EbmlId aEbmlIdB(_IdB->GetBuffer(), _IdB->GetSize());
+       return (aEbmlIdA == aEbmlIdB);
+}
+
+END_LIBMATROSKA_NAMESPACE
diff --git a/src/KaxSegment.cpp b/src/KaxSegment.cpp
new file mode 100644 (file)
index 0000000..4bafab1
--- /dev/null
@@ -0,0 +1,111 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxSegment.cpp 1096 2005-03-17 09:14:52Z robux4 $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#include "matroska/KaxSegment.h"
+#include "ebml/EbmlHead.h"
+
+// sub elements
+#include "matroska/KaxCluster.h"
+#include "matroska/KaxSeekHead.h"
+#include "matroska/KaxCues.h"
+#include "matroska/KaxTracks.h"
+#include "matroska/KaxInfo.h"
+#include "matroska/KaxChapters.h"
+#include "matroska/KaxAttachments.h"
+#include "matroska/KaxTags.h"
+#include "matroska/KaxContexts.h"
+
+START_LIBMATROSKA_NAMESPACE
+
+EbmlSemantic KaxMatroska_ContextList[2] =
+{
+       EbmlSemantic(true, true,  EbmlHead::ClassInfos),
+       EbmlSemantic(true, false, KaxSegment::ClassInfos),
+};
+
+EbmlSemantic KaxSegment_ContextList[8] =
+{
+       EbmlSemantic(false, false, KaxCluster::ClassInfos),
+       EbmlSemantic(false, false, KaxSeekHead::ClassInfos),
+       EbmlSemantic(false, true,  KaxCues::ClassInfos),
+       EbmlSemantic(false, false, KaxTracks::ClassInfos),
+       EbmlSemantic(true,  true,  KaxInfo::ClassInfos),
+       EbmlSemantic(false, true,  KaxChapters::ClassInfos),
+       EbmlSemantic(false, true,  KaxAttachments::ClassInfos),
+       EbmlSemantic(false, true,  KaxTags::ClassInfos),
+};
+
+const EbmlSemanticContext KaxMatroska_Context = EbmlSemanticContext(countof(KaxMatroska_ContextList), KaxMatroska_ContextList, NULL, *GetKaxGlobal_Context, NULL);
+const EbmlSemanticContext KaxSegment_Context = EbmlSemanticContext(countof(KaxSegment_ContextList), KaxSegment_ContextList, NULL, *GetKaxGlobal_Context, &KaxSegment::ClassInfos);
+
+EbmlId KaxSegment_TheId(0x18538067, 4);
+const EbmlCallbacks KaxSegment::ClassInfos(KaxSegment::Create, KaxSegment_TheId, "Segment\0rotomopogo", KaxSegment_Context);
+
+KaxSegment::KaxSegment()
+       :EbmlMaster(KaxSegment_Context)
+{
+       SetSizeLength(5); // mandatory min size support (for easier updating) (2^(7*5)-2 = 32Go)
+       SetSizeInfinite(); // by default a segment is big and the size is unknown in advance
+}
+
+KaxSegment::KaxSegment(const KaxSegment & ElementToClone)
+ :EbmlMaster(ElementToClone)
+{
+       // update the parent of each children
+       std::vector<EbmlElement *>::const_iterator Itr = ElementList.begin();
+       while (Itr != ElementList.end())
+       {
+               if (EbmlId(**Itr) == KaxCluster::ClassInfos.GlobalId) {
+                       static_cast<KaxCluster *>(*Itr)->SetParent(*this);
+               }
+       }
+}
+
+
+uint64 KaxSegment::GetRelativePosition(uint64 aGlobalPosition) const
+{
+       return aGlobalPosition - GetElementPosition() - HeadSize();
+}
+
+uint64 KaxSegment::GetRelativePosition(const EbmlElement & Elt) const
+{
+       return GetRelativePosition(Elt.GetElementPosition());
+}
+
+uint64 KaxSegment::GetGlobalPosition(uint64 aRelativePosition) const
+{
+       return aRelativePosition + GetElementPosition() + HeadSize();
+}
+
+END_LIBMATROSKA_NAMESPACE
diff --git a/src/KaxTag.cpp b/src/KaxTag.cpp
new file mode 100644 (file)
index 0000000..86cd817
--- /dev/null
@@ -0,0 +1,347 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxTag.cpp 1325 2009-03-30 07:56:54Z robux4 $
+       \author Jory Stone       <jcsston @ toughguy.net>
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#include "matroska/KaxTag.h"
+#include "matroska/KaxTagMulti.h"
+#include "matroska/KaxContexts.h"
+
+using namespace LIBEBML_NAMESPACE;
+
+// sub elements
+START_LIBMATROSKA_NAMESPACE
+
+EbmlSemantic KaxTag_ContextList[14] =
+{      
+       EbmlSemantic(true,  true,  KaxTagTargets::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagGeneral::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagGenres::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagAudioSpecific::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagImageSpecific::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagMultiCommercial::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagMultiDate::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagMultiEntity::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagMultiIdentifier::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagMultiLegal::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagMultiTitle::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagMultiAttachment::ClassInfos),
+//     EbmlSemantic(false, false, KaxTagLength::ClassInfos),
+//     EbmlSemantic(false, false, KaxTagPlaylistDelay::ClassInfos),
+//     EbmlSemantic(false, false, KaxTagUnsynchronisedText::ClassInfos),
+//     EbmlSemantic(false, false, KaxTagUserDefinedURL::ClassInfos),
+       EbmlSemantic(false, false, KaxTagMultiComment::ClassInfos),
+       EbmlSemantic(true,  false, KaxTagSimple::ClassInfos),
+};
+
+EbmlSemantic KaxTagTargets_ContextList[6] =
+{      
+       EbmlSemantic(false, true,  KaxTagTargetTypeValue::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagTargetType::ClassInfos),
+       EbmlSemantic(false, false, KaxTagTrackUID::ClassInfos),
+       EbmlSemantic(false, false, KaxTagEditionUID::ClassInfos),
+       EbmlSemantic(false, false, KaxTagChapterUID::ClassInfos),
+       EbmlSemantic(false, false, KaxTagAttachmentUID::ClassInfos),
+};
+
+EbmlSemantic KaxTagGeneral_ContextList[17] =
+{      
+       EbmlSemantic(false, true,  KaxTagArchivalLocation::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagFile::ClassInfos),
+       EbmlSemantic(false, false, KaxTagKeywords::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagMood::ClassInfos),
+       EbmlSemantic(false, false, KaxTagRecordLocation::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagSource::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagSourceForm::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagProduct::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagOriginalMediaType::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagPlayCounter::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagPopularimeter::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagSubject::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagBibliography::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagLanguage::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagRating::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagEncoder::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagEncodeSettings::ClassInfos),
+};
+
+EbmlSemantic KaxTagGenres_ContextList[3] =
+{      
+       EbmlSemantic(false, false, KaxTagAudioGenre::ClassInfos),
+       EbmlSemantic(false, false, KaxTagVideoGenre::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagSubGenre::ClassInfos),
+};
+
+EbmlSemantic KaxTagAudioSpecific_ContextList[10] =
+{      
+       EbmlSemantic(false, true, KaxTagAudioPeak::ClassInfos),
+       EbmlSemantic(false, true, KaxTagAudioEncryption::ClassInfos),
+       EbmlSemantic(false, true, KaxTagAudioGain::ClassInfos),
+       EbmlSemantic(false, true, KaxTagBPM::ClassInfos),
+       EbmlSemantic(false, true, KaxTagDiscTrack::ClassInfos),
+       EbmlSemantic(false, true, KaxTagSetPart::ClassInfos),
+       EbmlSemantic(false, true, KaxTagEqualisation::ClassInfos),
+       EbmlSemantic(false, true, KaxTagInitialKey::ClassInfos),
+       EbmlSemantic(false, true, KaxTagOfficialAudioFileURL::ClassInfos),
+       EbmlSemantic(false, true, KaxTagOfficialAudioSourceURL::ClassInfos),
+};
+
+EbmlSemantic KaxTagImageSpecific_ContextList[6] =
+{
+       EbmlSemantic(false, true, KaxTagCaptureDPI::ClassInfos),
+       EbmlSemantic(false, true, KaxTagCaptureLightness::ClassInfos),
+       EbmlSemantic(false, true, KaxTagCapturePaletteSetting::ClassInfos),
+       EbmlSemantic(false, true, KaxTagCaptureSharpness::ClassInfos),
+       EbmlSemantic(false, true, KaxTagCropped::ClassInfos),
+       EbmlSemantic(false, true, KaxTagOriginalDimensions::ClassInfos),
+};
+
+EbmlSemantic KaxTagSimple_ContextList[6] =
+{      
+       EbmlSemantic(true,  true,  KaxTagName::ClassInfos),
+       EbmlSemantic(true,  true,  KaxTagLangue::ClassInfos),
+       EbmlSemantic(true,  true,  KaxTagDefault::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagString::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagBinary::ClassInfos),
+       EbmlSemantic(false, false, KaxTagSimple::ClassInfos),
+};
+
+const EbmlSemanticContext KaxTag_Context = EbmlSemanticContext(countof(KaxTag_ContextList), KaxTag_ContextList, &KaxTags_Context, *GetKaxTagsGlobal_Context, &KaxTag::ClassInfos);
+const EbmlSemanticContext KaxTagTargets_Context = EbmlSemanticContext(countof(KaxTagTargets_ContextList), KaxTagTargets_ContextList, &KaxTag_Context, *GetKaxTagsGlobal_Context, &KaxTagTargets::ClassInfos);
+const EbmlSemanticContext KaxTagGeneral_Context = EbmlSemanticContext(countof(KaxTagGeneral_ContextList), KaxTagGeneral_ContextList, &KaxTag_Context, *GetKaxTagsGlobal_Context, &KaxTagGeneral::ClassInfos);
+const EbmlSemanticContext KaxTagGenres_Context = EbmlSemanticContext(countof(KaxTagGenres_ContextList), KaxTagGenres_ContextList, &KaxTag_Context, *GetKaxTagsGlobal_Context, &KaxTagGenres::ClassInfos);
+const EbmlSemanticContext KaxTagAudioSpecific_Context = EbmlSemanticContext(countof(KaxTagAudioSpecific_ContextList), KaxTagAudioSpecific_ContextList, &KaxTag_Context, *GetKaxTagsGlobal_Context, &KaxTagAudioSpecific::ClassInfos);
+const EbmlSemanticContext KaxTagImageSpecific_Context = EbmlSemanticContext(countof(KaxTagImageSpecific_ContextList), KaxTagImageSpecific_ContextList, &KaxTag_Context, *GetKaxTagsGlobal_Context, &KaxTagImageSpecific::ClassInfos);
+const EbmlSemanticContext KaxTagBibliography_Context = EbmlSemanticContext(0, NULL, &KaxTag_Context, *GetKaxGlobal_Context, &KaxTagBibliography::ClassInfos);
+const EbmlSemanticContext KaxTagEncoder_Context = EbmlSemanticContext(0, NULL, &KaxTag_Context, *GetKaxGlobal_Context, &KaxTagEncoder::ClassInfos);
+const EbmlSemanticContext KaxTagEncodeSettings_Context = EbmlSemanticContext(0, NULL, &KaxTag_Context, *GetKaxGlobal_Context, &KaxTagEncodeSettings::ClassInfos);
+const EbmlSemanticContext KaxTagLanguage_Context = EbmlSemanticContext(0, NULL, &KaxTag_Context, *GetKaxGlobal_Context, &KaxTagLanguage::ClassInfos);
+const EbmlSemanticContext KaxTagLength_Context = EbmlSemanticContext(0, NULL, &KaxTag_Context, *GetKaxGlobal_Context, &KaxTagLength::ClassInfos);
+const EbmlSemanticContext KaxTagPlaylistDelay_Context = EbmlSemanticContext(0, NULL, &KaxTag_Context, *GetKaxGlobal_Context, &KaxTagPlaylistDelay::ClassInfos);
+const EbmlSemanticContext KaxTagRating_Context = EbmlSemanticContext(0, NULL, &KaxTag_Context, *GetKaxGlobal_Context, &KaxTagRating::ClassInfos);
+const EbmlSemanticContext KaxTagSubject_Context = EbmlSemanticContext(0, NULL, &KaxTag_Context, *GetKaxGlobal_Context, &KaxTagSubject::ClassInfos);
+const EbmlSemanticContext KaxTagUnsynchronisedText_Context = EbmlSemanticContext(0, NULL, &KaxTag_Context, *GetKaxGlobal_Context, &KaxTagUnsynchronisedText::ClassInfos);
+const EbmlSemanticContext KaxTagUserDefinedURL_Context = EbmlSemanticContext(0, NULL, &KaxTag_Context, *GetKaxGlobal_Context, &KaxTagUserDefinedURL::ClassInfos);
+const EbmlSemanticContext KaxTagTargetTypeValue_Context = EbmlSemanticContext(0, NULL, &KaxTagTargets_Context, *GetKaxGlobal_Context, &KaxTagTargetTypeValue::ClassInfos);
+const EbmlSemanticContext KaxTagTargetType_Context = EbmlSemanticContext(0, NULL, &KaxTagTargets_Context, *GetKaxGlobal_Context, &KaxTagTargetType::ClassInfos);
+const EbmlSemanticContext KaxTagTrackUID_Context = EbmlSemanticContext(0, NULL, &KaxTagTargets_Context, *GetKaxGlobal_Context, &KaxTagTrackUID::ClassInfos);
+const EbmlSemanticContext KaxTagEditionUID_Context = EbmlSemanticContext(0, NULL, &KaxTagTargets_Context, *GetKaxGlobal_Context, &KaxTagEditionUID::ClassInfos);
+const EbmlSemanticContext KaxTagChapterUID_Context = EbmlSemanticContext(0, NULL, &KaxTagTargets_Context, *GetKaxGlobal_Context, &KaxTagChapterUID::ClassInfos);
+const EbmlSemanticContext KaxTagAttachmentUID_Context = EbmlSemanticContext(0, NULL, &KaxTagTargets_Context, *GetKaxGlobal_Context, &KaxTagAttachmentUID::ClassInfos);
+const EbmlSemanticContext KaxTagArchivalLocation_Context = EbmlSemanticContext(0, NULL, &KaxTagGeneral_Context, *GetKaxGlobal_Context, &KaxTagArchivalLocation::ClassInfos);
+const EbmlSemanticContext KaxTagFile_Context = EbmlSemanticContext(0, NULL, &KaxTagGeneral_Context, *GetKaxGlobal_Context, &KaxTagFile::ClassInfos);
+const EbmlSemanticContext KaxTagKeywords_Context = EbmlSemanticContext(0, NULL, &KaxTagGeneral_Context, *GetKaxGlobal_Context, &KaxTagKeywords::ClassInfos);
+const EbmlSemanticContext KaxTagMood_Context = EbmlSemanticContext(0, NULL, &KaxTagGeneral_Context, *GetKaxGlobal_Context, &KaxTagMood::ClassInfos);
+const EbmlSemanticContext KaxTagRecordLocation_Context = EbmlSemanticContext(0, NULL, &KaxTagGeneral_Context, *GetKaxGlobal_Context, &KaxTagRecordLocation::ClassInfos);
+const EbmlSemanticContext KaxTagSource_Context = EbmlSemanticContext(0, NULL, &KaxTagGeneral_Context, *GetKaxGlobal_Context, &KaxTagSource::ClassInfos);
+const EbmlSemanticContext KaxTagSourceForm_Context = EbmlSemanticContext(0, NULL, &KaxTagGeneral_Context, *GetKaxGlobal_Context, &KaxTagSourceForm::ClassInfos);
+const EbmlSemanticContext KaxTagProduct_Context = EbmlSemanticContext(0, NULL, &KaxTagGeneral_Context, *GetKaxGlobal_Context, &KaxTagProduct::ClassInfos);
+const EbmlSemanticContext KaxTagOriginalMediaType_Context = EbmlSemanticContext(0, NULL, &KaxTagGeneral_Context, *GetKaxGlobal_Context, &KaxTagOriginalMediaType::ClassInfos);
+const EbmlSemanticContext KaxTagPlayCounter_Context = EbmlSemanticContext(0, NULL, &KaxTagGeneral_Context, *GetKaxGlobal_Context, &KaxTagPlayCounter::ClassInfos);
+const EbmlSemanticContext KaxTagPopularimeter_Context = EbmlSemanticContext(0, NULL, &KaxTagGeneral_Context, *GetKaxGlobal_Context, &KaxTagPopularimeter::ClassInfos);
+const EbmlSemanticContext KaxTagAudioGenre_Context = EbmlSemanticContext(0, NULL, &KaxTagGenres_Context, *GetKaxGlobal_Context, &KaxTagAudioGenre::ClassInfos);
+const EbmlSemanticContext KaxTagVideoGenre_Context = EbmlSemanticContext(0, NULL, &KaxTagGenres_Context, *GetKaxGlobal_Context, &KaxTagVideoGenre::ClassInfos);
+const EbmlSemanticContext KaxTagSubGenre_Context = EbmlSemanticContext(0, NULL, &KaxTagGenres_Context, *GetKaxGlobal_Context, &KaxTagSubGenre::ClassInfos);
+const EbmlSemanticContext KaxTagAudioEncryption_Context = EbmlSemanticContext(0, NULL, &KaxTagAudioSpecific_Context, *GetKaxGlobal_Context, &KaxTagAudioEncryption::ClassInfos);
+const EbmlSemanticContext KaxTagAudioGain_Context = EbmlSemanticContext(0, NULL, &KaxTagAudioSpecific_Context, *GetKaxGlobal_Context, &KaxTagAudioGain::ClassInfos);
+const EbmlSemanticContext KaxTagAudioPeak_Context = EbmlSemanticContext(0, NULL, &KaxTagAudioSpecific_Context, *GetKaxGlobal_Context, &KaxTagAudioPeak::ClassInfos);
+const EbmlSemanticContext KaxTagBPM_Context = EbmlSemanticContext(0, NULL, &KaxTagAudioSpecific_Context, *GetKaxGlobal_Context, &KaxTagBPM::ClassInfos);
+const EbmlSemanticContext KaxTagDiscTrack_Context = EbmlSemanticContext(0, NULL, &KaxTagAudioSpecific_Context, *GetKaxGlobal_Context, &KaxTagDiscTrack::ClassInfos);
+const EbmlSemanticContext KaxTagSetPart_Context = EbmlSemanticContext(0, NULL, &KaxTagAudioSpecific_Context, *GetKaxGlobal_Context, &KaxTagSetPart::ClassInfos);
+const EbmlSemanticContext KaxTagEqualisation_Context = EbmlSemanticContext(0, NULL, &KaxTagAudioSpecific_Context, *GetKaxGlobal_Context, &KaxTagEqualisation::ClassInfos);
+const EbmlSemanticContext KaxTagInitialKey_Context = EbmlSemanticContext(0, NULL, &KaxTagAudioSpecific_Context, *GetKaxGlobal_Context, &KaxTagInitialKey::ClassInfos);
+const EbmlSemanticContext KaxTagOfficialAudioFileURL_Context = EbmlSemanticContext(0, NULL, &KaxTagAudioSpecific_Context, *GetKaxGlobal_Context, &KaxTagOfficialAudioFileURL::ClassInfos);
+const EbmlSemanticContext KaxTagOfficialAudioSourceURL_Context = EbmlSemanticContext(0, NULL, &KaxTagAudioSpecific_Context, *GetKaxGlobal_Context, &KaxTagOfficialAudioSourceURL::ClassInfos);
+const EbmlSemanticContext KaxTagCaptureDPI_Context = EbmlSemanticContext(0, NULL, &KaxTagImageSpecific_Context, *GetKaxGlobal_Context, &KaxTagCaptureDPI::ClassInfos);
+const EbmlSemanticContext KaxTagCaptureLightness_Context = EbmlSemanticContext(0, NULL, &KaxTagImageSpecific_Context, *GetKaxGlobal_Context, &KaxTagCaptureLightness::ClassInfos);
+const EbmlSemanticContext KaxTagCapturePaletteSetting_Context = EbmlSemanticContext(0, NULL, &KaxTagImageSpecific_Context, *GetKaxGlobal_Context, &KaxTagCapturePaletteSetting::ClassInfos);
+const EbmlSemanticContext KaxTagCaptureSharpness_Context = EbmlSemanticContext(0, NULL, &KaxTagImageSpecific_Context, *GetKaxGlobal_Context, &KaxTagCaptureSharpness::ClassInfos);
+const EbmlSemanticContext KaxTagCropped_Context = EbmlSemanticContext(0, NULL, &KaxTagImageSpecific_Context, *GetKaxGlobal_Context, &KaxTagCropped::ClassInfos);
+const EbmlSemanticContext KaxTagOriginalDimensions_Context = EbmlSemanticContext(0, NULL, &KaxTagImageSpecific_Context, *GetKaxGlobal_Context, &KaxTagOriginalDimensions::ClassInfos);
+
+const EbmlSemanticContext KaxTagSimple_Context = EbmlSemanticContext(countof(KaxTagSimple_ContextList), KaxTagSimple_ContextList, &KaxTag_Context, *GetKaxGlobal_Context, &KaxTagSimple::ClassInfos);
+const EbmlSemanticContext KaxTagName_Context = EbmlSemanticContext(0, NULL, &KaxTagSimple_Context, *GetKaxGlobal_Context, &KaxTagName::ClassInfos);
+const EbmlSemanticContext KaxTagLangue_Context = EbmlSemanticContext(0, NULL, &KaxTagSimple_Context, *GetKaxGlobal_Context, &KaxTagLangue::ClassInfos);
+const EbmlSemanticContext KaxTagDefault_Context = EbmlSemanticContext(0, NULL, &KaxTagSimple_Context, *GetKaxGlobal_Context, &KaxTagDefault::ClassInfos);
+const EbmlSemanticContext KaxTagString_Context = EbmlSemanticContext(0, NULL, &KaxTagSimple_Context, *GetKaxGlobal_Context, &KaxTagString::ClassInfos);
+const EbmlSemanticContext KaxTagBinary_Context = EbmlSemanticContext(0, NULL, &KaxTagSimple_Context, *GetKaxGlobal_Context, &KaxTagBinary::ClassInfos);
+
+EbmlId KaxTag_TheId                      (0x7373, 2);
+EbmlId KaxTagTargets_TheId               (0x63C0, 2);
+EbmlId KaxTagGeneral_TheId               (0x67C9, 2);
+EbmlId KaxTagGenres_TheId                (0x6583, 2);
+EbmlId KaxTagAudioSpecific_TheId         (0x41C5, 2);
+EbmlId KaxTagImageSpecific_TheId         (0x4990, 2);
+EbmlId KaxTagBibliography_TheId          (0x4488, 2);
+EbmlId KaxTagEncoder_TheId               (0x4431, 2);
+EbmlId KaxTagEncodeSettings_TheId        (0x6526, 2);
+EbmlId KaxTagLanguage_TheId              (0x22B59F, 3);
+EbmlId KaxTagLength_TheId                (0x5243, 2);
+EbmlId KaxTagPlaylistDelay_TheId         (0x72CC, 2);
+EbmlId KaxTagRating_TheId                (0x52BC, 2);
+EbmlId KaxTagSubject_TheId               (0x49C1, 2);
+EbmlId KaxTagUnsynchronisedText_TheId    (0x874B, 2);
+EbmlId KaxTagUserDefinedURL_TheId        (0x434A, 2);
+EbmlId KaxTagTargetTypeValue_TheId       (0x68CA, 2);
+EbmlId KaxTagTargetType_TheId            (0x63CA, 2);
+EbmlId KaxTagTrackUID_TheId              (0x63C5, 2);
+EbmlId KaxTagEditionUID_TheId            (0x63C9, 2);
+EbmlId KaxTagChapterUID_TheId            (0x63C4, 2);
+EbmlId KaxTagAttachmentUID_TheId         (0x63C6, 2);
+EbmlId KaxTagAudioGenre_TheId            (0x65C2, 2);
+EbmlId KaxTagVideoGenre_TheId            (0x65A1, 2);
+EbmlId KaxTagSubGenre_TheId              (0x65AC, 2);
+EbmlId KaxTagAudioEncryption_TheId       (0x41B4, 2);
+EbmlId KaxTagAudioGain_TheId             (0x4199, 2);
+EbmlId KaxTagAudioPeak_TheId             (0x4189, 2);
+EbmlId KaxTagBPM_TheId                   (0x41A1, 2);
+EbmlId KaxTagDiscTrack_TheId             (0x41B6, 2);
+EbmlId KaxTagSetPart_TheId               (0x416E, 2);
+EbmlId KaxTagEqualisation_TheId          (0x41B1, 2);
+EbmlId KaxTagInitialKey_TheId            (0x413A, 2);
+EbmlId KaxTagOfficialAudioFileURL_TheId         (0x4133, 2);
+EbmlId KaxTagOfficialAudioSourceURL_TheId(0x413E, 2);
+EbmlId KaxTagArchivalLocation_TheId      (0x45A4, 2);
+EbmlId KaxTagFile_TheId                  (0x454E, 2);
+EbmlId KaxTagKeywords_TheId              (0x458C, 2);
+EbmlId KaxTagMood_TheId                  (0x45AE, 2);
+EbmlId KaxTagRecordLocation_TheId        (0x457E, 2);
+EbmlId KaxTagSource_TheId                (0x458A, 2);
+EbmlId KaxTagSourceForm_TheId            (0x45B5, 2);
+EbmlId KaxTagProduct_TheId               (0x45E3, 2);
+EbmlId KaxTagOriginalMediaType_TheId     (0x45A7, 2);
+EbmlId KaxTagPlayCounter_TheId           (0x4566, 2);
+EbmlId KaxTagPopularimeter_TheId         (0x4532, 2);
+EbmlId KaxTagCaptureDPI_TheId            (0x49C7, 2);
+EbmlId KaxTagCaptureLightness_TheId      (0x49E1, 2);
+EbmlId KaxTagCapturePaletteSetting_TheId (0x4934, 2);
+EbmlId KaxTagCaptureSharpness_TheId      (0x4922, 2);
+EbmlId KaxTagCropped_TheId               (0x4987, 2);
+EbmlId KaxTagOriginalDimensions_TheId    (0x4933, 2);
+
+EbmlId KaxTagSimple_TheId                                                               (0x67C8, 2);
+EbmlId KaxTagName_TheId                                                                         (0x45A3, 2);
+EbmlId KaxTagLangue_TheId                                                               (0x447A, 2);
+EbmlId KaxTagDefault_TheId                                                              (0x4484, 2);
+EbmlId KaxTagString_TheId                                                               (0x4487, 2);
+EbmlId KaxTagBinary_TheId                                                               (0x4485, 2);
+
+const EbmlCallbacks KaxTag::ClassInfos(KaxTag::Create, KaxTag_TheId, "Tag", KaxTag_Context);
+const EbmlCallbacks KaxTagTargets::ClassInfos(KaxTagTargets::Create, KaxTagTargets_TheId, "TagTargets", KaxTagTargets_Context);
+const EbmlCallbacks KaxTagGeneral::ClassInfos(KaxTagGeneral::Create, KaxTagGeneral_TheId, "TagGeneral", KaxTagGeneral_Context);
+const EbmlCallbacks KaxTagGenres::ClassInfos(KaxTagGenres::Create, KaxTagGenres_TheId, "TagGenres", KaxTagGenres_Context);
+const EbmlCallbacks KaxTagAudioSpecific::ClassInfos(KaxTagAudioSpecific::Create, KaxTagAudioSpecific_TheId, "TagAudioSpecific", KaxTagAudioSpecific_Context);
+const EbmlCallbacks KaxTagImageSpecific::ClassInfos(KaxTagImageSpecific::Create, KaxTagImageSpecific_TheId, "TagImageSpecific", KaxTagImageSpecific_Context);
+const EbmlCallbacks KaxTagBibliography::ClassInfos(KaxTagBibliography::Create, KaxTagBibliography_TheId, "Bibliography", KaxTagBibliography_Context);
+const EbmlCallbacks KaxTagCaptureDPI::ClassInfos(KaxTagCaptureDPI::Create, KaxTagCaptureDPI_TheId, "CaptureDPI", KaxTagCaptureDPI_Context);
+const EbmlCallbacks KaxTagCaptureLightness::ClassInfos(KaxTagCaptureLightness::Create, KaxTagCaptureLightness_TheId, "CaptureLightness", KaxTagCaptureLightness_Context);
+const EbmlCallbacks KaxTagCapturePaletteSetting::ClassInfos(KaxTagCapturePaletteSetting::Create, KaxTagCapturePaletteSetting_TheId, "CapturePaletteSetting", KaxTagCapturePaletteSetting_Context);
+const EbmlCallbacks KaxTagCaptureSharpness::ClassInfos(KaxTagCaptureSharpness::Create, KaxTagCaptureSharpness_TheId, "CaptureSharpness", KaxTagCaptureSharpness_Context);
+const EbmlCallbacks KaxTagCropped::ClassInfos(KaxTagCropped::Create, KaxTagCropped_TheId, "Cropped", KaxTagCropped_Context);
+const EbmlCallbacks KaxTagEncoder::ClassInfos(KaxTagEncoder::Create, KaxTagEncoder_TheId, "Encoder", KaxTagEncoder_Context);
+const EbmlCallbacks KaxTagEncodeSettings::ClassInfos(KaxTagEncodeSettings::Create, KaxTagEncodeSettings_TheId, "EncodeSettings", KaxTagEncodeSettings_Context);
+const EbmlCallbacks KaxTagLanguage::ClassInfos(KaxTagLanguage::Create, KaxTagLanguage_TheId, "Language", KaxTagLanguage_Context);
+const EbmlCallbacks KaxTagLength::ClassInfos(KaxTagLength::Create, KaxTagLength_TheId, "Length", KaxTagLength_Context);
+const EbmlCallbacks KaxTagOriginalDimensions::ClassInfos(KaxTagOriginalDimensions::Create, KaxTagOriginalDimensions_TheId, "OriginalDimensions", KaxTagOriginalDimensions_Context);
+const EbmlCallbacks KaxTagPlaylistDelay::ClassInfos(KaxTagPlaylistDelay::Create, KaxTagPlaylistDelay_TheId, "PlaylistDelay", KaxTagPlaylistDelay_Context);
+const EbmlCallbacks KaxTagRating::ClassInfos(KaxTagRating::Create, KaxTagRating_TheId, "Rating", KaxTagRating_Context);
+const EbmlCallbacks KaxTagSubject::ClassInfos(KaxTagSubject::Create, KaxTagSubject_TheId, "Subject", KaxTagSubject_Context);
+const EbmlCallbacks KaxTagUnsynchronisedText::ClassInfos(KaxTagUnsynchronisedText::Create, KaxTagUnsynchronisedText_TheId, "UnsynchronisedText", KaxTagUnsynchronisedText_Context);
+const EbmlCallbacks KaxTagUserDefinedURL::ClassInfos(KaxTagUserDefinedURL::Create, KaxTagUserDefinedURL_TheId, "UserDefinedURL", KaxTagUserDefinedURL_Context);
+const EbmlCallbacks KaxTagTargetTypeValue::ClassInfos(KaxTagTargetTypeValue::Create, KaxTagTargetTypeValue_TheId, "TagTargetTypeValue", KaxTagTargetTypeValue_Context);
+const EbmlCallbacks KaxTagTargetType::ClassInfos(KaxTagTargetType::Create, KaxTagTargetType_TheId, "TagTargetType", KaxTagTargetType_Context);
+const EbmlCallbacks KaxTagTrackUID::ClassInfos(KaxTagTrackUID::Create, KaxTagTrackUID_TheId, "TagTrackUID", KaxTagTrackUID_Context);
+const EbmlCallbacks KaxTagEditionUID::ClassInfos(KaxTagEditionUID::Create, KaxTagEditionUID_TheId, "TagEditionUID", KaxTagEditionUID_Context);
+const EbmlCallbacks KaxTagChapterUID::ClassInfos(KaxTagChapterUID::Create, KaxTagChapterUID_TheId, "TagChapterUID", KaxTagChapterUID_Context);
+const EbmlCallbacks KaxTagAttachmentUID::ClassInfos(KaxTagAttachmentUID::Create, KaxTagAttachmentUID_TheId, "TagAttachmentUID", KaxTagAttachmentUID_Context);
+const EbmlCallbacks KaxTagAudioGenre::ClassInfos(KaxTagAudioGenre::Create, KaxTagAudioGenre_TheId, "AudioGenre", KaxTagAudioGenre_Context);
+const EbmlCallbacks KaxTagVideoGenre::ClassInfos(KaxTagVideoGenre::Create, KaxTagVideoGenre_TheId, "VideoGenre", KaxTagVideoGenre_Context);
+const EbmlCallbacks KaxTagSubGenre::ClassInfos(KaxTagSubGenre::Create, KaxTagSubGenre_TheId, "SubGenre", KaxTagSubGenre_Context);
+const EbmlCallbacks KaxTagAudioEncryption::ClassInfos(KaxTagAudioEncryption::Create, KaxTagAudioEncryption_TheId, "AudioEncryption", KaxTagAudioEncryption_Context);
+const EbmlCallbacks KaxTagAudioGain::ClassInfos(KaxTagAudioGain::Create, KaxTagAudioGain_TheId, "AudioGain", KaxTagAudioGain_Context);
+const EbmlCallbacks KaxTagAudioPeak::ClassInfos(KaxTagAudioPeak::Create, KaxTagAudioPeak_TheId, "AudioPeak", KaxTagAudioPeak_Context);
+const EbmlCallbacks KaxTagBPM::ClassInfos(KaxTagBPM::Create, KaxTagBPM_TheId, "BPM", KaxTagBPM_Context);
+const EbmlCallbacks KaxTagDiscTrack::ClassInfos(KaxTagDiscTrack::Create, KaxTagDiscTrack_TheId, "DiscTrack", KaxTagDiscTrack_Context);
+const EbmlCallbacks KaxTagSetPart::ClassInfos(KaxTagSetPart::Create, KaxTagSetPart_TheId, "SetPart", KaxTagSetPart_Context);
+const EbmlCallbacks KaxTagEqualisation::ClassInfos(KaxTagEqualisation::Create, KaxTagEqualisation_TheId, "Equalisation", KaxTagEqualisation_Context);
+const EbmlCallbacks KaxTagInitialKey::ClassInfos(KaxTagInitialKey::Create, KaxTagInitialKey_TheId, "InitialKey", KaxTagInitialKey_Context);
+const EbmlCallbacks KaxTagOfficialAudioFileURL::ClassInfos(KaxTagOfficialAudioFileURL::Create, KaxTagOfficialAudioFileURL_TheId, "OfficialAudioFileURL", KaxTagOfficialAudioFileURL_Context);
+const EbmlCallbacks KaxTagOfficialAudioSourceURL::ClassInfos(KaxTagOfficialAudioSourceURL::Create, KaxTagOfficialAudioSourceURL_TheId, "AudioSourceURL", KaxTagOfficialAudioSourceURL_Context);
+const EbmlCallbacks KaxTagArchivalLocation::ClassInfos(KaxTagArchivalLocation::Create, KaxTagArchivalLocation_TheId, "ArchivalLocation", KaxTagArchivalLocation_Context);
+const EbmlCallbacks KaxTagFile::ClassInfos(KaxTagFile::Create, KaxTagFile_TheId, "File", KaxTagFile_Context);
+const EbmlCallbacks KaxTagKeywords::ClassInfos(KaxTagKeywords::Create, KaxTagKeywords_TheId, "Keywords", KaxTagKeywords_Context);
+const EbmlCallbacks KaxTagMood::ClassInfos(KaxTagMood::Create, KaxTagMood_TheId, "Mood", KaxTagMood_Context);
+const EbmlCallbacks KaxTagRecordLocation::ClassInfos(KaxTagRecordLocation::Create, KaxTagRecordLocation_TheId, "RecordLocation", KaxTagRecordLocation_Context);
+const EbmlCallbacks KaxTagSource::ClassInfos(KaxTagSource::Create, KaxTagSource_TheId, "Source", KaxTagSource_Context);
+const EbmlCallbacks KaxTagSourceForm::ClassInfos(KaxTagSourceForm::Create, KaxTagSourceForm_TheId, "SourceForm", KaxTagSourceForm_Context);
+const EbmlCallbacks KaxTagProduct::ClassInfos(KaxTagProduct::Create, KaxTagProduct_TheId, "Product", KaxTagProduct_Context);
+const EbmlCallbacks KaxTagOriginalMediaType::ClassInfos(KaxTagOriginalMediaType::Create, KaxTagOriginalMediaType_TheId, "OriginalMediaType", KaxTagOriginalMediaType_Context);
+const EbmlCallbacks KaxTagPlayCounter::ClassInfos(KaxTagPlayCounter::Create, KaxTagPlayCounter_TheId, "PlayCounter", KaxTagPlayCounter_Context);
+const EbmlCallbacks KaxTagPopularimeter::ClassInfos(KaxTagPopularimeter::Create, KaxTagPopularimeter_TheId, "Popularimeter", KaxTagPopularimeter_Context);
+
+const EbmlCallbacks KaxTagSimple::ClassInfos(KaxTagSimple::Create, KaxTagSimple_TheId, "TagSimple", KaxTagSimple_Context);
+const EbmlCallbacks KaxTagName::ClassInfos(KaxTagName::Create, KaxTagName_TheId, "TagName", KaxTagName_Context);
+const EbmlCallbacks KaxTagLangue::ClassInfos(KaxTagLangue::Create, KaxTagLangue_TheId, "TagLanguage", KaxTagLangue_Context);
+const EbmlCallbacks KaxTagDefault::ClassInfos(KaxTagDefault::Create, KaxTagDefault_TheId, "TagDefault", KaxTagDefault_Context);
+const EbmlCallbacks KaxTagString::ClassInfos(KaxTagString::Create, KaxTagString_TheId, "TagString", KaxTagString_Context);
+const EbmlCallbacks KaxTagBinary::ClassInfos(KaxTagBinary::Create, KaxTagBinary_TheId, "TagBinary", KaxTagBinary_Context);
+
+KaxTag::KaxTag()
+       :EbmlMaster(KaxTag_Context)
+{}
+
+KaxTagTargets::KaxTagTargets()
+       :EbmlMaster(KaxTagTargets_Context)
+{}
+
+KaxTagGeneral::KaxTagGeneral()
+       :EbmlMaster(KaxTagGeneral_Context)
+{}
+
+KaxTagGenres::KaxTagGenres()
+       :EbmlMaster(KaxTagGenres_Context)
+{}
+
+KaxTagAudioSpecific::KaxTagAudioSpecific()
+       :EbmlMaster(KaxTagAudioSpecific_Context)
+{}
+
+KaxTagImageSpecific::KaxTagImageSpecific()
+       :EbmlMaster(KaxTagImageSpecific_Context)
+{}
+
+KaxTagSimple::KaxTagSimple()
+       :EbmlMaster(KaxTagSimple_Context)
+{}
+
+END_LIBMATROSKA_NAMESPACE
diff --git a/src/KaxTagMulti.cpp b/src/KaxTagMulti.cpp
new file mode 100644 (file)
index 0000000..42e1618
--- /dev/null
@@ -0,0 +1,404 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxTagMulti.cpp 640 2004-07-09 21:05:36Z mosu $
+       \author Jory Stone       <jcsston @ toughguy.net>
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#include "matroska/KaxTagMulti.h"
+#include "matroska/KaxContexts.h"
+
+using namespace LIBEBML_NAMESPACE;
+
+START_LIBMATROSKA_NAMESPACE
+
+EbmlSemantic KaxTagMultiGlobal_ContextList[1] =
+{
+       EbmlSemantic(false, false, KaxTagMultiComment::ClassInfos),
+};
+
+EbmlSemantic KaxTagMultiComment_ContextList[3] =
+{
+       EbmlSemantic(false, true, KaxTagMultiCommentName::ClassInfos),
+       EbmlSemantic(false, true, KaxTagMultiCommentComments::ClassInfos),
+       EbmlSemantic(false, true, KaxTagMultiCommentLanguage::ClassInfos),
+};
+
+EbmlSemantic KaxTagMultiCommercial_ContextList[1] =
+{
+       EbmlSemantic(true, false, KaxTagCommercial::ClassInfos),
+};
+
+EbmlSemantic KaxTagCommercial_ContextList[5] =
+{
+       EbmlSemantic(true,  true,  KaxTagMultiCommercialType::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagMultiCommercialAddress::ClassInfos),
+       EbmlSemantic(false, false, KaxTagMultiCommercialURL::ClassInfos),
+       EbmlSemantic(false, false, KaxTagMultiCommercialEmail::ClassInfos),
+       EbmlSemantic(false, false, KaxTagMultiPrice::ClassInfos),
+};
+
+EbmlSemantic KaxTagMultiPrice_ContextList[3] =
+{
+       EbmlSemantic(false, true, KaxTagMultiPriceCurrency::ClassInfos),
+       EbmlSemantic(false, true, KaxTagMultiPriceAmount::ClassInfos),
+       EbmlSemantic(false, true, KaxTagMultiPricePriceDate::ClassInfos),
+};
+
+EbmlSemantic KaxTagMultiDate_ContextList[1] =
+{
+       EbmlSemantic(true, false, KaxTagDate::ClassInfos),
+};
+
+EbmlSemantic KaxTagDate_ContextList[3] =
+{
+       EbmlSemantic(true,  true, KaxTagMultiDateType::ClassInfos),
+       EbmlSemantic(false, true, KaxTagMultiDateDateBegin::ClassInfos),
+       EbmlSemantic(false, true, KaxTagMultiDateDateEnd::ClassInfos),
+};
+
+EbmlSemantic KaxTagMultiEntity_ContextList[1] =
+{
+       EbmlSemantic(true, false, KaxTagEntity::ClassInfos),
+};
+
+EbmlSemantic KaxTagEntity_ContextList[5] =
+{
+       EbmlSemantic(true,  true,  KaxTagMultiEntityType::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagMultiEntityName::ClassInfos),
+       EbmlSemantic(false, false, KaxTagMultiEntityURL::ClassInfos),
+       EbmlSemantic(false, false, KaxTagMultiEntityEmail::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagMultiEntityAddress::ClassInfos),
+};
+
+EbmlSemantic KaxTagMultiIdentifier_ContextList[1] =
+{
+       EbmlSemantic(true, false, KaxTagIdentifier::ClassInfos),
+};
+
+EbmlSemantic KaxTagIdentifier_ContextList[3] =
+{
+       EbmlSemantic(true,  true, KaxTagMultiIdentifierType::ClassInfos),
+       EbmlSemantic(false, true, KaxTagMultiIdentifierBinary::ClassInfos),
+       EbmlSemantic(false, true, KaxTagMultiIdentifierString::ClassInfos),
+};
+
+EbmlSemantic KaxTagMultiLegal_ContextList[1] =
+{
+       EbmlSemantic(true, false, KaxTagLegal::ClassInfos),
+};
+
+EbmlSemantic KaxTagLegal_ContextList[4] =
+{
+       EbmlSemantic(true,  true,  KaxTagMultiLegalType::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagMultiLegalContent::ClassInfos),
+       EbmlSemantic(false, false, KaxTagMultiLegalURL::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagMultiLegalAddress::ClassInfos),
+};
+
+EbmlSemantic KaxTagMultiTitle_ContextList[1] =
+{
+       EbmlSemantic(true, false, KaxTagTitle::ClassInfos),
+};
+
+EbmlSemantic KaxTagTitle_ContextList[8] =
+{
+       EbmlSemantic(true,  true,  KaxTagMultiTitleType::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagMultiTitleName::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagMultiTitleSubTitle::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagMultiTitleEdition::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagMultiTitleAddress::ClassInfos),
+       EbmlSemantic(false, false, KaxTagMultiTitleURL::ClassInfos),
+       EbmlSemantic(false, false, KaxTagMultiTitleEmail::ClassInfos),
+       EbmlSemantic(false, true,  KaxTagMultiTitleLanguage::ClassInfos),
+};
+
+EbmlSemantic KaxTagMultiAttachment_ContextList[1] =
+{
+       EbmlSemantic(true, false, KaxTagAttachment::ClassInfos),
+};
+
+EbmlSemantic KaxTagAttachment_ContextList[1] =
+{
+       EbmlSemantic(false, true,  KaxTagAttachmentID::ClassInfos),
+};
+
+const EbmlSemanticContext KaxTagMultiGlobal_Context = EbmlSemanticContext(countof(KaxTagMultiGlobal_ContextList), KaxTagMultiGlobal_ContextList, NULL, *GetKaxGlobal_Context, NULL);
+
+const EbmlSemanticContext KaxTagMultiComment_Context = EbmlSemanticContext(countof(KaxTagMultiComment_ContextList), KaxTagMultiComment_ContextList, &KaxTag_Context, *GetKaxGlobal_Context, &KaxTagMultiComment::ClassInfos);
+const EbmlSemanticContext KaxTagMultiCommentName_Context = EbmlSemanticContext(0, NULL, &KaxTagMultiComment_Context, *GetKaxGlobal_Context, &KaxTagMultiCommentName::ClassInfos);
+const EbmlSemanticContext KaxTagMultiCommentComments_Context = EbmlSemanticContext(0, NULL, &KaxTagMultiComment_Context, *GetKaxGlobal_Context, &KaxTagMultiCommentComments::ClassInfos);
+const EbmlSemanticContext KaxTagMultiCommentLanguage_Context = EbmlSemanticContext(0, NULL, &KaxTagMultiComment_Context, *GetKaxGlobal_Context, &KaxTagMultiCommentLanguage::ClassInfos);
+
+const EbmlSemanticContext KaxTagMultiCommercial_Context = EbmlSemanticContext(countof(KaxTagMultiCommercial_ContextList), KaxTagMultiCommercial_ContextList, &KaxTag_Context, *GetKaxTagsGlobal_Context, &KaxTagMultiCommercial::ClassInfos);
+const EbmlSemanticContext KaxTagCommercial_Context = EbmlSemanticContext(countof(KaxTagCommercial_ContextList), KaxTagCommercial_ContextList, &KaxTagMultiCommercial_Context, *GetKaxTagsGlobal_Context, &KaxTagCommercial::ClassInfos);
+const EbmlSemanticContext KaxTagMultiCommercialType_Context = EbmlSemanticContext(0, NULL, &KaxTagCommercial_Context, *GetKaxGlobal_Context, &KaxTagMultiCommercialType::ClassInfos);
+const EbmlSemanticContext KaxTagMultiCommercialAddress_Context = EbmlSemanticContext(0, NULL, &KaxTagCommercial_Context, *GetKaxGlobal_Context, &KaxTagMultiCommercialAddress::ClassInfos);
+const EbmlSemanticContext KaxTagMultiCommercialURL_Context = EbmlSemanticContext(0, NULL, &KaxTagCommercial_Context, *GetKaxGlobal_Context, &KaxTagMultiCommercialURL::ClassInfos);
+const EbmlSemanticContext KaxTagMultiCommercialEmail_Context = EbmlSemanticContext(0, NULL, &KaxTagCommercial_Context, *GetKaxGlobal_Context, &KaxTagMultiCommercialEmail::ClassInfos);
+
+const EbmlSemanticContext KaxTagMultiPrice_Context = EbmlSemanticContext(countof(KaxTagMultiPrice_ContextList), KaxTagMultiPrice_ContextList, &KaxTagCommercial_Context, *GetKaxTagsGlobal_Context, &KaxTagMultiPrice::ClassInfos);
+const EbmlSemanticContext KaxTagMultiPriceCurrency_Context = EbmlSemanticContext(0, NULL, &KaxTagMultiPrice_Context, *GetKaxGlobal_Context, &KaxTagMultiPriceCurrency::ClassInfos);
+const EbmlSemanticContext KaxTagMultiPriceAmount_Context = EbmlSemanticContext(0, NULL, &KaxTagMultiPrice_Context, *GetKaxGlobal_Context, &KaxTagMultiPriceAmount::ClassInfos);
+const EbmlSemanticContext KaxTagMultiPricePriceDate_Context = EbmlSemanticContext(0, NULL, &KaxTagMultiPrice_Context, *GetKaxGlobal_Context, &KaxTagMultiPricePriceDate::ClassInfos);
+
+const EbmlSemanticContext KaxTagMultiDate_Context = EbmlSemanticContext(countof(KaxTagMultiDate_ContextList), KaxTagMultiDate_ContextList, &KaxTag_Context, *GetKaxTagsGlobal_Context, &KaxTagMultiDate::ClassInfos);
+const EbmlSemanticContext KaxTagDate_Context = EbmlSemanticContext(countof(KaxTagDate_ContextList), KaxTagDate_ContextList, &KaxTagMultiDate_Context, *GetKaxTagsGlobal_Context, &KaxTagDate::ClassInfos);
+const EbmlSemanticContext KaxTagMultiDateType_Context = EbmlSemanticContext(0, NULL, &KaxTagDate_Context, *GetKaxGlobal_Context, &KaxTagMultiDateType::ClassInfos);
+const EbmlSemanticContext KaxTagMultiDateDateBegin_Context = EbmlSemanticContext(0, NULL, &KaxTagDate_Context, *GetKaxGlobal_Context, &KaxTagMultiDateDateBegin::ClassInfos);
+const EbmlSemanticContext KaxTagMultiDateDateEnd_Context = EbmlSemanticContext(0, NULL, &KaxTagDate_Context, *GetKaxGlobal_Context, &KaxTagMultiDateDateEnd::ClassInfos);
+
+const EbmlSemanticContext KaxTagMultiEntity_Context = EbmlSemanticContext(countof(KaxTagMultiEntity_ContextList), KaxTagMultiEntity_ContextList, &KaxTag_Context, *GetKaxTagsGlobal_Context, &KaxTagMultiEntity::ClassInfos);
+const EbmlSemanticContext KaxTagEntity_Context = EbmlSemanticContext(countof(KaxTagEntity_ContextList), KaxTagEntity_ContextList, &KaxTagMultiEntity_Context, *GetKaxTagsGlobal_Context, &KaxTagEntity::ClassInfos);
+const EbmlSemanticContext KaxTagMultiEntityType_Context = EbmlSemanticContext(0, NULL, &KaxTagEntity_Context, *GetKaxGlobal_Context, &KaxTagMultiEntityType::ClassInfos);
+const EbmlSemanticContext KaxTagMultiEntityName_Context = EbmlSemanticContext(0, NULL, &KaxTagEntity_Context, *GetKaxGlobal_Context, &KaxTagMultiEntityName::ClassInfos);
+const EbmlSemanticContext KaxTagMultiEntityURL_Context = EbmlSemanticContext(0, NULL, &KaxTagEntity_Context, *GetKaxGlobal_Context, &KaxTagMultiEntityURL::ClassInfos);
+const EbmlSemanticContext KaxTagMultiEntityEmail_Context = EbmlSemanticContext(0, NULL, &KaxTagEntity_Context, *GetKaxGlobal_Context, &KaxTagMultiEntityEmail::ClassInfos);
+const EbmlSemanticContext KaxTagMultiEntityAddress_Context = EbmlSemanticContext(0, NULL, &KaxTagEntity_Context, *GetKaxGlobal_Context, &KaxTagMultiEntityAddress::ClassInfos);
+
+const EbmlSemanticContext KaxTagMultiIdentifier_Context = EbmlSemanticContext(countof(KaxTagMultiIdentifier_ContextList), KaxTagMultiIdentifier_ContextList, &KaxTag_Context, *GetKaxTagsGlobal_Context, &KaxTagMultiIdentifier::ClassInfos);
+const EbmlSemanticContext KaxTagIdentifier_Context = EbmlSemanticContext(countof(KaxTagIdentifier_ContextList), KaxTagIdentifier_ContextList, &KaxTagMultiIdentifier_Context, *GetKaxTagsGlobal_Context, &KaxTagIdentifier::ClassInfos);
+const EbmlSemanticContext KaxTagMultiIdentifierType_Context = EbmlSemanticContext(0, NULL, &KaxTagIdentifier_Context, *GetKaxGlobal_Context, &KaxTagMultiIdentifierType::ClassInfos);
+const EbmlSemanticContext KaxTagMultiIdentifierBinary_Context = EbmlSemanticContext(0, NULL, &KaxTagIdentifier_Context, *GetKaxGlobal_Context, &KaxTagMultiIdentifierBinary::ClassInfos);
+const EbmlSemanticContext KaxTagMultiIdentifierString_Context = EbmlSemanticContext(0, NULL, &KaxTagIdentifier_Context, *GetKaxGlobal_Context, &KaxTagMultiIdentifierString::ClassInfos);
+
+const EbmlSemanticContext KaxTagMultiLegal_Context = EbmlSemanticContext(countof(KaxTagMultiLegal_ContextList), KaxTagMultiLegal_ContextList, &KaxTag_Context, *GetKaxTagsGlobal_Context, &KaxTagMultiLegal::ClassInfos);
+const EbmlSemanticContext KaxTagLegal_Context = EbmlSemanticContext(countof(KaxTagLegal_ContextList), KaxTagLegal_ContextList, &KaxTagMultiLegal_Context, *GetKaxTagsGlobal_Context, &KaxTagLegal::ClassInfos);
+const EbmlSemanticContext KaxTagMultiLegalType_Context = EbmlSemanticContext(0, NULL, &KaxTagLegal_Context, *GetKaxGlobal_Context, &KaxTagMultiLegalType::ClassInfos);
+const EbmlSemanticContext KaxTagMultiLegalContent_Context = EbmlSemanticContext(0, NULL, &KaxTagLegal_Context, *GetKaxGlobal_Context, &KaxTagMultiLegalContent::ClassInfos);
+const EbmlSemanticContext KaxTagMultiLegalURL_Context = EbmlSemanticContext(0, NULL, &KaxTagLegal_Context, *GetKaxGlobal_Context, &KaxTagMultiLegalURL::ClassInfos);
+const EbmlSemanticContext KaxTagMultiLegalAddress_Context = EbmlSemanticContext(0, NULL, &KaxTagLegal_Context, *GetKaxGlobal_Context, &KaxTagMultiLegalAddress::ClassInfos);
+
+const EbmlSemanticContext KaxTagMultiTitle_Context = EbmlSemanticContext(countof(KaxTagMultiTitle_ContextList), KaxTagMultiTitle_ContextList, &KaxTag_Context, *GetKaxTagsGlobal_Context, &KaxTagMultiTitle::ClassInfos);
+const EbmlSemanticContext KaxTagTitle_Context = EbmlSemanticContext(countof(KaxTagTitle_ContextList), KaxTagTitle_ContextList, &KaxTagMultiTitle_Context, *GetKaxTagsGlobal_Context, &KaxTagTitle::ClassInfos);
+const EbmlSemanticContext KaxTagMultiTitleType_Context = EbmlSemanticContext(0, NULL, &KaxTagTitle_Context, *GetKaxGlobal_Context, &KaxTagMultiTitleType::ClassInfos);
+const EbmlSemanticContext KaxTagMultiTitleName_Context = EbmlSemanticContext(0, NULL, &KaxTagTitle_Context, *GetKaxGlobal_Context, &KaxTagMultiTitleName::ClassInfos);
+const EbmlSemanticContext KaxTagMultiTitleSubTitle_Context = EbmlSemanticContext(0, NULL, &KaxTagTitle_Context, *GetKaxGlobal_Context, &KaxTagMultiTitleSubTitle::ClassInfos);
+const EbmlSemanticContext KaxTagMultiTitleEdition_Context = EbmlSemanticContext(0, NULL, &KaxTagTitle_Context, *GetKaxGlobal_Context, &KaxTagMultiTitleEdition::ClassInfos);
+const EbmlSemanticContext KaxTagMultiTitleAddress_Context = EbmlSemanticContext(0, NULL, &KaxTagTitle_Context, *GetKaxGlobal_Context, &KaxTagMultiTitleAddress::ClassInfos);
+const EbmlSemanticContext KaxTagMultiTitleURL_Context = EbmlSemanticContext(0, NULL, &KaxTagTitle_Context, *GetKaxGlobal_Context, &KaxTagMultiTitleURL::ClassInfos);
+const EbmlSemanticContext KaxTagMultiTitleEmail_Context = EbmlSemanticContext(0, NULL, &KaxTagTitle_Context, *GetKaxGlobal_Context, &KaxTagMultiTitleEmail::ClassInfos);
+const EbmlSemanticContext KaxTagMultiTitleLanguage_Context = EbmlSemanticContext(0, NULL, &KaxTagTitle_Context, *GetKaxGlobal_Context, &KaxTagMultiTitleLanguage::ClassInfos);
+
+const EbmlSemanticContext KaxTagMultiAttachment_Context = EbmlSemanticContext(countof(KaxTagMultiAttachment_ContextList), KaxTagMultiAttachment_ContextList, &KaxTag_Context, *GetKaxTagsGlobal_Context, &KaxTagMultiAttachment::ClassInfos);
+const EbmlSemanticContext KaxTagAttachment_Context = EbmlSemanticContext(countof(KaxTagAttachment_ContextList), KaxTagAttachment_ContextList, &KaxTagMultiAttachment_Context, *GetKaxTagsGlobal_Context, &KaxTagAttachment::ClassInfos);
+const EbmlSemanticContext KaxTagAttachmentID_Context = EbmlSemanticContext(0, NULL, &KaxTagAttachment_Context, *GetKaxGlobal_Context, &KaxTagAttachmentID::ClassInfos);
+
+//The Muti Elements
+EbmlId KaxTagMultiComment_TheId             (0x5B7B, 2);
+EbmlId KaxTagMultiCommentName_TheId         (0x5F7D, 2);
+EbmlId KaxTagMultiCommentComments_TheId     (0x5F7C, 2);
+EbmlId KaxTagMultiCommentLanguage_TheId     (0x22B59D, 3);
+
+EbmlId KaxTagMultiCommercial_TheId          (0x4DC7, 2);
+EbmlId KaxTagCommercial_TheId               (0x4EC7, 2);
+EbmlId KaxTagMultiCommercialType_TheId      (0x5BD7, 2);
+EbmlId KaxTagMultiCommercialAddress_TheId   (0x5BBB, 2);
+EbmlId KaxTagMultiCommercialURL_TheId       (0x5BDA, 2);
+EbmlId KaxTagMultiCommercialEmail_TheId     (0x5BC0, 2);
+
+EbmlId KaxTagMultiPrice_TheId               (0x5BC3, 2);
+EbmlId KaxTagMultiPriceCurrency_TheId       (0x5B6C, 2);
+EbmlId KaxTagMultiPriceAmount_TheId         (0x5B6E, 2);
+EbmlId KaxTagMultiPricePriceDate_TheId      (0x5B6F, 2);
+
+EbmlId KaxTagMultiDate_TheId                (0x4DC8, 2);
+EbmlId KaxTagDate_TheId                     (0x4EC8, 2);
+EbmlId KaxTagMultiDateType_TheId            (0x5BD8, 2);
+EbmlId KaxTagMultiDateDateBegin_TheId       (0x4460, 2);
+EbmlId KaxTagMultiDateDateEnd_TheId         (0x4462, 2);
+
+EbmlId KaxTagMultiEntity_TheId              (0x4DC9, 2);
+EbmlId KaxTagEntity_TheId                   (0x4EC9, 2);
+EbmlId KaxTagMultiEntityType_TheId          (0x5BD9, 2);
+EbmlId KaxTagMultiEntityName_TheId          (0x5BED, 2);
+EbmlId KaxTagMultiEntityAddress_TheId       (0x5BDC, 2);
+EbmlId KaxTagMultiEntityURL_TheId           (0x5BDB, 2);
+EbmlId KaxTagMultiEntityEmail_TheId         (0x5BC1, 2);
+
+EbmlId KaxTagMultiIdentifier_TheId          (0x4DC6, 2);
+EbmlId KaxTagIdentifier_TheId               (0x4EC6, 2);
+EbmlId KaxTagMultiIdentifierType_TheId      (0x5BAD, 2);
+EbmlId KaxTagMultiIdentifierBinary_TheId    (0x6B67, 2);
+EbmlId KaxTagMultiIdentifierString_TheId    (0x6B68, 2);
+
+EbmlId KaxTagMultiLegal_TheId               (0x4DC5, 2);
+EbmlId KaxTagLegal_TheId                    (0x4EC5, 2);
+EbmlId KaxTagMultiLegalType_TheId           (0x5BBD, 2);
+EbmlId KaxTagMultiLegalContent_TheId        (0x5BB2, 2);
+EbmlId KaxTagMultiLegalURL_TheId            (0x5B34, 2);
+EbmlId KaxTagMultiLegalAddress_TheId        (0x5B9B, 2);
+
+EbmlId KaxTagMultiTitle_TheId               (0x4DC4, 2);
+EbmlId KaxTagTitle_TheId                    (0x4EC4, 2);
+EbmlId KaxTagMultiTitleType_TheId           (0x5B7D, 2);
+EbmlId KaxTagMultiTitleName_TheId           (0x5BB9, 2);
+EbmlId KaxTagMultiTitleSubTitle_TheId       (0x5B5B, 2);
+EbmlId KaxTagMultiTitleEdition_TheId        (0x5BAE, 2);
+EbmlId KaxTagMultiTitleAddress_TheId        (0x5B33, 2);
+EbmlId KaxTagMultiTitleURL_TheId            (0x5BA9, 2);
+EbmlId KaxTagMultiTitleEmail_TheId          (0x5BC9, 2);
+EbmlId KaxTagMultiTitleLanguage_TheId       (0x22B59E, 3);
+
+EbmlId KaxTagMultiAttachment_TheId          (0x4DC3, 2);
+EbmlId KaxTagAttachment_TheId               (0x4EC3, 2);
+EbmlId KaxTagAttachmentID_TheId             (0x5BA0, 2);
+
+const EbmlCallbacks KaxTagMultiComment::ClassInfos(KaxTagMultiComment::Create, KaxTagMultiComment_TheId, "MultiComment", KaxTagMultiComment_Context);
+const EbmlCallbacks KaxTagMultiCommentName::ClassInfos(KaxTagMultiCommentName::Create, KaxTagMultiCommentName_TheId, "MultiCommentName", KaxTagMultiCommentName_Context);
+const EbmlCallbacks KaxTagMultiCommentComments::ClassInfos(KaxTagMultiCommentComments::Create, KaxTagMultiCommentComments_TheId, "MultiCommentComments", KaxTagMultiCommentComments_Context);
+const EbmlCallbacks KaxTagMultiCommentLanguage::ClassInfos(KaxTagMultiCommentLanguage::Create, KaxTagMultiCommentLanguage_TheId, "MultiCommentLanguage", KaxTagMultiCommentLanguage_Context);
+
+const EbmlCallbacks KaxTagMultiCommercial::ClassInfos(KaxTagMultiCommercial::Create, KaxTagMultiCommercial_TheId, "MultiCommercial", KaxTagMultiCommercial_Context);
+const EbmlCallbacks KaxTagCommercial::ClassInfos(KaxTagCommercial::Create, KaxTagCommercial_TheId, "Commercial", KaxTagCommercial_Context);
+const EbmlCallbacks KaxTagMultiCommercialType::ClassInfos(KaxTagMultiCommercialType::Create, KaxTagMultiCommercialType_TheId, "MultiCommercialType", KaxTagMultiCommercialType_Context);
+const EbmlCallbacks KaxTagMultiCommercialAddress::ClassInfos(KaxTagMultiCommercialAddress::Create, KaxTagMultiCommercialAddress_TheId, "MultiCommercialAddress", KaxTagMultiCommercialAddress_Context);
+const EbmlCallbacks KaxTagMultiCommercialURL::ClassInfos(KaxTagMultiCommercialURL::Create, KaxTagMultiCommercialURL_TheId, "MultiCommercialURL", KaxTagMultiCommercialURL_Context);
+const EbmlCallbacks KaxTagMultiCommercialEmail::ClassInfos(KaxTagMultiCommercialEmail::Create, KaxTagMultiCommercialEmail_TheId, "MultiCommercialEmail", KaxTagMultiCommercialEmail_Context);
+
+const EbmlCallbacks KaxTagMultiPrice::ClassInfos(KaxTagMultiPrice::Create, KaxTagMultiPrice_TheId, "MultiPrice", KaxTagMultiPrice_Context);
+const EbmlCallbacks KaxTagMultiPriceCurrency::ClassInfos(KaxTagMultiPriceCurrency::Create, KaxTagMultiPriceCurrency_TheId, "MultiPriceCurrency", KaxTagMultiPriceCurrency_Context);
+const EbmlCallbacks KaxTagMultiPriceAmount::ClassInfos(KaxTagMultiPriceAmount::Create, KaxTagMultiPriceAmount_TheId, "MultiPriceAmount", KaxTagMultiPriceAmount_Context);
+const EbmlCallbacks KaxTagMultiPricePriceDate::ClassInfos(KaxTagMultiPricePriceDate::Create, KaxTagMultiPricePriceDate_TheId, "MultiPricePriceDate", KaxTagMultiPricePriceDate_Context);
+
+const EbmlCallbacks KaxTagMultiDate::ClassInfos(KaxTagMultiDate::Create, KaxTagMultiDate_TheId, "MultiDate", KaxTagMultiDate_Context);
+const EbmlCallbacks KaxTagDate::ClassInfos(KaxTagDate::Create, KaxTagDate_TheId, "Date", KaxTagDate_Context);
+const EbmlCallbacks KaxTagMultiDateType::ClassInfos(KaxTagMultiDateType::Create, KaxTagMultiDateType_TheId, "MultiDateType", KaxTagMultiDateType_Context);
+const EbmlCallbacks KaxTagMultiDateDateBegin::ClassInfos(KaxTagMultiDateDateBegin::Create, KaxTagMultiDateDateBegin_TheId, "MultiDateDateBegin", KaxTagMultiDateDateBegin_Context);
+const EbmlCallbacks KaxTagMultiDateDateEnd::ClassInfos(KaxTagMultiDateDateEnd::Create, KaxTagMultiDateDateEnd_TheId, "MultiDateDateEnd", KaxTagMultiDateDateEnd_Context);
+
+const EbmlCallbacks KaxTagMultiEntity::ClassInfos(KaxTagMultiEntity::Create, KaxTagMultiEntity_TheId, "MultiEntity", KaxTagMultiEntity_Context);
+const EbmlCallbacks KaxTagEntity::ClassInfos(KaxTagEntity::Create, KaxTagEntity_TheId, "Entity", KaxTagEntity_Context);
+const EbmlCallbacks KaxTagMultiEntityType::ClassInfos(KaxTagMultiEntityType::Create, KaxTagMultiEntityType_TheId, "MultiEntityType", KaxTagMultiEntityType_Context);
+const EbmlCallbacks KaxTagMultiEntityName::ClassInfos(KaxTagMultiEntityName::Create, KaxTagMultiEntityName_TheId, "MultiEntityName", KaxTagMultiEntityName_Context);
+const EbmlCallbacks KaxTagMultiEntityURL::ClassInfos(KaxTagMultiEntityURL::Create, KaxTagMultiEntityURL_TheId, "MultiEntityURL", KaxTagMultiEntityURL_Context);
+const EbmlCallbacks KaxTagMultiEntityEmail::ClassInfos(KaxTagMultiEntityEmail::Create, KaxTagMultiEntityEmail_TheId, "MultiEntityEmail", KaxTagMultiEntityEmail_Context);
+const EbmlCallbacks KaxTagMultiEntityAddress::ClassInfos(KaxTagMultiEntityAddress::Create, KaxTagMultiEntityAddress_TheId, "MultiEntityAddress", KaxTagMultiEntityAddress_Context);
+
+const EbmlCallbacks KaxTagMultiIdentifier::ClassInfos(KaxTagMultiIdentifier::Create, KaxTagMultiIdentifier_TheId, "MultiIdentifier", KaxTagMultiIdentifier_Context);
+const EbmlCallbacks KaxTagIdentifier::ClassInfos(KaxTagIdentifier::Create, KaxTagIdentifier_TheId, "Identifier", KaxTagIdentifier_Context);
+const EbmlCallbacks KaxTagMultiIdentifierType::ClassInfos(KaxTagMultiIdentifierType::Create, KaxTagMultiIdentifierType_TheId, "TagMultiIdentifierType", KaxTagMultiIdentifierType_Context);
+const EbmlCallbacks KaxTagMultiIdentifierBinary::ClassInfos(KaxTagMultiIdentifierBinary::Create, KaxTagMultiIdentifierBinary_TheId, "MultiIdentifierBinary", KaxTagMultiIdentifierBinary_Context);
+const EbmlCallbacks KaxTagMultiIdentifierString::ClassInfos(KaxTagMultiIdentifierString::Create, KaxTagMultiIdentifierString_TheId, "MultiIdentifierString", KaxTagMultiIdentifierString_Context);
+
+const EbmlCallbacks KaxTagMultiLegal::ClassInfos(KaxTagMultiLegal::Create, KaxTagMultiLegal_TheId, "MultiLegal", KaxTagMultiLegal_Context);
+const EbmlCallbacks KaxTagLegal::ClassInfos(KaxTagLegal::Create, KaxTagLegal_TheId, "Legal", KaxTagLegal_Context);
+const EbmlCallbacks KaxTagMultiLegalType::ClassInfos(KaxTagMultiLegalType::Create, KaxTagMultiLegalType_TheId, "KaxTagMultiLegalType", KaxTagMultiLegalType_Context);
+const EbmlCallbacks KaxTagMultiLegalContent::ClassInfos(KaxTagMultiLegalContent::Create, KaxTagMultiLegalContent_TheId, "TagMultiLegalContent", KaxTagMultiLegalContent_Context);
+const EbmlCallbacks KaxTagMultiLegalURL::ClassInfos(KaxTagMultiLegalURL::Create, KaxTagMultiLegalURL_TheId, "KaxTagMultiLegalURL", KaxTagMultiLegalURL_Context);
+const EbmlCallbacks KaxTagMultiLegalAddress::ClassInfos(KaxTagMultiLegalAddress::Create, KaxTagMultiLegalAddress_TheId, "KaxTagMultiLegalAddress", KaxTagMultiLegalAddress_Context);
+
+const EbmlCallbacks KaxTagMultiTitle::ClassInfos(KaxTagMultiTitle::Create, KaxTagMultiTitle_TheId, "MultiEntity", KaxTagMultiTitle_Context);
+const EbmlCallbacks KaxTagTitle::ClassInfos(KaxTagTitle::Create, KaxTagTitle_TheId, "Entity", KaxTagTitle_Context);
+const EbmlCallbacks KaxTagMultiTitleType::ClassInfos(KaxTagMultiTitleType::Create, KaxTagMultiTitleType_TheId, "MultiTitleType", KaxTagMultiTitleType_Context);
+const EbmlCallbacks KaxTagMultiTitleName::ClassInfos(KaxTagMultiTitleName::Create, KaxTagMultiTitleName_TheId, "MultiTitleName", KaxTagMultiTitleName_Context);
+const EbmlCallbacks KaxTagMultiTitleSubTitle::ClassInfos(KaxTagMultiTitleSubTitle::Create, KaxTagMultiTitleSubTitle_TheId, "MultiTitleSubTitle", KaxTagMultiTitleSubTitle_Context);
+const EbmlCallbacks KaxTagMultiTitleEdition::ClassInfos(KaxTagMultiTitleEdition::Create, KaxTagMultiTitleEdition_TheId, "MultiTitleEdition", KaxTagMultiTitleEdition_Context);
+const EbmlCallbacks KaxTagMultiTitleAddress::ClassInfos(KaxTagMultiTitleAddress::Create, KaxTagMultiTitleAddress_TheId, "MultiTitleAddress", KaxTagMultiTitleAddress_Context);
+const EbmlCallbacks KaxTagMultiTitleURL::ClassInfos(KaxTagMultiTitleURL::Create, KaxTagMultiTitleURL_TheId, "MultiTitleURL", KaxTagMultiTitleURL_Context);
+const EbmlCallbacks KaxTagMultiTitleEmail::ClassInfos(KaxTagMultiTitleEmail::Create, KaxTagMultiTitleEmail_TheId, "MultiTitleEmail", KaxTagMultiTitleEmail_Context);
+const EbmlCallbacks KaxTagMultiTitleLanguage::ClassInfos(KaxTagMultiTitleLanguage::Create, KaxTagMultiTitleLanguage_TheId, "MultiTitleLanguage", KaxTagMultiTitleLanguage_Context);
+
+const EbmlCallbacks KaxTagMultiAttachment::ClassInfos(KaxTagMultiAttachment::Create, KaxTagMultiAttachment_TheId, "TagMultiAttachment", KaxTagMultiAttachment_Context);
+const EbmlCallbacks KaxTagAttachment::ClassInfos(KaxTagAttachment::Create, KaxTagAttachment_TheId, "TagAttachment", KaxTagAttachment_Context);
+const EbmlCallbacks KaxTagAttachmentID::ClassInfos(KaxTagAttachmentID::Create, KaxTagAttachmentID_TheId, "TagAttachmentID", KaxTagAttachmentID_Context);
+
+KaxTagMultiComment::KaxTagMultiComment()
+       :EbmlMaster(KaxTagMultiComment_Context)
+{}
+
+
+KaxTagMultiCommercial::KaxTagMultiCommercial()
+       :EbmlMaster(KaxTagMultiCommercial_Context)
+{}
+
+KaxTagCommercial::KaxTagCommercial()
+       :EbmlMaster(KaxTagCommercial_Context)
+{}
+
+KaxTagMultiPrice::KaxTagMultiPrice()
+       :EbmlMaster(KaxTagMultiPrice_Context)
+{}
+
+KaxTagMultiDate::KaxTagMultiDate()
+       :EbmlMaster(KaxTagMultiDate_Context)
+{}
+
+KaxTagDate::KaxTagDate()
+       :EbmlMaster(KaxTagDate_Context)
+{}
+
+KaxTagMultiEntity::KaxTagMultiEntity()
+       :EbmlMaster(KaxTagMultiEntity_Context)
+{}
+       
+KaxTagEntity::KaxTagEntity()
+       :EbmlMaster(KaxTagEntity_Context)
+{}
+       
+KaxTagMultiLegal::KaxTagMultiLegal()
+       :EbmlMaster(KaxTagMultiLegal_Context)
+{}
+
+KaxTagLegal::KaxTagLegal()
+       :EbmlMaster(KaxTagLegal_Context)
+{}
+
+KaxTagMultiIdentifier::KaxTagMultiIdentifier()
+       :EbmlMaster(KaxTagMultiIdentifier_Context)
+{}
+
+KaxTagIdentifier::KaxTagIdentifier()
+       :EbmlMaster(KaxTagIdentifier_Context)
+{}
+
+KaxTagMultiTitle::KaxTagMultiTitle()
+       :EbmlMaster(KaxTagMultiTitle_Context)
+{}
+
+KaxTagTitle::KaxTagTitle()
+       :EbmlMaster(KaxTagTitle_Context)
+{}
+
+KaxTagMultiAttachment::KaxTagMultiAttachment()
+       :EbmlMaster(KaxTagMultiAttachment_Context)
+{}
+
+KaxTagAttachment::KaxTagAttachment()
+       :EbmlMaster(KaxTagAttachment_Context)
+{}
+
+const EbmlSemanticContext & GetKaxTagsGlobal_Context()
+{
+       return KaxTagMultiGlobal_Context;
+}
+
+END_LIBMATROSKA_NAMESPACE
diff --git a/src/KaxTags.cpp b/src/KaxTags.cpp
new file mode 100644 (file)
index 0000000..4b9b712
--- /dev/null
@@ -0,0 +1,60 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxTags.cpp 711 2004-08-10 12:58:47Z robux4 $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+       \author Jory Stone       <jcsston @ toughguy.net>
+*/
+#include "matroska/KaxTags.h"
+#include "matroska/KaxTag.h"
+#include "matroska/KaxContexts.h"
+
+using namespace LIBEBML_NAMESPACE;
+
+// sub elements
+START_LIBMATROSKA_NAMESPACE
+
+EbmlSemantic KaxTags_ContextList[1] =
+{
+       EbmlSemantic(true, false, KaxTag::ClassInfos),
+};
+
+const EbmlSemanticContext KaxTags_Context = EbmlSemanticContext(countof(KaxTags_ContextList), KaxTags_ContextList, &KaxSegment_Context, *GetKaxGlobal_Context, &KaxTags::ClassInfos);
+
+EbmlId KaxTags_TheId(0x1254C367, 4);
+
+const EbmlCallbacks KaxTags::ClassInfos(KaxTags::Create, KaxTags_TheId, "Tags", KaxTags_Context);
+
+KaxTags::KaxTags()
+       :EbmlMaster(KaxTags_Context)
+{}
+
+END_LIBMATROSKA_NAMESPACE
diff --git a/src/KaxTrackAudio.cpp b/src/KaxTrackAudio.cpp
new file mode 100644 (file)
index 0000000..7fc934d
--- /dev/null
@@ -0,0 +1,88 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxTrackAudio.cpp 640 2004-07-09 21:05:36Z mosu $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#include "matroska/KaxTrackAudio.h"
+
+// sub elements
+#include "matroska/KaxContexts.h"
+
+START_LIBMATROSKA_NAMESPACE
+
+#if MATROSKA_VERSION == 1
+const EbmlSemantic KaxTrackAudio_ContextList[4] =
+#else // MATROSKA_VERSION
+const EbmlSemantic KaxTrackAudio_ContextList[5] =
+#endif // MATROSKA_VERSION
+{
+       EbmlSemantic(true , true, KaxAudioSamplingFreq::ClassInfos),
+       EbmlSemantic(true , true, KaxAudioChannels::ClassInfos),
+       EbmlSemantic(false, true, KaxAudioBitDepth::ClassInfos),
+       EbmlSemantic(false, true, KaxAudioOutputSamplingFreq::ClassInfos),
+#if MATROSKA_VERSION >= 2
+       EbmlSemantic(false, true, KaxAudioPosition::ClassInfos),
+#endif // MATROSKA_VERSION
+};
+
+const EbmlSemanticContext KaxTrackAudio_Context = EbmlSemanticContext(countof(KaxTrackAudio_ContextList), KaxTrackAudio_ContextList, &KaxTrackEntry_Context, *GetKaxGlobal_Context, &KaxTrackAudio::ClassInfos);
+const EbmlSemanticContext KaxAudioSamplingFreq_Context = EbmlSemanticContext(0, NULL, &KaxTrackAudio_Context, *GetKaxGlobal_Context, &KaxAudioSamplingFreq::ClassInfos);
+const EbmlSemanticContext KaxAudioOutputSamplingFreq_Context = EbmlSemanticContext(0, NULL, &KaxTrackAudio_Context, *GetKaxGlobal_Context, &KaxAudioOutputSamplingFreq::ClassInfos);
+const EbmlSemanticContext KaxAudioChannels_Context = EbmlSemanticContext(0, NULL, &KaxTrackAudio_Context, *GetKaxGlobal_Context, &KaxAudioChannels::ClassInfos);
+const EbmlSemanticContext KaxAudioBitDepth_Context = EbmlSemanticContext(0, NULL, &KaxTrackAudio_Context, *GetKaxGlobal_Context, &KaxAudioBitDepth::ClassInfos);
+#if MATROSKA_VERSION >= 2
+const EbmlSemanticContext KaxAudioPosition_Context = EbmlSemanticContext(0, NULL, &KaxTrackAudio_Context, *GetKaxGlobal_Context, &KaxAudioPosition::ClassInfos);
+#endif // MATROSKA_VERSION
+
+EbmlId KaxTrackAudio_TheId       (0xE1, 1);
+EbmlId KaxAudioSamplingFreq_TheId(0xB5, 1);
+EbmlId KaxAudioOutputSamplingFreq_TheId(0x78B5, 2);
+EbmlId KaxAudioChannels_TheId    (0x9F, 1);
+EbmlId KaxAudioBitDepth_TheId    (0x6264, 2);
+#if MATROSKA_VERSION >= 2
+EbmlId KaxAudioPosition_TheId    (0x7D7B, 2);
+#endif // MATROSKA_VERSION
+
+const EbmlCallbacks KaxTrackAudio::ClassInfos(KaxTrackAudio::Create, KaxTrackAudio_TheId, "TrackAudio", KaxTrackAudio_Context);
+const EbmlCallbacks KaxAudioSamplingFreq::ClassInfos(KaxAudioSamplingFreq::Create, KaxAudioSamplingFreq_TheId, "AudioSamplingFreq", KaxAudioSamplingFreq_Context);
+const EbmlCallbacks KaxAudioOutputSamplingFreq::ClassInfos(KaxAudioOutputSamplingFreq::Create, KaxAudioOutputSamplingFreq_TheId, "AudioOutputSamplingFreq", KaxAudioOutputSamplingFreq_Context);
+const EbmlCallbacks KaxAudioChannels::ClassInfos(KaxAudioChannels::Create, KaxAudioChannels_TheId, "AudioChannels", KaxAudioChannels_Context);
+const EbmlCallbacks KaxAudioBitDepth::ClassInfos(KaxAudioBitDepth::Create, KaxAudioBitDepth_TheId, "AudioBitDepth", KaxAudioBitDepth_Context);
+#if MATROSKA_VERSION >= 2
+const EbmlCallbacks KaxAudioPosition::ClassInfos(KaxAudioPosition::Create, KaxAudioPosition_TheId, "AudioPosition", KaxAudioPosition_Context);
+#endif // MATROSKA_VERSION
+
+KaxTrackAudio::KaxTrackAudio()
+       :EbmlMaster(KaxTrackAudio_Context)
+{}
+
+END_LIBMATROSKA_NAMESPACE
diff --git a/src/KaxTrackEntryData.cpp b/src/KaxTrackEntryData.cpp
new file mode 100644 (file)
index 0000000..a26cfd9
--- /dev/null
@@ -0,0 +1,142 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxTrackEntryData.cpp 1201 2005-08-30 14:28:27Z robux4 $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+       \author John Cannon      <spyder2555 @ users.sf.net>
+*/
+#include "matroska/KaxTrackEntryData.h"
+#include "matroska/KaxContexts.h"
+
+START_LIBMATROSKA_NAMESPACE
+
+const EbmlSemantic KaxTrackTranslate_ContextList[3] =
+{
+       EbmlSemantic(false, false,KaxTrackTranslateEditionUID::ClassInfos),
+       EbmlSemantic(true , true, KaxTrackTranslateCodec::ClassInfos),
+       EbmlSemantic(true , true, KaxTrackTranslateTrackID::ClassInfos),
+};
+
+EbmlId KaxTrackNumber_TheId            (0xD7, 1);
+EbmlId KaxTrackUID_TheId               (0x73C5, 2);
+EbmlId KaxTrackType_TheId              (0x83, 1);
+EbmlId KaxTrackFlagDefault_TheId       (0x88, 1);
+EbmlId KaxTrackFlagForced_TheId        (0x55AA, 2);
+EbmlId KaxTrackFlagLacing_TheId        (0x9C, 1);
+EbmlId KaxTrackMinCache_TheId          (0x6DE7, 2);
+EbmlId KaxTrackMaxCache_TheId          (0x6DF8, 2);
+EbmlId KaxTrackDefaultDuration_TheId   (0x23E383, 3);
+EbmlId KaxTrackTimecodeScale_TheId     (0x23314F, 3);
+EbmlId KaxMaxBlockAdditionID_TheId     (0x55EE, 2);
+EbmlId KaxTrackName_TheId              (0x536E, 2);
+EbmlId KaxTrackLanguage_TheId          (0x22B59C, 3);
+EbmlId KaxCodecID_TheId                (0x86, 1);
+EbmlId KaxCodecPrivate_TheId           (0x63A2, 2);
+EbmlId KaxCodecName_TheId              (0x258688, 3);
+EbmlId KaxTrackAttachmentLink_TheId    (0x7446, 2);
+EbmlId KaxTrackOverlay_TheId           (0x6FAB, 2);
+EbmlId KaxTrackTranslate_TheId         (0x6624, 2);
+EbmlId KaxTrackTranslateEditionUID_TheId(0x66FC, 2);
+EbmlId KaxTrackTranslateCodec_TheId    (0x66BF, 2);
+EbmlId KaxTrackTranslateTrackID_TheId  (0x66A5, 2);
+#if MATROSKA_VERSION >= 2
+EbmlId KaxTrackFlagEnabled_TheId       (0xB9, 1);
+EbmlId KaxCodecSettings_TheId          (0x3A9697, 3);
+EbmlId KaxCodecInfoURL_TheId           (0x3B4040, 3);
+EbmlId KaxCodecDownloadURL_TheId       (0x26B240, 3);
+EbmlId KaxCodecDecodeAll_TheId         (0xAA, 1);
+#endif // MATROSKA_VERSION
+
+const EbmlSemanticContext KaxTrackNumber_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &KaxTrackNumber::ClassInfos);
+const EbmlSemanticContext KaxTrackUID_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &KaxTrackUID::ClassInfos);
+const EbmlSemanticContext KaxTrackType_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &KaxTrackType::ClassInfos);
+const EbmlSemanticContext KaxTrackFlagDefault_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &KaxTrackFlagDefault::ClassInfos);
+const EbmlSemanticContext KaxTrackFlagForced_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &KaxTrackFlagForced::ClassInfos);
+const EbmlSemanticContext KaxTrackFlagLacing_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &KaxTrackFlagLacing::ClassInfos);
+const EbmlSemanticContext KaxTrackMinCache_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &KaxTrackMinCache::ClassInfos);
+const EbmlSemanticContext KaxTrackMaxCache_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &KaxTrackMaxCache::ClassInfos);
+const EbmlSemanticContext KaxTrackDefaultDuration_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &KaxTrackDefaultDuration::ClassInfos);
+const EbmlSemanticContext KaxTrackTimecodeScale_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &KaxTrackTimecodeScale::ClassInfos);
+const EbmlSemanticContext KaxMaxBlockAdditionID_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &KaxMaxBlockAdditionID::ClassInfos);
+const EbmlSemanticContext KaxTrackName_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &KaxTrackName::ClassInfos);
+const EbmlSemanticContext KaxTrackLanguage_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &KaxTrackLanguage::ClassInfos);
+const EbmlSemanticContext KaxCodecID_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &KaxCodecID::ClassInfos);
+const EbmlSemanticContext KaxCodecPrivate_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &KaxCodecPrivate::ClassInfos);
+const EbmlSemanticContext KaxCodecName_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &KaxCodecName::ClassInfos);
+const EbmlSemanticContext KaxTrackAttachmentLink_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &KaxTrackAttachmentLink::ClassInfos);
+const EbmlSemanticContext KaxTrackOverlay_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &KaxTrackOverlay::ClassInfos);
+const EbmlSemanticContext KaxTrackTranslate_Context = EbmlSemanticContext(countof(KaxTrackTranslate_ContextList), KaxTrackTranslate_ContextList, &KaxTracks_Context, *GetKaxGlobal_Context, &KaxTrackTranslate::ClassInfos);
+const EbmlSemanticContext KaxTrackTranslateEditionUID_Context = EbmlSemanticContext(0, NULL, &KaxTrackTranslate_Context, *GetKaxGlobal_Context, &KaxTrackTranslateEditionUID::ClassInfos);
+const EbmlSemanticContext KaxTrackTranslateCodec_Context = EbmlSemanticContext(0, NULL, &KaxTrackTranslate_Context, *GetKaxGlobal_Context, &KaxTrackTranslateCodec::ClassInfos);
+const EbmlSemanticContext KaxTrackTranslateTrackID_Context = EbmlSemanticContext(0, NULL, &KaxTrackTranslate_Context, *GetKaxGlobal_Context, &KaxTrackTranslateTrackID::ClassInfos);
+#if MATROSKA_VERSION >= 2
+const EbmlSemanticContext KaxTrackFlagEnabled_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &KaxTrackFlagEnabled::ClassInfos);
+const EbmlSemanticContext KaxCodecSettings_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &KaxCodecSettings::ClassInfos);
+const EbmlSemanticContext KaxCodecInfoURL_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &KaxCodecInfoURL::ClassInfos);
+const EbmlSemanticContext KaxCodecDownloadURL_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &KaxCodecDownloadURL::ClassInfos);
+const EbmlSemanticContext KaxCodecDecodeAll_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &KaxCodecDecodeAll::ClassInfos);
+#endif // MATROSKA_VERSION
+
+const EbmlCallbacks KaxTrackNumber::ClassInfos(KaxTrackNumber::Create, KaxTrackNumber_TheId, "TrackNumber", KaxTrackNumber_Context);
+const EbmlCallbacks KaxTrackUID::ClassInfos(KaxTrackUID::Create, KaxTrackUID_TheId, "TrackUID", KaxTrackUID_Context);
+const EbmlCallbacks KaxTrackType::ClassInfos(KaxTrackType::Create, KaxTrackType_TheId, "TrackType", KaxTrackType_Context);
+const EbmlCallbacks KaxTrackFlagDefault::ClassInfos(KaxTrackFlagDefault::Create, KaxTrackFlagDefault_TheId, "TrackFlagDefault", KaxTrackFlagDefault_Context);
+const EbmlCallbacks KaxTrackFlagForced::ClassInfos(KaxTrackFlagForced::Create, KaxTrackFlagForced_TheId, "TrackFlagForced", KaxTrackFlagForced_Context);
+const EbmlCallbacks KaxTrackFlagLacing::ClassInfos(KaxTrackFlagLacing::Create, KaxTrackFlagLacing_TheId, "TrackFlagLacing", KaxTrackFlagLacing_Context);
+const EbmlCallbacks KaxTrackMinCache::ClassInfos(KaxTrackMinCache::Create, KaxTrackMinCache_TheId, "TrackMinCache", KaxTrackMinCache_Context);
+const EbmlCallbacks KaxTrackMaxCache::ClassInfos(KaxTrackMaxCache::Create, KaxTrackMaxCache_TheId, "TrackMaxCache\0rotomodobopo", KaxTrackMaxCache_Context);
+const EbmlCallbacks KaxTrackDefaultDuration::ClassInfos(KaxTrackDefaultDuration::Create, KaxTrackDefaultDuration_TheId, "TrackDefaultDuration", KaxTrackDefaultDuration_Context);
+const EbmlCallbacks KaxTrackTimecodeScale::ClassInfos(KaxTrackTimecodeScale::Create, KaxTrackTimecodeScale_TheId, "TrackTimecodeScale", KaxTrackTimecodeScale_Context);
+const EbmlCallbacks KaxMaxBlockAdditionID::ClassInfos(KaxMaxBlockAdditionID::Create, KaxMaxBlockAdditionID_TheId, "MaxBlockAdditionID", KaxMaxBlockAdditionID_Context);
+const EbmlCallbacks KaxTrackName::ClassInfos(KaxTrackName::Create, KaxTrackName_TheId, "TrackName", KaxTrackName_Context);
+const EbmlCallbacks KaxTrackLanguage::ClassInfos(KaxTrackLanguage::Create, KaxTrackLanguage_TheId, "TrackLanguage", KaxTrackLanguage_Context);
+const EbmlCallbacks KaxCodecID::ClassInfos(KaxCodecID::Create, KaxCodecID_TheId, "CodecID", KaxCodecID_Context);
+const EbmlCallbacks KaxCodecPrivate::ClassInfos(KaxCodecPrivate::Create, KaxCodecPrivate_TheId, "CodecPrivate", KaxCodecPrivate_Context);
+const EbmlCallbacks KaxCodecName::ClassInfos(KaxCodecName::Create, KaxCodecName_TheId, "CodecName", KaxCodecName_Context);
+const EbmlCallbacks KaxTrackAttachmentLink::ClassInfos(KaxTrackAttachmentLink::Create, KaxTrackAttachmentLink_TheId, "TrackAttachmentLink", KaxTrackAttachmentLink_Context);
+const EbmlCallbacks KaxTrackOverlay::ClassInfos(KaxTrackOverlay::Create, KaxTrackOverlay_TheId, "TrackOverlay", KaxTrackOverlay_Context);
+const EbmlCallbacks KaxTrackTranslate::ClassInfos(KaxTrackTranslate::Create, KaxTrackTranslate_TheId, "TrackTranslate", KaxTrackTranslate_Context);
+const EbmlCallbacks KaxTrackTranslateEditionUID::ClassInfos(KaxTrackTranslateEditionUID::Create, KaxTrackTranslateEditionUID_TheId, "TrackTranslateEditionUID", KaxTrackTranslateEditionUID_Context);
+const EbmlCallbacks KaxTrackTranslateCodec::ClassInfos(KaxTrackTranslateCodec::Create, KaxTrackTranslateCodec_TheId, "TrackTranslateCodec", KaxTrackTranslateCodec_Context);
+const EbmlCallbacks KaxTrackTranslateTrackID::ClassInfos(KaxTrackTranslateTrackID::Create, KaxTrackTranslateTrackID_TheId, "TrackTranslateTrackID", KaxTrackTranslateTrackID_Context);
+#if MATROSKA_VERSION >= 2
+const EbmlCallbacks KaxTrackFlagEnabled::ClassInfos(KaxTrackFlagEnabled::Create, KaxTrackFlagEnabled_TheId, "TrackFlagEnabled", KaxTrackFlagEnabled_Context);
+const EbmlCallbacks KaxCodecSettings::ClassInfos(KaxCodecSettings::Create, KaxCodecSettings_TheId, "CodecSettings", KaxCodecSettings_Context);
+const EbmlCallbacks KaxCodecInfoURL::ClassInfos(KaxCodecInfoURL::Create, KaxCodecInfoURL_TheId, "CodecInfoURL", KaxCodecInfoURL_Context);
+const EbmlCallbacks KaxCodecDownloadURL::ClassInfos(KaxCodecDownloadURL::Create, KaxCodecDownloadURL_TheId, "CodecDownloadURL", KaxCodecDownloadURL_Context);
+const EbmlCallbacks KaxCodecDecodeAll::ClassInfos(KaxCodecDecodeAll::Create, KaxCodecDecodeAll_TheId, "CodecDecodeAll", KaxCodecDecodeAll_Context);
+#endif // MATROSKA_VERSION
+
+KaxTrackTranslate::KaxTrackTranslate()
+       :EbmlMaster(KaxTrackTranslate_Context)
+{}
+
+END_LIBMATROSKA_NAMESPACE
diff --git a/src/KaxTrackVideo.cpp b/src/KaxTrackVideo.cpp
new file mode 100644 (file)
index 0000000..64726d8
--- /dev/null
@@ -0,0 +1,134 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxTrackVideo.cpp 738 2004-08-30 09:21:46Z robux4 $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#include "matroska/KaxTrackVideo.h"
+
+// sub elements
+#include "matroska/KaxContexts.h"
+
+START_LIBMATROSKA_NAMESPACE
+
+#if MATROSKA_VERSION == 1
+const EbmlSemantic KaxTrackVideo_ContextList[10] =
+#else // MATROSKA_VERSION
+const EbmlSemantic KaxTrackVideo_ContextList[15] =
+#endif // MATROSKA_VERSION
+{
+       EbmlSemantic(true , true, KaxVideoPixelWidth::ClassInfos),
+       EbmlSemantic(true , true, KaxVideoPixelHeight::ClassInfos),
+       EbmlSemantic(false, true, KaxVideoPixelCropBottom::ClassInfos),
+       EbmlSemantic(false, true, KaxVideoPixelCropTop::ClassInfos),
+       EbmlSemantic(false, true, KaxVideoPixelCropLeft::ClassInfos),
+       EbmlSemantic(false, true, KaxVideoPixelCropRight::ClassInfos),
+       EbmlSemantic(false, true, KaxVideoDisplayWidth::ClassInfos),
+       EbmlSemantic(false, true, KaxVideoDisplayHeight::ClassInfos),
+       EbmlSemantic(false, true, KaxVideoColourSpace::ClassInfos),
+       EbmlSemantic(false, true, KaxVideoFrameRate::ClassInfos),
+#if MATROSKA_VERSION >= 2
+       EbmlSemantic(true , true, KaxVideoFlagInterlaced::ClassInfos),
+       EbmlSemantic(false, true, KaxVideoStereoMode::ClassInfos),
+       EbmlSemantic(false, true, KaxVideoDisplayUnit::ClassInfos),
+       EbmlSemantic(false, true, KaxVideoAspectRatio::ClassInfos),
+       EbmlSemantic(false, true, KaxVideoGamma::ClassInfos),
+#endif // MATROSKA_VERSION
+};
+
+const EbmlSemanticContext KaxTrackVideo_Context = EbmlSemanticContext(countof(KaxTrackVideo_ContextList), KaxTrackVideo_ContextList, &KaxTrackEntry_Context, *GetKaxGlobal_Context, &KaxTrackVideo::ClassInfos);
+const EbmlSemanticContext KaxVideoPixelWidth_Context = EbmlSemanticContext(0, NULL, &KaxTrackVideo_Context, *GetKaxGlobal_Context, &KaxVideoPixelWidth::ClassInfos);
+const EbmlSemanticContext KaxVideoPixelHeight_Context = EbmlSemanticContext(0, NULL, &KaxTrackVideo_Context, *GetKaxGlobal_Context, &KaxVideoPixelHeight::ClassInfos);
+const EbmlSemanticContext KaxVideoPixelCropBottom_Context = EbmlSemanticContext(0, NULL, &KaxTrackVideo_Context, *GetKaxGlobal_Context, &KaxVideoPixelCropBottom::ClassInfos);
+const EbmlSemanticContext KaxVideoPixelCropTop_Context = EbmlSemanticContext(0, NULL, &KaxTrackVideo_Context, *GetKaxGlobal_Context, &KaxVideoPixelCropTop::ClassInfos);
+const EbmlSemanticContext KaxVideoPixelCropRight_Context = EbmlSemanticContext(0, NULL, &KaxTrackVideo_Context, *GetKaxGlobal_Context, &KaxVideoPixelCropLeft::ClassInfos);
+const EbmlSemanticContext KaxVideoPixelCropLeft_Context = EbmlSemanticContext(0, NULL, &KaxTrackVideo_Context, *GetKaxGlobal_Context, &KaxVideoPixelCropRight::ClassInfos);
+const EbmlSemanticContext KaxVideoDisplayWidth_Context = EbmlSemanticContext(0, NULL, &KaxTrackVideo_Context, *GetKaxGlobal_Context, &KaxVideoDisplayWidth::ClassInfos);
+const EbmlSemanticContext KaxVideoDisplayHeight_Context = EbmlSemanticContext(0, NULL, &KaxTrackVideo_Context, *GetKaxGlobal_Context, &KaxVideoDisplayHeight::ClassInfos);
+const EbmlSemanticContext KaxVideoColourSpace_Context = EbmlSemanticContext(0, NULL, &KaxTrackVideo_Context, *GetKaxGlobal_Context, &KaxVideoColourSpace::ClassInfos);
+const EbmlSemanticContext KaxVideoFrameRate_Context = EbmlSemanticContext(0, NULL, &KaxTrackVideo_Context, *GetKaxGlobal_Context, &KaxVideoFrameRate::ClassInfos);
+#if MATROSKA_VERSION >= 2
+const EbmlSemanticContext KaxVideoFlagInterlaced_Context = EbmlSemanticContext(0, NULL, &KaxTrackVideo_Context, *GetKaxGlobal_Context, &KaxVideoFlagInterlaced::ClassInfos);
+const EbmlSemanticContext KaxVideoStereoMode_Context = EbmlSemanticContext(0, NULL, &KaxTrackVideo_Context, *GetKaxGlobal_Context, &KaxVideoStereoMode::ClassInfos);
+const EbmlSemanticContext KaxVideoDisplayUnit_Context = EbmlSemanticContext(0, NULL, &KaxTrackVideo_Context, *GetKaxGlobal_Context, &KaxVideoDisplayUnit::ClassInfos);
+const EbmlSemanticContext KaxVideoAspectRatio_Context = EbmlSemanticContext(0, NULL, &KaxTrackVideo_Context, *GetKaxGlobal_Context, &KaxVideoAspectRatio::ClassInfos);
+const EbmlSemanticContext KaxVideoGamma_Context = EbmlSemanticContext(0, NULL, &KaxTrackVideo_Context, *GetKaxGlobal_Context, &KaxVideoGamma::ClassInfos);
+#endif // MATROSKA_VERSION
+
+EbmlId KaxTrackVideo_TheId          (0xE0, 1);
+EbmlId KaxVideoPixelWidth_TheId     (0xB0, 1);
+EbmlId KaxVideoPixelHeight_TheId    (0xBA, 1);
+EbmlId KaxVideoPixelCropBottom_TheId(0x54AA, 2);
+EbmlId KaxVideoPixelCropTop_TheId   (0x54BB, 2);
+EbmlId KaxVideoPixelCropLeft_TheId  (0x54CC, 2);
+EbmlId KaxVideoPixelCropRight_TheId (0x54DD, 2);
+EbmlId KaxVideoDisplayWidth_TheId   (0x54B0, 2);
+EbmlId KaxVideoDisplayHeight_TheId  (0x54BA, 2);
+EbmlId KaxVideoColourSpace_TheId    (0x2EB524, 3);
+EbmlId KaxVideoFrameRate_TheId      (0x2383E3, 3);
+#if MATROSKA_VERSION >= 2
+EbmlId KaxVideoFlagInterlaced_TheId (0x9A, 1);
+EbmlId KaxVideoStereoMode_TheId     (0x53B9, 2);
+EbmlId KaxVideoDisplayUnit_TheId    (0x54B2, 2);
+EbmlId KaxVideoAspectRatio_TheId    (0x54B3, 1);
+EbmlId KaxVideoGamma_TheId          (0x2FB523, 3);
+#endif // MATROSKA_VERSION
+
+const EbmlCallbacks KaxTrackVideo::ClassInfos(KaxTrackVideo::Create, KaxTrackVideo_TheId, "TrackAudio", KaxTrackVideo_Context);
+const EbmlCallbacks KaxVideoPixelWidth::ClassInfos(KaxVideoPixelWidth::Create, KaxVideoPixelWidth_TheId, "VideoPixelWidth", KaxVideoPixelWidth_Context);
+const EbmlCallbacks KaxVideoPixelHeight::ClassInfos(KaxVideoPixelHeight::Create, KaxVideoPixelHeight_TheId, "VideoPixelHeight", KaxVideoPixelHeight_Context);
+const EbmlCallbacks KaxVideoPixelCropBottom::ClassInfos(KaxVideoPixelCropBottom::Create, KaxVideoPixelCropBottom_TheId, "VideoPixelCropBottom", KaxVideoPixelCropBottom_Context);
+const EbmlCallbacks KaxVideoPixelCropTop::ClassInfos(KaxVideoPixelCropTop::Create, KaxVideoPixelCropTop_TheId, "VideoPixelCropTop", KaxVideoPixelCropTop_Context);
+const EbmlCallbacks KaxVideoPixelCropLeft::ClassInfos(KaxVideoPixelCropLeft::Create, KaxVideoPixelCropLeft_TheId, "VideoPixelCropLeft", KaxVideoPixelCropLeft_Context);
+const EbmlCallbacks KaxVideoPixelCropRight::ClassInfos(KaxVideoPixelCropRight::Create, KaxVideoPixelCropRight_TheId, "VideoPixelCropRight", KaxVideoPixelCropRight_Context);
+const EbmlCallbacks KaxVideoDisplayWidth::ClassInfos(KaxVideoDisplayWidth::Create, KaxVideoDisplayWidth_TheId, "VideoDisplayWidth", KaxVideoDisplayWidth_Context);
+const EbmlCallbacks KaxVideoDisplayHeight::ClassInfos(KaxVideoDisplayHeight::Create, KaxVideoDisplayHeight_TheId, "VideoDisplayHeight", KaxVideoDisplayHeight_Context);
+const EbmlCallbacks KaxVideoColourSpace::ClassInfos(KaxVideoColourSpace::Create, KaxVideoColourSpace_TheId, "VideoColourSpace", KaxVideoColourSpace_Context);
+const EbmlCallbacks KaxVideoFrameRate::ClassInfos(KaxVideoFrameRate::Create, KaxVideoFrameRate_TheId, "VideoFrameRate", KaxVideoFrameRate_Context);
+#if MATROSKA_VERSION >= 2
+const EbmlCallbacks KaxVideoFlagInterlaced::ClassInfos(KaxVideoFlagInterlaced::Create, KaxVideoFlagInterlaced_TheId, "VideoFlagInterlaced", KaxVideoFlagInterlaced_Context);
+const EbmlCallbacks KaxVideoStereoMode::ClassInfos(KaxVideoStereoMode::Create, KaxVideoStereoMode_TheId, "VideoStereoMode", KaxVideoStereoMode_Context);
+const EbmlCallbacks KaxVideoDisplayUnit::ClassInfos(KaxVideoDisplayUnit::Create, KaxVideoDisplayUnit_TheId, "VideoDisplayUnit", KaxVideoDisplayUnit_Context);
+const EbmlCallbacks KaxVideoAspectRatio::ClassInfos(KaxVideoAspectRatio::Create, KaxVideoAspectRatio_TheId, "VideoAspectRatio", KaxVideoAspectRatio_Context);
+const EbmlCallbacks KaxVideoGamma::ClassInfos(KaxVideoGamma::Create, KaxVideoGamma_TheId, "VideoGamma", KaxVideoGamma_Context);
+#endif // MATROSKA_VERSION
+
+KaxTrackVideo::KaxTrackVideo()
+       :EbmlMaster(KaxTrackVideo_Context)
+{}
+
+uint32 KaxVideoFrameRate::RenderData(IOCallback & output, bool bForceRender, bool bSaveDefault)
+{
+       assert(false); // no you are not allowed to use this element !
+       return 0;
+}
+
+END_LIBMATROSKA_NAMESPACE
diff --git a/src/KaxTracks.cpp b/src/KaxTracks.cpp
new file mode 100644 (file)
index 0000000..4fc79fa
--- /dev/null
@@ -0,0 +1,114 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2005 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxTracks.cpp 1202 2005-08-30 14:39:01Z robux4 $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+#include "matroska/KaxTracks.h"
+
+// sub elements
+#include "matroska/KaxTrackEntryData.h"
+#include "matroska/KaxTrackAudio.h"
+#include "matroska/KaxTrackVideo.h"
+#include "matroska/KaxContentEncoding.h"
+#include "matroska/KaxContexts.h"
+
+START_LIBMATROSKA_NAMESPACE
+
+const EbmlSemantic KaxTracks_ContextList[1] =
+{
+       EbmlSemantic(true, false, KaxTrackEntry::ClassInfos),
+};
+
+#if MATROSKA_VERSION == 1
+const EbmlSemantic KaxTrackEntry_ContextList[22] =
+#else // MATROSKA_VERSION
+const EbmlSemantic KaxTrackEntry_ContextList[27] =
+#endif // MATROSKA_VERSION
+{
+       EbmlSemantic(true , true, KaxTrackNumber::ClassInfos),
+       EbmlSemantic(true , true, KaxTrackUID::ClassInfos),
+       EbmlSemantic(true , true, KaxTrackType::ClassInfos),
+#if MATROSKA_VERSION >= 2
+       EbmlSemantic(true , true, KaxTrackFlagEnabled::ClassInfos),
+#endif // MATROSKA_VERSION
+       EbmlSemantic(true , true, KaxTrackFlagDefault::ClassInfos),
+       EbmlSemantic(true , true, KaxTrackFlagForced::ClassInfos),
+       EbmlSemantic(true , true, KaxTrackFlagLacing::ClassInfos),
+       EbmlSemantic(true , true, KaxTrackMinCache::ClassInfos),
+       EbmlSemantic(false, true, KaxTrackMaxCache::ClassInfos),
+       EbmlSemantic(false, true, KaxTrackDefaultDuration::ClassInfos),
+       EbmlSemantic(true , true, KaxTrackTimecodeScale::ClassInfos),
+       EbmlSemantic(true , true, KaxMaxBlockAdditionID::ClassInfos),
+       EbmlSemantic(false, true, KaxTrackName::ClassInfos),
+       EbmlSemantic(false, true, KaxTrackLanguage::ClassInfos),
+       EbmlSemantic(true , true, KaxCodecID::ClassInfos),
+       EbmlSemantic(false, true, KaxCodecPrivate::ClassInfos),
+       EbmlSemantic(false, true, KaxCodecName::ClassInfos),
+       EbmlSemantic(false, true, KaxTrackAttachmentLink::ClassInfos),
+#if MATROSKA_VERSION >= 2
+       EbmlSemantic(false, true, KaxCodecSettings::ClassInfos),
+       EbmlSemantic(false, false,KaxCodecInfoURL::ClassInfos),
+       EbmlSemantic(false, false,KaxCodecDownloadURL::ClassInfos),
+       EbmlSemantic(true , true, KaxCodecDecodeAll::ClassInfos),
+#endif // MATROSKA_VERSION
+       EbmlSemantic(false, false,KaxTrackOverlay::ClassInfos),
+       EbmlSemantic(false, false,KaxTrackTranslate::ClassInfos),
+       EbmlSemantic(false, true, KaxTrackAudio::ClassInfos),
+       EbmlSemantic(false, true, KaxTrackVideo::ClassInfos),
+       EbmlSemantic(false, true, KaxContentEncodings::ClassInfos),
+};
+
+const EbmlSemanticContext KaxTracks_Context = EbmlSemanticContext(countof(KaxTracks_ContextList), KaxTracks_ContextList, &KaxSegment_Context, *GetKaxGlobal_Context, &KaxTracks::ClassInfos);
+const EbmlSemanticContext KaxTrackEntry_Context = EbmlSemanticContext(countof(KaxTrackEntry_ContextList), KaxTrackEntry_ContextList, &KaxTracks_Context, *GetKaxGlobal_Context, &KaxTrackEntry::ClassInfos);
+
+EbmlId KaxTracks_TheId    (0x1654AE6B, 4);
+EbmlId KaxTrackEntry_TheId(0xAE, 1);
+
+const EbmlCallbacks KaxTracks::ClassInfos(KaxTracks::Create, KaxTracks_TheId, "Tracks", KaxTracks_Context);
+const EbmlCallbacks KaxTrackEntry::ClassInfos(KaxTrackEntry::Create, KaxTrackEntry_TheId, "TrackEntry", KaxTrackEntry_Context);
+
+KaxTracks::KaxTracks()
+       :EbmlMaster(KaxTracks_Context)
+{}
+
+KaxTrackEntry::KaxTrackEntry()
+       :EbmlMaster(KaxTrackEntry_Context)
+       ,bGlobalTimecodeScaleIsSet(false)
+{}
+
+void KaxTrackEntry::EnableLacing(bool bEnable)
+{
+       KaxTrackFlagLacing & myLacing = GetChild<KaxTrackFlagLacing>(*this);
+       *(static_cast<EbmlUInteger *>(&myLacing)) = bEnable ? 1 : 0;
+}
+
+END_LIBMATROSKA_NAMESPACE
diff --git a/src/KaxVersion.cpp b/src/KaxVersion.cpp
new file mode 100644 (file)
index 0000000..6ed03d2
--- /dev/null
@@ -0,0 +1,40 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+       \file
+       \version \$Id: KaxVersion.cpp 640 2004-07-09 21:05:36Z mosu $
+       \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+
+#include "matroska/KaxVersion.h"
+
+START_LIBMATROSKA_NAMESPACE
+
+END_LIBMATROSKA_NAMESPACE
diff --git a/test/Makefile b/test/Makefile
new file mode 100644 (file)
index 0000000..479436e
--- /dev/null
@@ -0,0 +1,10 @@
+## libmatroska Makefile\r
+## (c) 2002 Steve Lhomme\r
+## This software is licensed under the LGPL, see LGPL.txt\r
+\r
+all: endian\r
+       echo "Making endianess tests"\r
+       (cd endian; make)\r
+clean:\r
+       echo "Cleaning all tests"\r
+       (cd endian; make $@)\r
diff --git a/test/ebml/Makefile b/test/ebml/Makefile
new file mode 100644 (file)
index 0000000..5e6658e
--- /dev/null
@@ -0,0 +1,62 @@
+# libmatroska core Makefile (used in cygwin)\r
+# $Id: Makefile 640 2004-07-09 21:05:36Z mosu $\r
+\r
+# Options\r
+EXTENSION=.cpp\r
+CXXFLAGS=-g -DDEBUG -Wall -Wno-unknown-pragmas -DWIN32 -I../../src/\r
+LDFLAGS=\r
+\r
+SRC_DIR=../../src/\r
+\r
+# Programs\r
+CXX=g++ -c\r
+LD=g++\r
+DEP=$(CXX) -MM\r
+DEPEND = makedepend\r
+AR = ar rcvu\r
+RANLIB = ranlib\r
+\r
+# Librarires\r
+INCLUDE=\r
+LIBS=\r
+\r
+# Names\r
+PROGRAM=test00\r
+\r
+# source-files\r
+sources:=$(wildcard ${SRC_DIR}*$(EXTENSION))\r
+\r
+# header files; replace .cxx extension with .h\r
+headers:=$(patsubst %$(EXTENSION),%.hpp,$(sources))\r
+\r
+# files holding dependency information; replace .cxx extension with .dep\r
+dependencies:=$(patsubst %$(EXTENSION),%.dep,$(sources))\r
+\r
+# object files; replace .cxx extension with .o\r
+objects:=$(patsubst %$(EXTENSION),%.o,$(sources))\r
+\r
+OBJ=$(objects) test00.o\r
+\r
+DEPENDFLAGS  = ${CXXFLAGS} ${INCLUDE}\r
+\r
+# Build rules\r
+%.o: %$(EXTENSION)\r
+       $(CXX) $(CXXFLAGS) $(INCLUDE) -o $@ $<\r
+\r
+$(PROGRAM): $(OBJ)\r
+#      $(AR) $@ $(objects)\r
+#      $(RANLIB) $@\r
+       $(LD) $(LDFLAGS) -o $@ $^ $(LIBS)\r
+       ${LD} -o $@ ${LDFLAGS} ${OBJ} ${LIBS} ${EXTRA_LIBS}\r
+\r
+clean:\r
+       rm -f $(OBJ)\r
+       rm -f $(dependencies)\r
+       rm -f $(PROGRAM)\r
+       rm -f CORE\r
+\r
+# what are the source dependencies\r
+depend: $(sources)\r
+       $(DEPEND) $(DEPENDFLAGS) $(sources)\r
+\r
+# DO NOT DELETE\r
diff --git a/test/ebml/ebml.proj b/test/ebml/ebml.proj
new file mode 100644 (file)
index 0000000..94fe5bc
--- /dev/null
@@ -0,0 +1,11 @@
+#include "*/*.proj"
+
+CON ebml-test00
+{
+  SOURCE test00.cpp
+}
+
+CON ebml-test0
+{
+  SOURCE test0.cpp
+}
diff --git a/test/ebml/test0.cpp b/test/ebml/test0.cpp
new file mode 100644 (file)
index 0000000..bfdcf9e
--- /dev/null
@@ -0,0 +1,303 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This file may be distributed under the terms of the Q Public License
+** as defined by Trolltech AS of Norway and appearing in the file
+** LICENSE.QPL included in the packaging of this file.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** Licensees holding an other license may use this file in accordance with 
+** the Agreement provided with the Software.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.matroska.org/license/qpl/ for QPL licensing information.
+** See http://www.matroska.org/license/gpl/ for GPL licensing information.
+**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+    \file
+    \version \$Id: test0.cpp 1078 2005-03-03 13:13:04Z robux4 $
+    \author Steve Lhomme     <robux4 @ users.sf.net>
+               Test the EBML write possibilities
+               \see http://www.cl.cam.ac.uk/~mgk25/unicode.html
+               \see http://www-106.ibm.com/developerworks/unicode/library/u-encode.html
+*/
+
+#include <stdio.h>
+
+#include "StdIOCallback.hpp"
+
+#include "EbmlUInteger.hpp"
+#include "EbmlSInteger.hpp"
+#include "EbmlBinary.hpp"
+#include "EbmlString.hpp"
+#include "EbmlUnicodeString.hpp"
+#include "EbmlMaster.hpp"
+#include "EbmlFloat.hpp"
+#include "EbmlStream.hpp"
+
+using namespace LIBMATROSKA_NAMESPACE;
+
+const char RW_FILENAME[] = "test.kax";
+
+enum SemanticType {
+       EBML_U_INTEGER,
+       EBML_S_INTEGER,
+       EBML_BINARY,
+       EBML_STRING,
+       EBML_STRING_UNICODE,
+       EBML_FLOAT,
+       EBML_MASTER,
+};
+
+typedef binary EBMLID[4];
+struct Semantic {
+       EBMLID Id;
+       int IdLength;
+       SemanticType Type;
+};
+
+struct Semantic SemanticList[] = 
+{
+       {{0x42, 0x45},             2, EBML_U_INTEGER},
+       {{0x1A, 0x45, 0x33, 0x80}, 4, EBML_S_INTEGER},
+       {{0x87},                   1, EBML_BINARY},
+       {{0x22, 0x33, 0x44},       3, EBML_STRING},
+       {{0x44, 0x33},             2, EBML_STRING_UNICODE},
+       {{0x50, 0x50},             2, EBML_FLOAT},
+       {{0x36, 0x47, 0x58},       3, EBML_MASTER},
+};
+
+/*!
+    \test Some test on the Cluster use
+    \todo render the Cluster to a file
+*/
+int main(void)
+{
+       StdIOCallback Ebml_file(RW_FILENAME, ::MODE_CREATE);
+       
+       ///// Writing test
+
+       ///////////////////////////////
+       //   Unsigned integer
+       ///////////////////////////////
+       
+       EbmlUInteger testUInt(4); // supposed to hold a 4*8 bits value
+       
+       testUInt.SetID(SemanticList[0].Id, SemanticList[0].IdLength);
+       testUInt = 52;
+       testUInt.SetSizeLength(3); // size should be coded on at least 3 octets
+       testUInt.Render(Ebml_file);
+
+       ///////////////////////////////
+       //   Signed integer
+       ///////////////////////////////
+       
+       EbmlSInteger testSInt(4); // supposed to hold a 4*8 bits value
+
+       testSInt.SetID(SemanticList[1].Id, SemanticList[1].IdLength);
+       testSInt = -20;
+       testSInt.Render(Ebml_file);
+
+       ///////////////////////////////
+       //   Binary data
+       ///////////////////////////////
+       const int BINARY_SIZE=3000;
+       
+       binary *bin = new binary[BINARY_SIZE];
+       memset(bin, 0x61, BINARY_SIZE);
+       EbmlBinary testBin;
+
+       testBin.SetID(SemanticList[2].Id, SemanticList[2].IdLength);
+       testBin.SetBuffer(bin, BINARY_SIZE);
+       testBin.Render(Ebml_file);
+
+       ///////////////////////////////
+       //   String data
+       ///////////////////////////////
+       std::string aString = "Hello World !";
+       EbmlString testStr(200);
+
+       testStr.SetID(SemanticList[3].Id, SemanticList[3].IdLength);
+       testStr = aString;
+       testStr.Render(Ebml_file);
+
+       ///////////////////////////////
+       //   Master element
+       ///////////////////////////////
+       EbmlMaster testMaster;
+
+       testMaster.SetID(SemanticList[6].Id, SemanticList[6].IdLength);
+       testMaster.PushElement(testStr);
+       testMaster.PushElement(testUInt);
+       testMaster.Render(Ebml_file);
+
+       ///////////////////////////////
+       //   Unicode String data
+       ///////////////////////////////
+       UTFstring bString = L"Stève Lhomm\80";
+       EbmlUnicodeString testUStr(200);
+
+       testUStr.SetID(SemanticList[4].Id, SemanticList[4].IdLength);
+       testUStr = bString;
+       testUStr.Render(Ebml_file);
+
+       ///////////////////////////////
+       //   Float data
+       ///////////////////////////////
+       EbmlFloat testFloat(EbmlFloat::FLOAT_32);
+
+       testFloat.SetID(SemanticList[5].Id, SemanticList[5].IdLength);
+       testFloat.SetPrecision(EbmlFloat::FLOAT_32);
+       testFloat = 1.01234567890123456;
+       testFloat.Render(Ebml_file);
+       
+       testFloat.SetPrecision(EbmlFloat::FLOAT_64);
+       testFloat = -1.01234567890123456L;
+       testFloat.Render(Ebml_file);
+       
+       Ebml_file.close();
+
+       ///// Reading test
+       StdIOCallback Ebml_Wfile(RW_FILENAME, ::MODE_READ);
+       
+       // example 1 skip all the elements found
+       EbmlStream aStream(Ebml_Wfile);
+       EbmlElement * ElementLevel0;
+       
+       // read the data until a possible element is found (valid ID + size combination)
+       ElementLevel0 = aStream.FindNextID(0xFFFFFFFFL, false);
+       printf("Read EBML elements & skip data\n");
+       while (ElementLevel0 != NULL)
+       {
+               printf("ID : ");
+               for (int i=0; i<ElementLevel0->GetIDLength(); i++)
+               {
+                       printf("[%02X]", ElementLevel0->GetID()[i]);
+               }
+               printf("\n");
+
+               ElementLevel0->SkipData(Ebml_Wfile);
+               if (ElementLevel0 != NULL)
+                       delete ElementLevel0;
+       
+               ElementLevel0 = aStream.FindNextID(0xFFFFFFFFL, false);
+       }
+       
+       // example 2 evaluation of all elements found
+       EbmlStream bStream(Ebml_Wfile);
+       EbmlElement * EvaledElementLevel0;
+//     EbmlElement * EvaledElementLevel1;
+       
+       // reset the stream to the beggining
+       Ebml_Wfile.setFilePointer(0);
+       
+       // list of all IDs and their semantic type
+//     std::list<struct Semantic> SemanticList;
+//     SemanticList.push_back();
+       
+       ElementLevel0 = aStream.FindNextID(0xFFFFFFFFL, false);
+       printf("Read EBML elements & evaluate data\n");
+       while (ElementLevel0 != NULL)
+       {
+               int i;
+               printf("ID : ");
+               for (i=0; i<ElementLevel0->GetIDLength(); i++)
+               {
+                       printf("[%02X]", ElementLevel0->GetID()[i]);
+               }
+
+               // check if the element is known
+               for (i=0; i<countof(SemanticList); i++) {
+                       if (ElementLevel0->GetIDLength() != SemanticList[i].IdLength)
+                               continue;
+                       if (memcmp(SemanticList[i].Id, ElementLevel0->GetID(), SemanticList[i].IdLength) == 0)
+                               break;
+               }
+               /// \todo check if it is known in the context
+               // handle the data inside the element
+               if (i < countof(SemanticList)) {
+                       switch (SemanticList[i].Type)
+                       {
+                               case EBML_U_INTEGER:
+                                       EvaledElementLevel0 = new EbmlUInteger(*ElementLevel0);
+                                       break;
+                               case EBML_S_INTEGER:
+                                       EvaledElementLevel0 = new EbmlSInteger(*ElementLevel0);
+                                       break;
+                               case EBML_BINARY:
+                                       EvaledElementLevel0 = new EbmlBinary(*ElementLevel0);
+                                       break;
+                               case EBML_STRING:
+                                       EvaledElementLevel0 = new EbmlString(*ElementLevel0);
+                                       break;
+                               case EBML_STRING_UNICODE:
+                                       EvaledElementLevel0 = new EbmlUnicodeString(*ElementLevel0);
+                                       break;
+                               case EBML_FLOAT:
+                                       EvaledElementLevel0 = new EbmlFloat(*ElementLevel0);
+                                       break;
+                               case EBML_MASTER:
+                                       EvaledElementLevel0 = new EbmlMaster(*ElementLevel0);
+                                       break;
+                       }
+
+                       EvaledElementLevel0->ReadData(Ebml_Wfile);
+
+                       switch (SemanticList[i].Type)
+                       {
+                               case EBML_U_INTEGER:
+                                       printf(" : %d", uint32(*(EbmlUInteger*)EvaledElementLevel0));
+                                       break;
+                               case EBML_S_INTEGER:
+                                       printf(" : %d", int32(*(EbmlSInteger*)EvaledElementLevel0));
+                                       break;
+                               case EBML_BINARY:
+                                       printf(" : binary data, size = %ld", (*(EbmlBinary*)EvaledElementLevel0).GetSize());
+                                       printf(" [%02X]", binary(*(EbmlBinary*)EvaledElementLevel0));
+                                       break;
+                               case EBML_STRING:
+                                       printf(" : %s", std::string(*(EbmlString*)EvaledElementLevel0).data());
+                                       break;
+                               case EBML_STRING_UNICODE:
+                                       printf(" : (wide chars) %ls", UTFstring(*(EbmlUnicodeString*)EvaledElementLevel0).data());
+                                       break;
+                               case EBML_FLOAT:
+                                       printf(" : %f / %.15lf", float(*(EbmlFloat*)EvaledElementLevel0), double(*(EbmlFloat*)EvaledElementLevel0));
+                                       break;
+                               case EBML_MASTER:
+                                       printf(" : unsupported format 'Master'");
+                                       break;
+                       }
+                       delete EvaledElementLevel0;
+               } else {
+                       ElementLevel0->SkipData(Ebml_Wfile);
+               }
+               if (ElementLevel0 != NULL)
+                       delete ElementLevel0;
+
+               printf("\n");
+       
+               ElementLevel0 = aStream.FindNextID(0xFFFFFFFFL, false);
+       }
+       
+       Ebml_Wfile.close();
+
+       return 0;
+}
diff --git a/test/ebml/test00.cpp b/test/ebml/test00.cpp
new file mode 100644 (file)
index 0000000..c82dfbd
--- /dev/null
@@ -0,0 +1,250 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This file may be distributed under the terms of the Q Public License
+** as defined by Trolltech AS of Norway and appearing in the file
+** LICENSE.QPL included in the packaging of this file.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** Licensees holding an other license may use this file in accordance with 
+** the Agreement provided with the Software.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.matroska.org/license/qpl/ for QPL licensing information.
+** See http://www.matroska.org/license/gpl/ for GPL licensing information.
+**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+    \file
+    \version \$Id: test00.cpp 1078 2005-03-03 13:13:04Z robux4 $
+    \author Steve Lhomme     <robux4 @ users.sf.net>
+               Test the writing a basic EBML file
+*/
+
+#include <stdio.h>
+#include <string>
+
+#include "StdIOCallback.h"
+
+#include "EbmlHead.h"
+#include "EbmlSubHead.h"
+#include "EbmlStream.h"
+#include "EbmlVoid.h"
+#include "EbmlContexts.h"
+#include "KaxSegment.h"
+#include "KaxAttachments.h"
+#include "KaxAttached.h"
+#include "KaxContexts.h"
+
+#include "EbmlVersion.h"
+#include "KaxVersion.h"
+
+using namespace LIBMATROSKA_NAMESPACE;
+
+const char RW_FILENAME[] = "test.kax";
+
+#undef SKIP_ATTACHED
+
+/*!
+    \test Some test on the Cluster use
+               \todo each Master element should have a context !
+               \todo move the base EBML classes to a template of each type ? (defining the default value and the ID)
+               \todo find another way than using all those static_cast (using a template ?)
+*/
+int main(void)
+{
+       printf("Test00 :\nEBML %s %s / Matroska %s %s\n", EbmlCodeVersion.c_str(), EbmlCodeDate.c_str(), KaxCodeVersion.c_str(), KaxCodeDate.c_str());
+       StdIOCallback Ebml_file(RW_FILENAME, ::MODE_CREATE);
+       
+       ///// Writing test
+       EbmlHead TestHead;
+
+       printf("Write EBML + Matroska elements\n");
+       EDocType & MyDocType = GetChild<EDocType>(TestHead);
+       *static_cast<EbmlString *>(&MyDocType) = "matroska";
+
+       EDocTypeVersion & MyDocTypeVer = GetChild<EDocTypeVersion>(TestHead);
+       *(static_cast<EbmlUInteger *>(&MyDocTypeVer)) = 1;
+
+       EDocTypeReadVersion & MyDocTypeReadVer = GetChild<EDocTypeReadVersion>(TestHead);
+       *(static_cast<EbmlUInteger *>(&MyDocTypeReadVer)) = 1;
+
+       TestHead.Render(Ebml_file);
+
+       KaxSegment FirstSegment;
+       // size is unknown and will always be, we can render it right away
+       FirstSegment.Render(Ebml_file);
+
+       KaxAttachments * pAllAttachments = static_cast<KaxAttachments *>(FirstSegment.FindFirstElt(KaxAttachments::ClassInfos, true));
+       if (pAllAttachments == NULL)
+               return -1;
+       pAllAttachments->SetSizeInfinite();
+       // size is unknown and will always be, we can render it right away
+       pAllAttachments->Render(Ebml_file);
+       
+       KaxAttached * pAttachment1 = static_cast<KaxAttached *>(pAllAttachments->FindFirstElt(KaxAttached::ClassInfos, true));
+       if (pAttachment1 == NULL)
+               return -1;
+       KaxFileName * pFileName1 = static_cast<KaxFileName *>(pAttachment1->FindFirstElt(KaxFileName::ClassInfos, true));
+       if (pFileName1 == NULL)
+               return -1;
+       *static_cast<EbmlUnicodeString *>(pFileName1) = "file1.txt";
+       KaxFileData * pFileData1 = static_cast<KaxFileData *>(pAttachment1->FindFirstElt(KaxFileData::ClassInfos, true));
+       if (pFileData1 == NULL)
+               return -1;
+       char Buffer1[] = "Ah ah ah !";
+       static_cast<EbmlBinary *>(pFileData1)->SetBuffer((const binary*) Buffer1, countof(Buffer1));
+       // should produce an error if the size is not infinite and the data has been rendered
+       pAttachment1->Render(Ebml_file);
+       
+       KaxAttached * pAttachment2 = static_cast<KaxAttached *>(pAllAttachments->AddNewElt(KaxAttached::ClassInfos));
+       if (pAttachment2 == NULL)
+               return -1;
+       KaxFileName * pFileName2 = static_cast<KaxFileName *>(pAttachment2->FindFirstElt(KaxFileName::ClassInfos, true));
+       if (pFileName2 == NULL)
+               return -1;
+       *static_cast<EbmlUnicodeString *>(pFileName2) = "file2.txt";
+       // Add a void element (data is discarded)
+       EbmlVoid * pVoid = static_cast<EbmlVoid *>(pAttachment2->FindFirstElt(EbmlVoid::ClassInfos, true));
+       if (pVoid == NULL)
+               return -1;
+       static_cast<EbmlBinary *>(pVoid)->SetBuffer((const binary*) Buffer1, countof(Buffer1));
+       pAttachment2->Render(Ebml_file);
+
+#ifdef SKIP_ATTACHED
+       KaxSegment SecondSegment;
+       // size is unknown and will always be, we can render it right away
+       SecondSegment.Render(Ebml_file);
+#endif // SKIP_ATTACHED
+
+       Ebml_file.close();
+
+       ///// Reading test
+       StdIOCallback Ebml_Wfile(RW_FILENAME, ::MODE_READ);
+       
+       // example 1 skip all the elements found
+       EbmlStream aStream(Ebml_Wfile);
+       EbmlElement * ElementLevel0;
+       EbmlElement * ElementLevel1;
+       EbmlElement * ElementLevel2;
+       EbmlElement * ElementLevel3;
+       
+       // read the data until a possible element is found (valid ID + size combination)
+       printf("Read EBML elements & skip data\n");
+       // find the EBML head in the file
+       ElementLevel0 = aStream.FindNextID(EbmlHead::ClassInfos, 0xFFFFFFFFL, false);
+       if (ElementLevel0 != NULL)
+       {
+               printf("ID : ");
+               for (unsigned int i=0; i<EbmlId(*ElementLevel0).Length; i++)
+               {
+                       printf("[%02X]", EbmlId(*ElementLevel0).Value[i]);
+               }
+               printf("\n");
+
+               ElementLevel0->SkipData(aStream, EbmlHead_Context);
+               if (ElementLevel0 != NULL)
+                       delete ElementLevel0;
+       }
+
+       // example to read attachements in the file
+       ElementLevel0 = aStream.FindNextID(KaxSegment::ClassInfos, 0xFFFFFFFFL, false);
+       while (ElementLevel0 != NULL)
+       {
+               printf("ID : ");
+               for (unsigned int i=0; i<EbmlId(*ElementLevel0).Length; i++)
+               {
+                       printf("[%02X]", EbmlId(*ElementLevel0).Value[i]);
+               }
+               printf("\n");
+
+               int bUpperElement = 0;
+
+               ElementLevel1 = aStream.FindNextID(KaxSegment_Context, bUpperElement, 0xFFFFFFFFL, true);
+
+               while (ElementLevel1 != NULL) {
+                       /// \todo switch the type of the element to check if it's one we want to handle, like attachements
+                       if (EbmlId(*ElementLevel1) == KaxAttachments::ClassInfos.GlobalId) {
+                               printf("Attachments detected\n");
+
+                               ElementLevel2 = aStream.FindNextID(KaxAttachments_Context, bUpperElement, 0xFFFFFFFFL, true);
+                               while (ElementLevel2 != NULL) {
+                                       /// \todo switch the type of the element to check if it's one we want to handle, like attachements
+                                       if (EbmlId(*ElementLevel2) == KaxAttached::ClassInfos.GlobalId) {
+                                               printf("Attached file detected\n");
+                                       }
+#ifdef SKIP_ATTACHED
+                                       ElementLevel2 = ElementLevel2->SkipData(aStream, KaxAttached_Context);
+                                       if (ElementLevel2 == NULL) {
+                                               ElementLevel2 = aStream.FindNextID(KaxAttachments_Context, bUpperElement, 0xFFFFFFFFL, true);
+
+                                               if (bUpperElement) {
+                                                       printf("Upper level1 element found\n");
+                                                       delete ElementLevel1;
+                                                       ElementLevel1 = ElementLevel2;
+                                                       ElementLevel2 = NULL;
+                                               }
+                                       }
+#else // SKIP_ATTACHED
+                                       // Display the filename (if it exists)
+                                       ElementLevel3 = aStream.FindNextID(KaxAttached_Context, bUpperElement, 0xFFFFFFFFL, false);
+                                       while (ElementLevel3 != NULL) {
+                                               /// \todo switch the type of the element to check if it's one we want to handle, like attachements
+                                               if (EbmlId(*ElementLevel3) == KaxFileName::ClassInfos.GlobalId) {
+                                                       KaxFileName & tmp = *static_cast<KaxFileName*>(ElementLevel3);
+                                                       tmp.ReadData(aStream.I_O());
+                                                       printf("File Name = %ls\n", UTFstring(tmp).c_str());
+                                               } else {
+                                                       ElementLevel3->SkipData(aStream, KaxAttached_Context);
+                                               }
+                                               delete ElementLevel3;
+                                               ElementLevel3 = aStream.FindNextID(KaxAttached_Context, bUpperElement, 0xFFFFFFFFL, false);
+                                               if (bUpperElement)
+                                                       break;
+                                       }
+
+                                       if (bUpperElement) {
+                                               delete ElementLevel2;
+                                               ElementLevel2 = ElementLevel3;
+                                       } else {
+                                               ElementLevel2->SkipData(aStream, KaxAttached_Context);
+                                               delete ElementLevel2;
+
+                                               ElementLevel2 = aStream.FindNextID(KaxAttachments_Context, bUpperElement, 0xFFFFFFFFL, true);
+                                       }
+#endif // SKIP_ATTACHED
+                               }
+                       }
+                       ElementLevel1->SkipData(aStream, KaxAttachments_Context);
+                       delete ElementLevel1;
+       
+                       ElementLevel1 = aStream.FindNextID(KaxSegment_Context, bUpperElement, 0xFFFFFFFFL, true);
+               }
+
+               ElementLevel0->SkipData(aStream, KaxSegment_Context);
+               if (ElementLevel0 != NULL)
+                       delete ElementLevel0;
+       
+               ElementLevel0 = aStream.FindNextID(KaxSegment_Context, bUpperElement, 0xFFFFFFFFL, true);
+       }
+
+       Ebml_Wfile.close();
+
+       return 0;
+}
diff --git a/test/mux/mux.proj b/test/mux/mux.proj
new file mode 100644 (file)
index 0000000..e46753c
--- /dev/null
@@ -0,0 +1,11 @@
+#include "*/*.proj"
+
+CON mux-test6
+{
+  SOURCE test6.cpp
+}
+
+CON mux-test8
+{
+  SOURCE test8.cpp
+}
diff --git a/test/mux/test6.cpp b/test/mux/test6.cpp
new file mode 100644 (file)
index 0000000..4f3dc97
--- /dev/null
@@ -0,0 +1,399 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+    \file
+    \version \$Id: test6.cpp 1078 2005-03-03 13:13:04Z robux4 $
+    \brief Test muxing two tracks into valid clusters/blocks/frames
+    \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+
+#ifdef _MSC_VER
+#include <windows.h>      // for min/max
+#endif // _MSC_VER
+
+#include <iostream>
+
+#include "ebml/StdIOCallback.h"
+
+#include "ebml/EbmlHead.h"
+#include "ebml/EbmlSubHead.h"
+#include "ebml/EbmlVoid.h"
+#include "matroska/FileKax.h"
+#include "matroska/KaxSegment.h"
+#include "matroska/KaxTracks.h"
+#include "matroska/KaxTrackEntryData.h"
+#include "matroska/KaxTrackAudio.h"
+#include "matroska/KaxTrackVideo.h"
+#include "matroska/KaxCluster.h"
+#include "matroska/KaxClusterData.h"
+#include "matroska/KaxSeekHead.h"
+#include "matroska/KaxCues.h"
+#include "matroska/KaxInfo.h"
+#include "matroska/KaxInfoData.h"
+#include "matroska/KaxTags.h"
+#include "matroska/KaxTag.h"
+#include "matroska/KaxChapters.h"
+#include "matroska/KaxContentEncoding.h"
+
+using namespace LIBMATROSKA_NAMESPACE;
+using namespace std;
+
+unsigned int BIN_FILE_SIZE = 15000;
+unsigned int TXT_FILE_SIZE = 3000;
+const unsigned int BIN_FRAME_SIZE = 1500;
+const unsigned int TXT_FRAME_SIZE = 200;
+const uint64  TIMECODE_SCALE = 1000000; 
+
+const bool bWriteDefaultValues = false;
+
+/*!
+    The first file is a "binary" file with data scaling from 0x00 to 0xFF repeatedly
+    The second file is a "text" file with data scaling from 'z' to 'a'
+*/
+int main(int argc, char **argv)
+{
+    cout << "Creating \"muxed.mkv\"" << endl;
+
+    try {
+               // write the head of the file (with everything already configured)
+               StdIOCallback out_file("muxed.mkv", MODE_CREATE);
+
+               ///// Writing EBML test
+               EbmlHead FileHead;
+
+               EDocType & MyDocType = GetChild<EDocType>(FileHead);
+               *static_cast<EbmlString *>(&MyDocType) = "matroska";
+
+               EDocTypeVersion & MyDocTypeVer = GetChild<EDocTypeVersion>(FileHead);
+               *(static_cast<EbmlUInteger *>(&MyDocTypeVer)) = MATROSKA_VERSION;
+
+               EDocTypeReadVersion & MyDocTypeReadVer = GetChild<EDocTypeReadVersion>(FileHead);
+               *(static_cast<EbmlUInteger *>(&MyDocTypeReadVer)) = 1;
+
+               FileHead.Render(out_file, bWriteDefaultValues);
+
+               KaxSegment FileSegment;
+
+               // size is unknown and will always be, we can render it right away
+               uint64 SegmentSize = FileSegment.WriteHead(out_file, 5, bWriteDefaultValues);
+               
+               KaxTracks & MyTracks = GetChild<KaxTracks>(FileSegment);
+
+               // reserve some space for the Meta Seek writen at the end               
+               EbmlVoid Dummy;
+               Dummy.SetSize(300); // 300 octets
+               Dummy.Render(out_file, bWriteDefaultValues);
+
+               KaxSeekHead MetaSeek;
+
+               // fill the mandatory Info section
+               KaxInfo & MyInfos = GetChild<KaxInfo>(FileSegment);
+               KaxTimecodeScale & TimeScale = GetChild<KaxTimecodeScale>(MyInfos);
+               *(static_cast<EbmlUInteger *>(&TimeScale)) = TIMECODE_SCALE;
+
+               KaxDuration & SegDuration = GetChild<KaxDuration>(MyInfos);
+               *(static_cast<EbmlFloat *>(&SegDuration)) = 0.0;
+
+               *((EbmlUnicodeString *)&GetChild<KaxMuxingApp>(MyInfos))  = L"libmatroska 0.5.0";
+               *((EbmlUnicodeString *)&GetChild<KaxWritingApp>(MyInfos)) = L"éàôï";
+               GetChild<KaxWritingApp>(MyInfos).SetDefaultSize(25);
+
+               uint32 InfoSize = MyInfos.Render(out_file);
+               MetaSeek.IndexThis(MyInfos, FileSegment);
+
+               // fill track 1 params
+               KaxTrackEntry & MyTrack1 = GetChild<KaxTrackEntry>(MyTracks);
+               MyTrack1.SetGlobalTimecodeScale(TIMECODE_SCALE);
+
+               KaxTrackNumber & MyTrack1Number = GetChild<KaxTrackNumber>(MyTrack1);
+               *(static_cast<EbmlUInteger *>(&MyTrack1Number)) = 1;
+
+               KaxTrackUID & MyTrack1UID = GetChild<KaxTrackUID>(MyTrack1);
+               *(static_cast<EbmlUInteger *>(&MyTrack1UID)) = 7;
+
+               *(static_cast<EbmlUInteger *>(&GetChild<KaxTrackType>(MyTrack1))) = track_audio;
+
+               KaxCodecID & MyTrack1CodecID = GetChild<KaxCodecID>(MyTrack1);
+               *static_cast<EbmlString *>(&MyTrack1CodecID) = "Dummy Audio Codec";
+
+               MyTrack1.EnableLacing(true);
+
+               // Test the new ContentEncoding elements
+               KaxContentEncodings &cencodings = GetChild<KaxContentEncodings>(MyTrack1);
+               KaxContentEncoding &cencoding = GetChild<KaxContentEncoding>(cencodings);
+               *(static_cast<EbmlUInteger *>(&GetChild<KaxContentEncodingOrder>(cencoding))) = 10;
+               *(static_cast<EbmlUInteger *>(&GetChild<KaxContentEncodingScope>(cencoding))) = 11;
+               *(static_cast<EbmlUInteger *>(&GetChild<KaxContentEncodingType>(cencoding))) = 12;
+
+               KaxContentCompression &ccompression = GetChild<KaxContentCompression>(cencoding);
+               *(static_cast<EbmlUInteger *>(&GetChild<KaxContentCompAlgo>(ccompression))) = 13;
+               GetChild<KaxContentCompSettings>(ccompression).CopyBuffer((const binary *)"hello1", 6);
+
+               KaxContentEncryption &cencryption = GetChild<KaxContentEncryption>(cencoding);
+               *(static_cast<EbmlUInteger *>(&GetChild<KaxContentEncAlgo>(cencryption))) = 14;
+               GetChild<KaxContentEncKeyID>(cencryption).CopyBuffer((const binary *)"hello2", 6);
+               *(static_cast<EbmlUInteger *>(&GetChild<KaxContentSigAlgo>(cencryption))) = 15;
+               *(static_cast<EbmlUInteger *>(&GetChild<KaxContentSigHashAlgo>(cencryption))) = 16;
+               GetChild<KaxContentSigKeyID>(cencryption).CopyBuffer((const binary *)"hello3", 6);
+               GetChild<KaxContentSignature>(cencryption).CopyBuffer((const binary *)"hello4", 6);
+
+               // audio specific params
+               KaxTrackAudio & MyTrack1Audio = GetChild<KaxTrackAudio>(MyTrack1);
+               
+               KaxAudioSamplingFreq & MyTrack1Freq = GetChild<KaxAudioSamplingFreq>(MyTrack1Audio);
+               *(static_cast<EbmlFloat *>(&MyTrack1Freq)) = 44100.0;
+               MyTrack1Freq.ValidateSize();
+
+#if MATROSKA_VERSION >= 2
+               KaxAudioPosition & MyTrack1Pos = GetChild<KaxAudioPosition>(MyTrack1Audio);
+               binary *_Pos = new binary[5];
+               _Pos[0] = '0';
+               _Pos[1] = '1';
+               _Pos[2] = '2';
+               _Pos[3] = '3';
+               _Pos[4] = '\0';
+               MyTrack1Pos.SetBuffer(_Pos, 5);
+#endif // MATROSKA_VERSION
+
+               KaxAudioChannels & MyTrack1Channels = GetChild<KaxAudioChannels>(MyTrack1Audio);
+               *(static_cast<EbmlUInteger *>(&MyTrack1Channels)) = 2;
+
+               // fill track 2 params
+               KaxTrackEntry & MyTrack2 = GetNextChild<KaxTrackEntry>(MyTracks, MyTrack1);
+               MyTrack2.SetGlobalTimecodeScale(TIMECODE_SCALE);
+
+               KaxTrackNumber & MyTrack2Number = GetChild<KaxTrackNumber>(MyTrack2);
+               *(static_cast<EbmlUInteger *>(&MyTrack2Number)) = 200;
+
+               KaxTrackUID & MyTrack2UID = GetChild<KaxTrackUID>(MyTrack2);
+               *(static_cast<EbmlUInteger *>(&MyTrack2UID)) = 13;
+
+               *(static_cast<EbmlUInteger *>(&GetChild<KaxTrackType>(MyTrack2))) = track_video;
+
+               KaxCodecID & MyTrack2CodecID = GetChild<KaxCodecID>(MyTrack2);
+               *static_cast<EbmlString *>(&MyTrack2CodecID) = "Dummy Video Codec";
+
+               MyTrack2.EnableLacing(false);
+
+               // video specific params
+               KaxTrackVideo & MyTrack2Video = GetChild<KaxTrackVideo>(MyTrack2);
+
+               KaxVideoPixelHeight & MyTrack2PHeight = GetChild<KaxVideoPixelHeight>(MyTrack2Video);
+               *(static_cast<EbmlUInteger *>(&MyTrack2PHeight)) = 200;
+
+               KaxVideoPixelWidth & MyTrack2PWidth = GetChild<KaxVideoPixelWidth>(MyTrack2Video);
+               *(static_cast<EbmlUInteger *>(&MyTrack2PWidth)) = 320;
+
+               uint64 TrackSize = MyTracks.Render(out_file, bWriteDefaultValues);
+
+               KaxTracks * pMyTracks2 = static_cast<KaxTracks *>(MyTracks.Clone());
+//             KaxTracks * pMyTracks2 = new KaxTracks(MyTracks);
+
+               MetaSeek.IndexThis(MyTracks, FileSegment);
+
+
+               // "manual" filling of a cluster"
+               /// \todo whenever a BlockGroup is created, we should memorize it's position
+               KaxCues AllCues;
+               AllCues.SetGlobalTimecodeScale(TIMECODE_SCALE);
+
+               KaxCluster Clust1;
+               Clust1.SetParent(FileSegment); // mandatory to store references in this Cluster
+               Clust1.SetPreviousTimecode(0, TIMECODE_SCALE); // the first timecode here
+               Clust1.EnableChecksum();
+
+               // automatic filling of a Cluster
+               // simple frame
+               KaxBlockGroup *MyNewBlock, *MyLastBlockTrk1 = NULL, *MyLastBlockTrk2 = NULL, *MyNewBlock2;
+               DataBuffer *data7 = new DataBuffer((binary *)"tototototo", countof("tototototo"));
+               Clust1.AddFrame(MyTrack1, 250 * TIMECODE_SCALE, *data7, MyNewBlock, LACING_EBML);
+               if (MyNewBlock != NULL)
+                       MyLastBlockTrk1 = MyNewBlock;
+               DataBuffer *data0 = new DataBuffer((binary *)"TOTOTOTO", countof("TOTOTOTO"));
+               Clust1.AddFrame(MyTrack1, 260 * TIMECODE_SCALE, *data0, MyNewBlock); // to test EBML lacing
+               if (MyNewBlock != NULL)
+                       MyLastBlockTrk1 = MyNewBlock;
+               DataBuffer *data6 = new DataBuffer((binary *)"tototototo", countof("tototototo"));
+               Clust1.AddFrame(MyTrack1, 270 * TIMECODE_SCALE, *data6, MyNewBlock); // to test lacing
+               if (MyNewBlock != NULL) {
+                       MyLastBlockTrk1 = MyNewBlock;
+               } else {
+                       MyLastBlockTrk1->SetBlockDuration(50 * TIMECODE_SCALE);
+               }
+
+               DataBuffer *data5 = new DataBuffer((binary *)"tototototo", countof("tototototo"));
+               Clust1.AddFrame(MyTrack2, 23 * TIMECODE_SCALE, *data5, MyNewBlock); // to test with another track
+
+               // add the "real" block to the cue entries
+               AllCues.AddBlockGroup(*MyLastBlockTrk1);
+
+               // frame for Track 2
+               DataBuffer *data8 = new DataBuffer((binary *)"tttyyy", countof("tttyyy"));
+               Clust1.AddFrame(MyTrack2, 107 * TIMECODE_SCALE, *data8, MyNewBlock, *MyLastBlockTrk2);
+
+               AllCues.AddBlockGroup(*MyNewBlock);
+
+               // frame with a past reference
+               DataBuffer *data4 = new DataBuffer((binary *)"tttyyy", countof("tttyyy"));
+               Clust1.AddFrame(MyTrack1, 300 * TIMECODE_SCALE, *data4, MyNewBlock, *MyLastBlockTrk1);
+
+               // frame with a past & future reference
+               if (MyNewBlock != NULL) {
+                       DataBuffer *data3 = new DataBuffer((binary *)"tttyyy", countof("tttyyy"));
+                       if (Clust1.AddFrame(MyTrack1, 280 * TIMECODE_SCALE, *data3, MyNewBlock2, *MyLastBlockTrk1, *MyNewBlock)) {
+                               MyNewBlock2->SetBlockDuration(20 * TIMECODE_SCALE);
+                               MyLastBlockTrk1 = MyNewBlock2;
+                       } else {
+                               printf("Error adding a frame !!!");
+                       }
+               }
+
+               AllCues.AddBlockGroup(*MyLastBlockTrk1);
+               //AllCues.UpdateSize();
+
+               // simulate the writing of the stream :
+               // - write an empty element with enough size for the cue entry
+               // - write the cluster(s)
+               // - seek back in the file and write the cue entry over the empty element
+
+               uint64 ClusterSize = Clust1.Render(out_file, AllCues, bWriteDefaultValues);
+               Clust1.ReleaseFrames();
+               MetaSeek.IndexThis(Clust1, FileSegment);
+
+               KaxCluster Clust2;
+               Clust2.SetParent(FileSegment); // mandatory to store references in this Cluster
+               Clust2.SetPreviousTimecode(300 * TIMECODE_SCALE, TIMECODE_SCALE); // the first timecode here
+               Clust2.EnableChecksum();
+
+               DataBuffer *data2 = new DataBuffer((binary *)"tttyyy", countof("tttyyy"));
+               Clust2.AddFrame(MyTrack1, 350 * TIMECODE_SCALE, *data2, MyNewBlock, *MyLastBlockTrk1);
+               
+               AllCues.AddBlockGroup(*MyNewBlock);
+
+               ClusterSize += Clust2.Render(out_file, AllCues, bWriteDefaultValues);
+               Clust2.ReleaseFrames();
+
+// older version, write at the end             AllCues.Render(out_file);
+               uint32 CueSize = AllCues.Render(out_file, bWriteDefaultValues);
+               MetaSeek.IndexThis(AllCues, FileSegment);
+
+               // Chapters
+               KaxChapters Chapters;
+               Chapters.EnableChecksum();
+               KaxEditionEntry & aEdition = GetChild<KaxEditionEntry>(Chapters);
+               KaxChapterAtom & aAtom = GetChild<KaxChapterAtom>(aEdition);
+               KaxChapterUID & aUID = GetChild<KaxChapterUID>(aAtom);
+               *static_cast<EbmlUInteger *>(&aUID) = 0x67890;
+
+               KaxChapterTimeStart & aChapStart = GetChild<KaxChapterTimeStart>(aAtom);
+               *static_cast<EbmlUInteger *>(&aChapStart) = 0;
+
+               KaxChapterTimeEnd & aChapEnd = GetChild<KaxChapterTimeEnd>(aAtom);
+               *static_cast<EbmlUInteger *>(&aChapEnd) = 300 * TIMECODE_SCALE;
+
+               KaxChapterDisplay & aDisplay = GetChild<KaxChapterDisplay>(aAtom);
+               KaxChapterString & aChapString = GetChild<KaxChapterString>(aDisplay);
+               *static_cast<EbmlUnicodeString *>(&aChapString) = L"Le film réduit à un chapitre";
+
+               KaxChapterLanguage & aChapLang = GetChild<KaxChapterLanguage>(aDisplay);
+               *static_cast<EbmlString *>(&aChapLang) = "fra";
+
+               KaxChapterDisplay & aDisplay2 = GetNextChild<KaxChapterDisplay>(aAtom, aDisplay);
+               KaxChapterString & aChapString2 = GetChild<KaxChapterString>(aDisplay2);
+               *static_cast<EbmlUnicodeString *>(&aChapString2) = L"The movie in one chapter";
+
+               KaxChapterLanguage & aChapLang2 = GetChild<KaxChapterLanguage>(aDisplay2);
+               *static_cast<EbmlString *>(&aChapLang2) = "eng";
+
+               uint32 ChapterSize = Chapters.Render(out_file, bWriteDefaultValues);
+               MetaSeek.IndexThis(Chapters, FileSegment);
+
+               // Write some tags
+               KaxTags AllTags;
+               AllTags.EnableChecksum();
+               KaxTag & aTag = GetChild<KaxTag>(AllTags);
+               KaxTagTargets & Targets = GetChild<KaxTagTargets>(aTag);
+               KaxTagGeneral & TagGeneral = GetChild<KaxTagGeneral>(aTag);
+
+               KaxTagTrackUID & TrackUID = GetChild<KaxTagTrackUID>(Targets);
+               *static_cast<EbmlUInteger *>(&TrackUID) = 0x12345;
+
+               KaxTagChapterUID & ChapterUID = GetChild<KaxTagChapterUID>(Targets);
+               *static_cast<EbmlUInteger *>(&ChapterUID) = 0x67890;
+
+               KaxTagSubject & Subject = GetChild<KaxTagSubject>(TagGeneral);
+               *static_cast<EbmlUnicodeString *>(&Subject) = L"Testé123";
+
+               KaxTagBibliography & Biblio = GetChild<KaxTagBibliography>(TagGeneral);
+               *static_cast<EbmlUnicodeString *>(&Biblio) = L"ça marche";
+
+               KaxTagFile & File = GetChild<KaxTagFile>(TagGeneral);
+               *static_cast<EbmlUnicodeString *>(&File) = L"Fichier";
+
+               KaxTagLanguage & Lang = GetChild<KaxTagLanguage>(TagGeneral);
+               *static_cast<EbmlString *>(&Lang) = "fra";
+
+               uint32 TagsSize = AllTags.Render(out_file, bWriteDefaultValues);
+               MetaSeek.IndexThis(AllTags, FileSegment);
+
+               TrackSize += pMyTracks2->Render(out_file, bWriteDefaultValues);
+               MetaSeek.IndexThis(*pMyTracks2, FileSegment);
+
+               // \todo put it just before the Cue Entries
+               uint32 MetaSeekSize = Dummy.ReplaceWith(MetaSeek, out_file, bWriteDefaultValues);
+
+#ifdef VOID_TEST
+               MyInfos.VoidMe(out_file);
+#endif // VOID_TEST
+
+               // let's assume we know the size of the Segment element
+               // the size of the FileSegment is also computed because mandatory elements we don't write ourself exist
+               if (FileSegment.ForceSize(SegmentSize - FileSegment.HeadSize() + MetaSeekSize
+                                             + TrackSize + ClusterSize + CueSize + InfoSize + TagsSize + ChapterSize)) {
+                       FileSegment.OverwriteHead(out_file);
+               }
+
+#if 0
+               delete[] buf_bin;
+               delete[] buf_txt;
+#endif // 0
+
+#ifdef OLD
+               MuxedFile.Close(1000); // 1000 ms
+#endif // OLD
+               out_file.close();
+    }
+    catch (exception & Ex)
+    {
+               cout << Ex.what() << endl;
+    }
+
+    return 0;
+}
diff --git a/test/mux/test8.cpp b/test/mux/test8.cpp
new file mode 100644 (file)
index 0000000..51da46a
--- /dev/null
@@ -0,0 +1,836 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+** 
+** This library 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
+** Lesser General Public License for more details.
+** 
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+**
+** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+    \file
+    \version \$Id: test8.cpp 675 2004-07-27 07:56:14Z mosu $
+    \brief Test reading of the Header
+    \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+
+#include <iostream>
+#include <cassert>
+
+#if __GNUC__ == 2
+#include <wchar.h>
+#endif
+
+#include "ebml/EbmlHead.h"
+#include "ebml/EbmlSubHead.h"
+#include "ebml/EbmlStream.h"
+#include "ebml/EbmlContexts.h"
+#include "ebml/EbmlVoid.h"
+#include "ebml/EbmlCrc32.h"
+#include "matroska/FileKax.h"
+#include "matroska/KaxSegment.h"
+#include "matroska/KaxContexts.h"
+#include "matroska/KaxTracks.h"
+#include "matroska/KaxInfo.h"
+#include "matroska/KaxInfoData.h"
+#include "matroska/KaxCluster.h"
+#include "matroska/KaxClusterData.h"
+#include "matroska/KaxBlockData.h"
+#include "matroska/KaxSeekHead.h"
+#include "matroska/KaxCuesData.h"
+#include "matroska/KaxChapters.h"
+#include "matroska/KaxTags.h"
+#include "matroska/KaxTag.h"
+#include "matroska/KaxTagMulti.h"
+#include "ebml/StdIOCallback.h"
+
+using namespace LIBMATROSKA_NAMESPACE;
+using namespace std;
+
+#define NO_DISPLAY_DATA
+//#define JUMP_TEST
+
+/*!
+    \note you can generate the file used in this example using test6.cpp
+       \todo the blocks with "titi" and "tetetete" don't seem to be read !
+*/
+int main(int argc, char **argv)
+{
+    try {
+       StdIOCallback Cluster_file((argc>=2 ? argv[1] : "muxed.mkv"), MODE_READ);
+
+       // create the Matroska file
+///    FileKax MuxedFile(Cluster_file);
+//     bool bAllowDummy = false; // don't read elements we don't know
+       bool bAllowDummy = true; // even read elements we don't know (needed for CRC checking)
+
+       // read the EBML head
+       EbmlStream aStream(Cluster_file);
+       EbmlElement * ElementLevel0;
+       EbmlElement * ElementLevel1;
+       EbmlElement * ElementLevel2;
+       EbmlElement * ElementLevel3 = NULL;
+       EbmlElement * ElementLevel4 = NULL;
+
+///    MuxedFile.ReadHead();
+       // find the EBML head in the file
+       ElementLevel0 = aStream.FindNextID(EbmlHead::ClassInfos, 0xFFFFFFFFL);
+       if (ElementLevel0 != NULL)
+       {
+               printf("EBML : ");
+               for (unsigned int i=0; i<EbmlId(*ElementLevel0).Length; i++)
+               {
+                       printf("[%02X]", (EbmlId(*ElementLevel0).Value >> (8*(3-i))) & 0xFF);
+               }
+               printf("\n");
+
+               ElementLevel0->SkipData(aStream, EbmlHead_Context);
+               if (ElementLevel0 != NULL)
+                       delete ElementLevel0;
+       }
+
+       int UpperElementLevel = 0;
+       KaxSegment * Segment;
+       KaxInfo * SegmentInfo;
+       KaxTrackEntry * TrackAudio;
+       KaxTrackEntry * TrackVideo;
+       KaxCluster *SegmentCluster;
+       KaxCues *CuesEntry;
+       KaxSeekHead *MetaSeek;
+       KaxChapters *Chapters;
+       KaxTags *AllTags;
+       uint64 TimecodeScale = 1000000;
+
+       // find the segment to read
+       ElementLevel0 = aStream.FindNextID(KaxSegment::ClassInfos, 0xFFFFFFFFL);
+       if (ElementLevel0 != NULL)
+       {
+               if (EbmlId(*ElementLevel0) == KaxSegment::ClassInfos.GlobalId) {
+                       Segment = static_cast<KaxSegment*>(ElementLevel0);
+//                     MuxedFile.ReadTracks();
+//                     MuxedFile.ReadCodec();
+                       // scan the file for a Tracks element (all previous Level1 elements are discarded)
+                       ElementLevel1 = aStream.FindNextElement(ElementLevel0->Generic().Context, UpperElementLevel, 0, bAllowDummy);
+
+                       while (ElementLevel1 != NULL) {
+                               if (UpperElementLevel > 0) {
+                                       break;
+                               }
+                               if (UpperElementLevel < 0) {
+                                       UpperElementLevel = 0;
+                               }
+
+                               /// \todo switch the type of the element to check if it's one we want to handle, like attachements
+                               if (EbmlId(*ElementLevel1) == EbmlVoid::ClassInfos.GlobalId) {
+                                       printf("\n- Void found\n");
+                               } else if (EbmlId(*ElementLevel1) == KaxTracks::ClassInfos.GlobalId) {
+                                       // found the Tracks element
+                                       printf("\n- Segment Tracks found\n");
+                                       // handle the data in Tracks here.
+                                       // poll for new tracks and handle them
+                                       ElementLevel2 = aStream.FindNextElement(ElementLevel1->Generic().Context, UpperElementLevel, 0, bAllowDummy);
+
+                                       while (ElementLevel2 != NULL) {
+                                               if (UpperElementLevel > 0) {
+                                                       break;
+                                               }
+                                               if (UpperElementLevel < 0) {
+                                                       UpperElementLevel = 0;
+                                               }
+                                               /// \todo switch the type of the element to check if it's one we want to handle, like attachements
+                                               if (EbmlId(*ElementLevel2) == KaxTrackEntry::ClassInfos.GlobalId) {
+                                                       printf("* Found a track\n");
+
+                                                       ElementLevel3 = aStream.FindNextElement(ElementLevel2->Generic().Context, UpperElementLevel, 0, bAllowDummy);
+                                                       while (ElementLevel3 != NULL) {
+                                                               if (UpperElementLevel > 0) {
+                                                                       break;
+                                                               }
+                                                               if (UpperElementLevel < 0) {
+                                                                       UpperElementLevel = 0;
+                                                               }
+                                                               // read the data we care about in a track
+                                                               // Track number
+                                                               if (EbmlId(*ElementLevel3) == KaxTrackNumber::ClassInfos.GlobalId) {
+                                                                       KaxTrackNumber & TrackNum = *static_cast<KaxTrackNumber*>(ElementLevel3);
+                                                                       TrackNum.ReadData(aStream.I_O());
+                                                                       printf("Track # %d\n", uint8(TrackNum));
+                                                               }
+
+                                                               // Track type
+                                                               else if (EbmlId(*ElementLevel3) == KaxTrackType::ClassInfos.GlobalId) {
+                                                                       KaxTrackType & TrackType = *static_cast<KaxTrackType*>(ElementLevel3);
+                                                                       TrackType.ReadData(aStream.I_O());
+                                                                       printf("Track type : ");
+                                                                       switch(uint8(TrackType))
+                                                                       {
+                                                                       case track_audio:
+                                                                               printf("Audio");
+                                                                               TrackAudio = static_cast<KaxTrackEntry *>(ElementLevel2);
+                                                                               TrackAudio->SetGlobalTimecodeScale(TimecodeScale);
+                                                                               break;
+                                                                       case track_video:
+                                                                               printf("Video");
+                                                                               TrackVideo = static_cast<KaxTrackEntry *>(ElementLevel2);
+                                                                               TrackVideo->SetGlobalTimecodeScale(TimecodeScale);
+                                                                               break;
+                                                                       default:
+                                                                               printf("unknown");
+                                                                       }
+                                                                       printf("\n");
+                                                               }
+
+                                                               else if (EbmlId(*ElementLevel3) == KaxTrackFlagLacing::ClassInfos.GlobalId) {
+                                                                       printf("Flag Lacing\n");
+                                                               }
+                                                               else if (EbmlId(*ElementLevel3) == KaxCodecID::ClassInfos.GlobalId) {
+                                                                       KaxCodecID & CodecID = *static_cast<KaxCodecID*>(ElementLevel3);
+                                                                       CodecID.ReadData(aStream.I_O());
+                                                                       printf("Codec ID   : %s\n", string(CodecID).c_str());
+                                                               }
+
+                                                               if (UpperElementLevel > 0) {
+                                                                       assert(0 == 1); // impossible to be here ?
+                                                                       UpperElementLevel--;
+                                                                       delete ElementLevel2;
+                                                                       ElementLevel2 = ElementLevel3;
+                                                                       if (UpperElementLevel > 0)
+                                                                               break;
+                                                               } else {
+                                                                       ElementLevel3->SkipData(aStream, ElementLevel3->Generic().Context);
+                                                                       delete ElementLevel3;
+
+                                                                       ElementLevel3 = aStream.FindNextElement(ElementLevel2->Generic().Context, UpperElementLevel, 0, bAllowDummy);
+                                                               }
+                                                       }
+                                               }
+                                               if (UpperElementLevel > 0) {
+                                                       UpperElementLevel--;
+                                                       delete ElementLevel2;
+                                                       ElementLevel2 = ElementLevel3;
+                                                       if (UpperElementLevel > 0)
+                                                               break;
+                                               } else {
+                                                       ElementLevel2->SkipData(aStream, ElementLevel2->Generic().Context);
+                                                       delete ElementLevel2;
+                                       
+                                                       ElementLevel2 = aStream.FindNextElement(ElementLevel1->Generic().Context, UpperElementLevel, 0, bAllowDummy);
+                                               }
+                                       }
+                               }
+
+                               else if (EbmlId(*ElementLevel1) == KaxInfo::ClassInfos.GlobalId) {
+                                       printf("\n- Segment Informations found\n");
+                                       SegmentInfo = static_cast<KaxInfo *>(ElementLevel1);
+
+#ifdef JUMP_TEST
+                                       // test jumping to a random location and find the next Level 0 / Level 1 element
+                                       aStream.I_O().setFilePointer(79, seek_current);
+                                       printf("Seeked at position 0x%X in the file", aStream.I_O().getFilePointer());
+                                       int LowLevel = 1;
+                                       ElementLevel2 = aStream.FindNextElement(KaxSegment::ClassInfos.Context, LowLevel, 0, false); // search up to one level lower
+                                       UpperElementLevel = LowLevel;
+#else // JUMP_TEST
+                                       // read the data we care about in matroska
+                                       /// \todo There should be a way to get the default values of the elements not defined
+                                       ElementLevel2 = aStream.FindNextElement(ElementLevel1->Generic().Context, UpperElementLevel, 0, bAllowDummy);
+                                       while (ElementLevel2 != NULL) {
+                                               if (UpperElementLevel > 0) {
+                                                       break;
+                                               }
+                                               if (UpperElementLevel < 0) {
+                                                       UpperElementLevel = 0;
+                                               }
+                                               if (EbmlId(*ElementLevel2) == KaxTimecodeScale::ClassInfos.GlobalId) {
+                                                       KaxTimecodeScale *TimeScale = static_cast<KaxTimecodeScale*>(ElementLevel2);
+                                                       TimeScale->ReadData(aStream.I_O());
+                                                       printf("Timecode Scale %d\n", uint32(*TimeScale));
+                                                       TimecodeScale = uint64(*TimeScale);
+                                               } else if (EbmlId(*ElementLevel2) == KaxDuration::ClassInfos.GlobalId) {
+                                                       printf("Segment duration\n");
+                                               } else if (EbmlId(*ElementLevel2) == KaxDateUTC::ClassInfos.GlobalId) {
+                                                       printf("Date UTC\n");
+                                               } else if (EbmlId(*ElementLevel2) == KaxTitle::ClassInfos.GlobalId) {
+                                                       printf("Title\n");
+                                               } else if (EbmlId(*ElementLevel2) == KaxMuxingApp::ClassInfos.GlobalId) {
+                                                       KaxMuxingApp *pApp = static_cast<KaxMuxingApp*>(ElementLevel2);
+                                                       pApp->ReadData(aStream.I_O());
+#if !defined(__CYGWIN__) && !defined(__APPLE__) && !defined(__BEOS__) && !defined(__NetBSD__)
+                                                       wprintf(L"Muxing App : %ls\n", UTFstring(*pApp).c_str());
+#else
+                                                       printf("Muxing App : %s\n", UTFstring(*pApp).c_str());
+#endif
+                                               } else if (EbmlId(*ElementLevel2) == KaxWritingApp::ClassInfos.GlobalId) {
+                                                       KaxWritingApp *pApp = static_cast<KaxWritingApp*>(ElementLevel2);
+                                                       pApp->ReadData(aStream.I_O());
+#if !defined(__CYGWIN__) && !defined(__APPLE__) && !defined(__BEOS__) && !defined(__NetBSD__)
+                                                       wprintf(L"Writing App : %ls (éàôï)\n", UTFstring(*pApp).c_str());
+#else
+                                                       printf("Writing App : %s (éàôï)\n", UTFstring(*pApp).c_str());
+#endif
+                                               }
+
+                                               if (UpperElementLevel > 0) {
+                                                       UpperElementLevel--;
+                                                       delete ElementLevel2;
+                                                       ElementLevel2 = ElementLevel3;
+                                                       if (UpperElementLevel > 0)
+                                                               break;
+                                               } else {
+                                                       ElementLevel2->SkipData(aStream, ElementLevel2->Generic().Context);
+                                                       delete ElementLevel2;
+
+                                                       ElementLevel2 = aStream.FindNextElement(ElementLevel1->Generic().Context, UpperElementLevel, 0, bAllowDummy);
+                                               }
+                                       }
+#endif // JUMP_TEST
+                               }
+
+                               else if (EbmlId(*ElementLevel1) == KaxCluster::ClassInfos.GlobalId) {
+                                       printf("\n- Segment Clusters found\n");
+                                       SegmentCluster = static_cast<KaxCluster *>(ElementLevel1);
+//                                     SegmentCluster->ClearElement();
+                                       uint32 ClusterTimecode;
+                                       EbmlCrc32 *pChecksum = NULL;
+                                       uint32 SizeInCrc;
+                                       uint64 CrcPositionStart = 0;
+
+#ifdef MEMORY_READ // read the Cluster in memory and then extract elements from memory
+                                       SegmentCluster->Read(aStream, KaxCluster::ClassInfos.Context, UpperElementLevel, ElementLevel2, bAllowDummy);
+                                       if (SegmentCluster->CheckMandatory()) {
+                                               printf("  * All mandatory elements found *\n");
+                                       } else {
+                                               printf("  * Some mandatory elements ar missing !!! *\n");
+                                       }
+                                       
+                                       // display the elements read
+                                       unsigned int Index0;
+                                       for (Index0 = 0; Index0<SegmentCluster->ListSize() ;Index0++) {
+                                               printf(" - found %s\n", (*SegmentCluster)[Index0]->Generic().DebugName);
+                                       }
+#else // not MEMORY_READ
+                                       // read blocks and discard the ones we don't care about
+                                       ElementLevel2 = aStream.FindNextElement(ElementLevel1->Generic().Context, UpperElementLevel, 0, bAllowDummy);
+                                       while (ElementLevel2 != NULL) {
+                                               if (UpperElementLevel > 0) {
+                                                       break;
+                                               }
+                                               if (UpperElementLevel < 0) {
+                                                       UpperElementLevel = 0;
+                                               }
+                                               if (EbmlId(*ElementLevel2) == KaxClusterTimecode::ClassInfos.GlobalId) {
+                                                       printf("Cluster timecode found\n");
+                                                       KaxClusterTimecode & ClusterTime = *static_cast<KaxClusterTimecode*>(ElementLevel2);
+                                                       ClusterTime.ReadData(aStream.I_O());
+                                                       ClusterTimecode = uint32(ClusterTime);
+                                                       SegmentCluster->InitTimecode(ClusterTimecode, TimecodeScale);
+                                               } else  if (EbmlId(*ElementLevel2) == KaxBlockGroup::ClassInfos.GlobalId) {
+                                                       printf("Block Group found\n");
+#ifdef TEST_BLOCKGROUP_READ
+                                                       KaxBlockGroup & aBlockGroup = *static_cast<KaxBlockGroup*>(ElementLevel2);
+//                                                     aBlockGroup.ClearElement();
+                                                       // Extract the valuable data from the Block
+
+                                                       aBlockGroup.Read(aStream, KaxBlockGroup::ClassInfos.Context, UpperElementLevel, ElementLevel3, bAllowDummy);
+                                                       KaxBlock * DataBlock = static_cast<KaxBlock *>(aBlockGroup.FindElt(KaxBlock::ClassInfos));
+                                                       if (DataBlock != NULL) {
+//                                                             DataBlock->ReadData(aStream.I_O());
+                                                               DataBlock->SetParent(*SegmentCluster);
+                                                               printf("   Track # %d / %d frame%s / Timecode %I64d\n",DataBlock->TrackNum(), DataBlock->NumberFrames(), (DataBlock->NumberFrames() > 1)?"s":"", DataBlock->GlobalTimecode());
+                                                       } else {
+                                                               printf("   A BlockGroup without a Block !!!");
+                                                       }
+                                                       KaxBlockDuration * BlockDuration = static_cast<KaxBlockDuration *>(aBlockGroup.FindElt(KaxBlockDuration::ClassInfos));
+                                                       if (BlockDuration != NULL) {
+                                                               printf("  Block Duration %d scaled ticks : %ld ns\n", uint32(*BlockDuration), uint32(*BlockDuration) * TimecodeScale);
+                                                       }
+                                                       KaxReferenceBlock * RefTime = static_cast<KaxReferenceBlock *>(aBlockGroup.FindElt(KaxReferenceBlock::ClassInfos));
+                                                       if (RefTime != NULL) {
+                                                               printf("  Reference frame at scaled (%d) timecode %ld\n", int32(*RefTime), int32(int64(*RefTime) * TimecodeScale));
+                                                       }
+#else // TEST_BLOCKGROUP_READ
+                                                       // read the data we care about in matroska
+                                                       /// \todo There should be a way to get the default values of the elements not defined
+                                                       ElementLevel3 = aStream.FindNextElement(ElementLevel2->Generic().Context, UpperElementLevel, 0, bAllowDummy);
+                                                       while (ElementLevel3 != NULL) {
+                                                               if (UpperElementLevel > 0) {
+                                                                       break;
+                                                               }
+                                                               if (UpperElementLevel < 0) {
+                                                                       UpperElementLevel = 0;
+                                                               }
+                                                               if (EbmlId(*ElementLevel3) == KaxBlock::ClassInfos.GlobalId) {
+                                                                       printf(" Block Data\n");
+                                                                       KaxBlock & DataBlock = *static_cast<KaxBlock*>(ElementLevel3);
+#ifdef NO_DISPLAY_DATA
+                                                                       DataBlock.ReadData(aStream.I_O(), SCOPE_PARTIAL_DATA);
+#else // NO_DISPLAY_DATA
+                                                                       DataBlock.ReadData(aStream.I_O(), SCOPE_ALL_DATA);
+#endif // NO_DISPLAY_DATA
+                                                                       DataBlock.SetParent(*SegmentCluster);
+                                                                       printf("   Track # %d / %d frame%s / Timecode %I64d\n",DataBlock.TrackNum(), DataBlock.NumberFrames(), (DataBlock.NumberFrames() > 1)?"s":"", DataBlock.GlobalTimecode());
+#ifndef NO_DISPLAY_DATA
+                                                                       for (unsigned int i=0; i< DataBlock.NumberFrames(); i++) {
+                                                                               printf("   [%s]\n",DataBlock.GetBuffer(i).Buffer()); // STRING ONLY POSSIBLE WITH THIS PARTICULAR EXAMPLE (the binary data is a string)
+                                                                       }
+#endif // NO_DISPLAY_DATA
+//                                                                     printf("Codec ID   : %s\n", &binary(CodecID)); // strings for the moment (example)
+#if MATROSKA_VERSION >= 2
+                                                               } else if (EbmlId(*ElementLevel3) == KaxBlockVirtual::ClassInfos.GlobalId) {
+                                                                       printf(" Virtual Block\n");
+                                                               } else if (EbmlId(*ElementLevel3) == KaxReferenceVirtual::ClassInfos.GlobalId) {
+                                                                       printf("  virtual Reference\n");
+#endif // MATROSKA_VERSION
+                                                               } else if (EbmlId(*ElementLevel3) == KaxReferencePriority::ClassInfos.GlobalId) {
+                                                                       printf("  Reference priority\n");
+                                                               } else if (EbmlId(*ElementLevel3) == KaxReferenceBlock::ClassInfos.GlobalId) {
+                                                                       KaxReferenceBlock & RefTime = *static_cast<KaxReferenceBlock*>(ElementLevel3);
+                                                                       RefTime.ReadData(aStream.I_O());
+                                                                       printf("  Reference frame at scaled (%d) timecode %ld\n", int32(RefTime), int32(int64(RefTime) * TimecodeScale));
+                                                               } else if (EbmlId(*ElementLevel3) == KaxBlockDuration::ClassInfos.GlobalId) {
+                                                                       KaxBlockDuration & BlockDuration = *static_cast<KaxBlockDuration*>(ElementLevel3);
+                                                                       BlockDuration.ReadData(aStream.I_O());
+                                                                       printf("  Block Duration %d scaled ticks : %ld ns\n", uint32(BlockDuration), uint32(BlockDuration) * TimecodeScale);
+                                                               }
+                                                               if (UpperElementLevel > 0) {
+                                                                       UpperElementLevel--;
+                                                                       delete ElementLevel3;
+                                                                       ElementLevel3 = ElementLevel4;
+                                                                       if (UpperElementLevel > 0)
+                                                                               break;
+                                                               } else {
+                                                                       ElementLevel3->SkipData(aStream, ElementLevel3->Generic().Context);
+
+                                                                       ElementLevel3 = aStream.FindNextElement(ElementLevel2->Generic().Context, UpperElementLevel, 0, bAllowDummy);
+                                                               }
+                                                       }
+#endif // TEST_BLOCKGROUP_READ
+                                               } else if (EbmlId(*ElementLevel2) == EbmlCrc32::ClassInfos.GlobalId) {
+                                                       printf("Cluster CheckSum !\n");
+                                                       pChecksum = static_cast<EbmlCrc32*>(ElementLevel2);
+                                                       pChecksum->ReadData(aStream.I_O());
+                                                       SegmentCluster->ForceChecksum( pChecksum->GetCrc32() ); // not use later
+                                                       SizeInCrc = 0;
+                                                       CrcPositionStart = aStream.I_O().getFilePointer();
+                                               }
+
+                                               if (UpperElementLevel > 0) {
+                                                       UpperElementLevel--;
+                                                       delete ElementLevel2;
+                                                       ElementLevel2 = ElementLevel3;
+                                                       if (UpperElementLevel > 0)
+                                                               break;
+                                               } else {
+                                                       ElementLevel2->SkipData(aStream, ElementLevel2->Generic().Context);
+                                                       if (ElementLevel2 != pChecksum)
+                                                               delete ElementLevel2;
+
+                                                       ElementLevel2 = aStream.FindNextElement(ElementLevel1->Generic().Context, UpperElementLevel, 0, bAllowDummy);
+                                               }
+                                       }
+#endif // not MEMORY_READ
+                                       if (pChecksum != NULL) {
+                                               EbmlCrc32 ComputedChecksum;
+                                               uint64 CurrPosition = aStream.I_O().getFilePointer();
+                                               uint64 CrcPositionEnd = ElementLevel2->GetElementPosition();
+                                               binary *SupposedBufferInCrc = new binary [CrcPositionEnd - CrcPositionStart];
+                                               aStream.I_O().setFilePointer(CrcPositionStart);
+                                               aStream.I_O().readFully(SupposedBufferInCrc, CrcPositionEnd - CrcPositionStart);
+                                               aStream.I_O().setFilePointer(CurrPosition);
+                                               ComputedChecksum.FillCRC32(SupposedBufferInCrc, CrcPositionEnd - CrcPositionStart);
+                                               delete [] SupposedBufferInCrc;
+                                               if (pChecksum->GetCrc32() == ComputedChecksum.GetCrc32()) {
+                                                       printf(" ++ CheckSum verification succeeded ++");
+                                               } else {
+                                                       printf(" ++ CheckSum verification FAILED !!! ++");
+                                               }
+                                               delete pChecksum;
+                                               pChecksum = NULL;
+                                       }
+                               }
+                               else if (EbmlId(*ElementLevel1) == KaxCues::ClassInfos.GlobalId) {
+                                       printf("\n- Cue entries found\n");
+                                       CuesEntry = static_cast<KaxCues *>(ElementLevel1);
+                                       CuesEntry->SetGlobalTimecodeScale(TimecodeScale);
+                                       // read everything in memory
+                                       CuesEntry->Read(aStream, KaxCues::ClassInfos.Context, UpperElementLevel, ElementLevel2, bAllowDummy); // build the entries in memory
+                                       if (CuesEntry->CheckMandatory()) {
+                                               printf("  * All mandatory elements found *\n");
+                                       } else {
+                                               printf("  * Some mandatory elements ar missing !!! *\n");
+                                       }
+                                       CuesEntry->Sort();
+                                       // display the elements read
+                                       unsigned int Index0;
+                                       for (Index0 = 0; Index0<CuesEntry->ListSize() ;Index0++) {
+                                               if ((*CuesEntry)[Index0]->Generic().GlobalId == KaxCuePoint::ClassInfos.GlobalId) {
+                                                       printf(" Cue Point\n");
+
+                                                       KaxCuePoint & CuePoint = *static_cast<KaxCuePoint *>((*CuesEntry)[Index0]);
+                                                       unsigned int Index1;
+                                                       for (Index1 = 0; Index1<CuePoint.ListSize() ;Index1++) {
+                                                               if (CuePoint[Index1]->Generic().GlobalId == KaxCueTime::ClassInfos.GlobalId) {
+                                                                       KaxCueTime & CueTime = *static_cast<KaxCueTime *>(CuePoint[Index1]);
+                                                                       printf("  Time %ld\n", uint64(CueTime) * TimecodeScale);
+                                                               } else if (CuePoint[Index1]->Generic().GlobalId == KaxCueTrackPositions::ClassInfos.GlobalId) {
+                                                                       KaxCueTrackPositions & CuePos = *static_cast<KaxCueTrackPositions *>(CuePoint[Index1]);
+                                                                       printf("  Positions\n");
+
+                                                                       unsigned int Index2;
+                                                                       for (Index2 = 0; Index2<CuePos.ListSize() ;Index2++) {
+                                                                               if (CuePos[Index2]->Generic().GlobalId == KaxCueTrack::ClassInfos.GlobalId) {
+                                                                                       KaxCueTrack & CueTrack = *static_cast<KaxCueTrack *>(CuePos[Index2]);
+                                                                                       printf("   Track %d\n", uint16(CueTrack));
+                                                                               } else if (CuePos[Index2]->Generic().GlobalId == KaxCueClusterPosition::ClassInfos.GlobalId) {
+                                                                                       KaxCueClusterPosition & CuePoss = *static_cast<KaxCueClusterPosition *>(CuePos[Index2]);
+                                                                                       printf("   Cluster position %d\n", uint64(CuePoss));
+#if MATROSKA_VERSION >= 2
+                                                                               } else if (CuePos[Index2]->Generic().GlobalId == KaxCueReference::ClassInfos.GlobalId) {
+                                                                                       KaxCueReference & CueRefs = *static_cast<KaxCueReference *>(CuePos[Index2]);
+                                                                                       printf("   Reference\n");
+
+                                                                                       unsigned int Index3;
+                                                                                       for (Index3 = 0; Index3<CueRefs.ListSize() ;Index3++) {
+                                                                                               if (CueRefs[Index3]->Generic().GlobalId == KaxCueRefTime::ClassInfos.GlobalId) {
+                                                                                                       KaxCueRefTime & CueTime = *static_cast<KaxCueRefTime *>(CueRefs[Index3]);
+                                                                                                       printf("    Time %d\n", uint32(CueTime));
+                                                                                               } else if (CueRefs[Index3]->Generic().GlobalId == KaxCueRefCluster::ClassInfos.GlobalId) {
+                                                                                                       KaxCueRefCluster & CueClust = *static_cast<KaxCueRefCluster *>(CueRefs[Index3]);
+                                                                                                       printf("    Cluster position %d\n", uint64(CueClust));
+                                                                                               } else {
+                                                                                                       printf("    - found %s\n", CueRefs[Index3]->Generic().DebugName);
+                                                                                               }
+                                                                                       }
+#endif // MATROSKA_VERSION
+                                                                               } else {
+                                                                                       printf("   - found %s\n", CuePos[Index2]->Generic().DebugName);
+                                                                               }
+                                                                       }
+                                                               } else {
+                                                                       printf("  - found %s\n", CuePoint[Index1]->Generic().DebugName);
+                                                               }
+                                                       }
+                                               } else {
+                                                       printf(" - found %s\n", (*CuesEntry)[Index0]->Generic().DebugName);
+                                               }
+                                       }
+                               }
+                               else if (EbmlId(*ElementLevel1) == KaxSeekHead::ClassInfos.GlobalId) {
+                                       printf("\n- Meta Seek found\n");
+                                       MetaSeek = static_cast<KaxSeekHead *>(ElementLevel1);
+                                       // read it in memory
+                                       MetaSeek->Read(aStream, KaxSeekHead::ClassInfos.Context, UpperElementLevel, ElementLevel2, bAllowDummy);
+                                       if (MetaSeek->CheckMandatory()) {
+                                               printf("  * All mandatory elements found *\n");
+                                       } else {
+                                               printf("  * Some mandatory elements ar missing !!! *\n");
+                                       }
+                                       unsigned int Index0;
+                                       for (Index0 = 0; Index0<MetaSeek->ListSize() ;Index0++) {
+                                               if ((*MetaSeek)[Index0]->Generic().GlobalId == KaxSeek::ClassInfos.GlobalId) {
+                                                       printf("   Seek Point\n");
+                                                       KaxSeek & SeekPoint = *static_cast<KaxSeek *>((*MetaSeek)[Index0]);
+                                                       unsigned int Index1;
+                                                       for (Index1 = 0; Index1<SeekPoint.ListSize() ;Index1++) {
+                                                               if (SeekPoint[Index1]->Generic().GlobalId == KaxSeekID::ClassInfos.GlobalId) {
+                                                                       KaxSeekID * SeekID = static_cast<KaxSeekID *>(SeekPoint[Index1]);
+                                                                       printf("    Seek ID ", SeekID->GetBuffer());
+                                                                       for (unsigned int i=0; i<SeekID->GetSize(); i++) {
+                                                                               printf("%02X", SeekID->GetBuffer()[i]);
+                                                                       }
+                                                                       printf("\n");
+                                                               } else if (SeekPoint[Index1]->Generic().GlobalId == KaxSeekPosition::ClassInfos.GlobalId) {
+                                                                       KaxSeekPosition * SeekPos = static_cast<KaxSeekPosition *>(SeekPoint[Index1]);
+                                                                       printf("    Seek position %d\n", uint32(*SeekPos));
+                                                               }
+                                                       }
+                                               }
+                                       }
+                               } else if (EbmlId(*ElementLevel1) == KaxChapters::ClassInfos.GlobalId) {
+                                       printf("\n- Chapters found\n");
+                                       Chapters = static_cast<KaxChapters *>(ElementLevel1);
+                                       // read it in memory
+                                       Chapters->Read(aStream, KaxChapters::ClassInfos.Context, UpperElementLevel, ElementLevel2, bAllowDummy);
+                                       if (Chapters->CheckMandatory()) {
+                                               printf("  * All mandatory elements found *\n");
+                                       } else {
+                                               printf("  * Some mandatory elements ar missing !!! *\n");
+                                       }
+                                       unsigned int Index0;
+                                       for (Index0 = 0; Index0<Chapters->ListSize() ;Index0++) {
+                                               if ((*Chapters)[Index0]->Generic().GlobalId == KaxEditionEntry::ClassInfos.GlobalId) {
+                                                       printf("   Edition\n");
+                                                       KaxEditionEntry & Edition = *static_cast<KaxEditionEntry *>((*Chapters)[Index0]);
+                                                       unsigned int Index2;
+                                                       for (Index2 = 0; Index2<Edition.ListSize() ;Index2++) {
+                                                               if (Edition[Index2]->Generic().GlobalId == KaxChapterAtom::ClassInfos.GlobalId) {
+                                                                       printf("     Chapter Atom\n");
+                                                                       KaxChapterAtom & aChapterAtom = *static_cast<KaxChapterAtom *>(Edition[Index2]);
+                                                                       unsigned int Index3;
+                                                                       for (Index3 = 0; Index3<aChapterAtom.ListSize() ;Index3++) {
+                                                                               if (aChapterAtom[Index3]->Generic().GlobalId == KaxChapterUID::ClassInfos.GlobalId) {
+                                                                                       printf("      Chapter UID 0x%08x\n", uint32(*static_cast<EbmlUInteger *>(aChapterAtom[Index3])) );
+                                                                               } else if (aChapterAtom[Index3]->Generic().GlobalId == KaxChapterTimeStart::ClassInfos.GlobalId) {
+                                                                                       printf("      Time Start %d\n", uint32(*static_cast<EbmlUInteger *>(aChapterAtom[Index3])) );
+                                                                               } else if (aChapterAtom[Index3]->Generic().GlobalId == KaxChapterTimeEnd::ClassInfos.GlobalId) {
+                                                                                       printf("      Time End %d ns\n", uint32(*static_cast<EbmlUInteger *>(aChapterAtom[Index3])) );
+                                                                               } else if (aChapterAtom[Index3]->Generic().GlobalId == KaxChapterTrack::ClassInfos.GlobalId) {
+                                                                                       printf("      Track list\n");
+                                                                               } else if (aChapterAtom[Index3]->Generic().GlobalId == KaxChapterDisplay::ClassInfos.GlobalId) {
+                                                                                       printf("      Display info\n");
+                                                                                       KaxChapterDisplay & aDisplay = *static_cast<KaxChapterDisplay *>(aChapterAtom[Index3]);
+                                                                                       unsigned int Index4;
+                                                                                       for (Index4 = 0; Index4<aDisplay.ListSize() ;Index4++) {
+                                                                                               if (aDisplay[Index4]->Generic().GlobalId == KaxChapterString::ClassInfos.GlobalId) {
+#if !defined(__CYGWIN__) && !defined(__APPLE__) && !defined(__BEOS__) && !defined(__NetBSD__)
+                                                                                                       wprintf(L"       Display \"%s\"\n", UTFstring(*static_cast<EbmlUnicodeString *>(aDisplay[Index4])).c_str() );
+#else
+                                                                                                       printf("       Display \"%s\"\n", UTFstring(*static_cast<EbmlUnicodeString *>(aDisplay[Index4])).c_str() );
+#endif
+                                                                                               } else if (aDisplay[Index4]->Generic().GlobalId == KaxChapterLanguage::ClassInfos.GlobalId) {
+                                                                                                       printf("       For language \"%s\"\n", std::string(*static_cast<EbmlString *>(aDisplay[Index4])).c_str() );
+                                                                                               } else if (aDisplay[Index4]->Generic().GlobalId == KaxChapterCountry::ClassInfos.GlobalId) {
+                                                                                                       printf("       For country \"%s\"\n", std::string(*static_cast<EbmlString *>(aDisplay[Index4])).c_str() );
+                                                                                               } else if (aDisplay[Index4]->IsDummy()) {
+                                                                                                       printf("       Dummy !!!\n");
+                                                                                               }
+                                                                                       }
+                                                                               }
+                                                                       }
+                                                               }
+                                                       }
+                                               }
+                                       }
+                               } else if (EbmlId(*ElementLevel1) == KaxTags::ClassInfos.GlobalId) {
+                                       printf("\n- Tags found\n");
+                                       AllTags = static_cast<KaxTags *>(ElementLevel1);
+                                       // read it in memory
+                                       AllTags->Read(aStream, KaxTags::ClassInfos.Context, UpperElementLevel, ElementLevel2, bAllowDummy);
+                                       if (AllTags->CheckMandatory()) {
+                                               printf("  * All mandatory elements found *\n");
+                                       } else {
+                                               printf("  * Some mandatory elements ar missing !!! *\n");
+                                       }
+                                       unsigned int Index0;
+                                       for (Index0 = 0; Index0<AllTags->ListSize() ;Index0++) {
+                                               if ((*AllTags)[Index0]->Generic().GlobalId == KaxTag::ClassInfos.GlobalId) {
+                                                       printf("   Tag\n");
+                                                       KaxTag & TagElt = *static_cast<KaxTag *>((*AllTags)[Index0]);
+                                                       unsigned int Index1;
+                                                       for (Index1 = 0; Index1<TagElt.ListSize() ;Index1++) {
+//                                                             bool bRemoved = false, bRemovedDone = true;
+                                                               if (TagElt[Index1]->Generic().GlobalId == KaxTagTargets::ClassInfos.GlobalId) {
+                                                                       printf("    Targets\n");
+                                                                       KaxTagTargets & Targets = *static_cast<KaxTagTargets *>(TagElt[Index1]);
+                                                                       unsigned int Index2;
+                                                                       for (Index2 = 0; Index2<Targets.ListSize() ;Index2++) {
+                                                                               if (Targets[Index2]->Generic().GlobalId == KaxTagTrackUID::ClassInfos.GlobalId) {
+#ifndef TEST_REMOVE
+                                                                                       printf("     Track UID\n");
+#else // TEST_REMOVE
+                                                                                       printf("     Track UID (will be removed)\n");
+                                                                                       /*************** Test to remove an element ***************/
+                                                                                       Targets.Remove(Index2);
+                                                                                       bRemoved = true;
+                                                                                       bRemovedDone = false;
+                                                                                       Index2--;
+                                                                                       Index1--;
+#endif // TEST_REMOVE
+                                                                               } else if (Targets[Index2]->Generic().GlobalId == KaxTagChapterUID::ClassInfos.GlobalId) {
+                                                                                       printf("     Chapter UID\n");
+                                                                               } else if (Targets[Index2]->Generic().GlobalId == KaxTagMultiComment::ClassInfos.GlobalId) {
+                                                                                       printf("     Comment\n");
+                                                                                       KaxTagMultiComment & Comment = *static_cast<KaxTagMultiComment *>(Targets[Index2]);
+                                                                                       unsigned int Index3;
+                                                                                       for (Index3 = 0; Index3<Comment.ListSize() ;Index3++) {
+                                                                                               if (Comment[Index3]->Generic().GlobalId == KaxTagMultiCommentName::ClassInfos.GlobalId) {
+                                                                                                       KaxTagMultiCommentName & CommentName = *static_cast<KaxTagMultiCommentName *>(Comment[Index3]);
+                                                                                                       printf("      Comment Name \"%s\"\n", std::string(CommentName).c_str());
+                                                                                               }       
+                                                                                       }
+//                                                                             } else if (Targets[Index2]->Generic().GlobalId == DummyRawElement::ClassInfos.GlobalId) {
+                                                                               }
+                                                                       }
+#ifdef TEST_REMOVE
+                                                                       if (bRemoved) {
+                                                                               printf("    -- Again After Deletion --\n");
+                                                                               bRemoved = false;
+                                                                       } else if (bRemovedDone) {
+                                                                               printf("    -- Done --\n");
+                                                                       }
+#endif // TEST_REMOVE
+                                                               } else if (TagElt[Index1]->Generic().GlobalId == KaxTagGeneral::ClassInfos.GlobalId) {
+                                                                       printf("    General\n");
+                                                                       KaxTagGeneral & General = *static_cast<KaxTagGeneral *>(TagElt[Index1]);
+                                                                       unsigned int Index2;
+                                                                       for (Index2 = 0; Index2<General.ListSize() ;Index2++) {
+                                                                               if (General[Index2]->Generic().GlobalId == KaxTagSubject::ClassInfos.GlobalId) {
+                                                                                       printf("     Subject\n");
+                                                                               } else if (General[Index2]->Generic().GlobalId == KaxTagBibliography::ClassInfos.GlobalId) {
+                                                                                       printf("     Bibliography\n");
+                                                                               } else if (General[Index2]->Generic().GlobalId == KaxTagLanguage::ClassInfos.GlobalId) {
+                                                                                       printf("     Language\n");
+                                                                               }       
+                                                                       }
+                                                               } else if (TagElt[Index1]->Generic().GlobalId == KaxTagMultiCommercial::ClassInfos.GlobalId) {
+                                                                       printf("    MultiCommercial\n");
+                                                                       KaxTagMultiCommercial & Commercials = *static_cast<KaxTagMultiCommercial *>(TagElt[Index1]);
+                                                                       unsigned int Index2;
+                                                                       for (Index2 = 0; Index2<Commercials.ListSize() ;Index2++) {
+                                                                               if (Commercials[Index2]->Generic().GlobalId == KaxTagCommercial::ClassInfos.GlobalId) {
+                                                                                       printf("     Commercial\n");
+                                                                                       KaxTagCommercial & Commercial = *static_cast<KaxTagCommercial *>(Commercials[Index2]);
+                                                                                       unsigned int Index3;
+                                                                                       for (Index3 = 0; Index3<Commercial.ListSize() ;Index3++) {
+                                                                                               if (Commercial[Index3]->Generic().GlobalId == KaxTagMultiCommercialType::ClassInfos.GlobalId) {
+                                                                                                       printf("      Type\n");
+                                                                                               } else if (Commercial[Index3]->Generic().GlobalId == KaxTagMultiPrice::ClassInfos.GlobalId) {
+                                                                                                       printf("      Prices\n");
+                                                                                                       KaxTagMultiPrice & Prices = *static_cast<KaxTagMultiPrice *>(Commercial[Index3]);
+                                                                                                       unsigned int Index4;
+                                                                                                       for (Index4 = 0; Index4<Prices.ListSize(); Index4++) {
+                                                                                                               if (Prices[Index4]->Generic().GlobalId == KaxTagMultiPriceCurrency::ClassInfos.GlobalId) {
+                                                                                                                       printf("       Currency\n");
+                                                                                                               } else if (Prices[Index4]->Generic().GlobalId == KaxTagMultiPriceAmount::ClassInfos.GlobalId) {
+                                                                                                                       printf("       Amount\n");
+                                                                                                               }       
+                                                                                                       }
+                                                                                               }       
+                                                                                       }
+                                                                               }       
+                                                                       }
+                                                               } else if (TagElt[Index1]->Generic().GlobalId == KaxTagMultiDate::ClassInfos.GlobalId) {
+                                                                       printf("    MultiDate\n");
+                                                               } else if (TagElt[Index1]->Generic().GlobalId == KaxTagMultiComment::ClassInfos.GlobalId) {
+                                                                       printf("    Comment\n");
+                                                                       KaxTagMultiComment & Comment = *static_cast<KaxTagMultiComment *>(TagElt[Index1]);
+                                                                       unsigned int Index2;
+                                                                       for (Index2 = 0; Index2<Comment.ListSize() ;Index2++) {
+                                                                               if (Comment[Index2]->Generic().GlobalId == KaxTagMultiCommentName::ClassInfos.GlobalId) {
+                                                                                       KaxTagMultiCommentName & CommentName = *static_cast<KaxTagMultiCommentName *>(Comment[Index2]);
+                                                                                       printf("     Comment Name \"%s\"\n", std::string(CommentName).c_str());
+                                                                               }       
+                                                                       }
+                                                               }
+                                                       }
+                                               }
+                                       }
+                                       if (AllTags->HasChecksum()) {
+                                               if (AllTags->VerifyChecksum()) {
+                                                       printf(" ++ CheckSum verification succeeded ++\n");
+                                               } else {
+                                                       printf(" ++ CheckSum verification FAILED !!! ++\n");
+                                               }
+                                       }
+                               }
+
+                               if (UpperElementLevel > 0) {
+                                       UpperElementLevel--;
+                                       delete ElementLevel1;
+                                       ElementLevel1 = ElementLevel2;
+                                       if (UpperElementLevel > 0)
+                                               break;
+                               } else {
+                                       ElementLevel1->SkipData(aStream, ElementLevel1->Generic().Context);
+                                       delete ElementLevel1;
+                       
+                                       ElementLevel1 = aStream.FindNextElement(ElementLevel0->Generic().Context, UpperElementLevel, 0, bAllowDummy);
+                               }
+                       }
+               }
+       }
+
+#ifdef OLD
+       uint8 TrackNumber = MuxedFile.GetTrackNumber();
+
+       TrackInfo *Tracks = new TrackInfo[TrackNumber];
+       TrackInfoAudio aAudioTrack;
+       TrackInfoVideo aVideoTrack;
+
+       Track * track1 = MuxedFile.GetTrack(1);
+       Track * track2 = MuxedFile.GetTrack(2);
+       Track * track3 = MuxedFile.GetTrack(3); // should be 0
+       // get information about the 1st track
+
+       MuxedFile.Track_GetInfo(track1, Tracks[0]);
+       displayTrackInfo(Tracks[0]);
+
+       if (Tracks[0].TrackType == track_audio) {
+           MuxedFile.Track_GetInfo_Audio(track1, aAudioTrack);
+           displayAudioInfo(aAudioTrack);
+       }
+       else
+           cout << "the expected audio track is not an audio one :(" << endl;
+
+       MuxedFile.Track_GetInfo(track3, Tracks[2]);
+       displayTrackInfo(Tracks[2]);
+
+       if (Tracks[2].TrackType == track_video) {
+           MuxedFile.Track_GetInfo_Video(track3, aVideoTrack);
+           displayVideoInfo(aVideoTrack);
+       }
+       else
+           cout << "the expected video track is not an video one :(" << endl;
+
+       // let's read only track1 (audio)
+       MuxedFile.SelectReadingTrack(track1);
+       MuxedFile.SelectReadingTrack(track2);
+       MuxedFile.SelectReadingTrack(track1,false);
+       MuxedFile.SelectReadingTrack(track1);
+       MuxedFile.SelectReadingTrack(track2,false);
+       MuxedFile.SelectReadingTrack(track2);
+       MuxedFile.SelectReadingTrack(track3);
+
+       // read the frames from the selected tracks and put them in an output file
+       StdIOCallback Output_file1("out-binr.bin", MODE_CREATE);
+       StdIOCallback Output_file2("out-text.bin", MODE_CREATE);
+       StdIOCallback Output_file3("out-vide.bin", MODE_CREATE);
+
+       Track * TrackRead;
+       uint32 timecode; // not used yet
+       binary *aFrame;
+       uint32 aFrameSize;
+       while (MuxedFile.ReadFrame(TrackRead, timecode, aFrame, aFrameSize))
+       {
+           if (TrackRead == track1)
+           {
+               Output_file1.write(aFrame, aFrameSize);
+           }
+           else if (TrackRead == track2)
+           {
+               Output_file2.write(aFrame, aFrameSize);
+           }
+           else if (TrackRead == track3)
+           {
+               Output_file3.write(aFrame, aFrameSize);
+           }
+           else cout << "received a frame from an unwanted track" << endl;
+       }
+#endif // OLD
+    }
+    catch (exception & Ex)
+    {
+               cout << Ex.what() << endl;
+               return -1;
+    }
+
+    return 0;
+}
diff --git a/test/tags/tags.proj b/test/tags/tags.proj
new file mode 100644 (file)
index 0000000..10612dd
--- /dev/null
@@ -0,0 +1,6 @@
+#include "*/*.proj"
+
+CON tags-test9
+{
+  SOURCE tags.cpp
+}
diff --git a/test/tags/test9.cpp b/test/tags/test9.cpp
new file mode 100644 (file)
index 0000000..848b581
--- /dev/null
@@ -0,0 +1,368 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2004 Moritz Bunkus.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This file may be distributed under the terms of the Q Public License
+** as defined by Trolltech AS of Norway and appearing in the file
+** LICENSE.QPL included in the packaging of this file.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** Licensees holding an other license may use this file in accordance with 
+** the Agreement provided with the Software.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.matroska.org/license/qpl/ for QPL licensing information.
+** See http://www.matroska.org/license/gpl/ for GPL licensing information.
+**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+    \file
+    \version \$Id: test9.cpp 640 2004-07-09 21:05:36Z mosu $
+    \brief Test writing tags
+    \author Moritz Bunkus     <mosu @ users.sf.net>
+*/
+
+#include <time.h>
+
+#include <typeinfo>
+
+#include <ebml/EbmlHead.h>
+#include <ebml/EbmlSubHead.h>
+#include <ebml/EbmlVersion.h>
+#include <ebml/EbmlVoid.h>
+#include <ebml/StdIOCallback.h>
+
+#include <matroska/FileKax.h>
+#include <matroska/KaxBlock.h>
+#include <matroska/KaxCluster.h>
+#include <matroska/KaxClusterData.h>
+#include <matroska/KaxCues.h>
+#include <matroska/KaxInfo.h>
+#include <matroska/KaxInfoData.h>
+#include <matroska/KaxSeekHead.h>
+#include <matroska/KaxSegment.h>
+#include <matroska/KaxTags.h>
+#include <matroska/KaxTag.h>
+#include <matroska/KaxTagMulti.h>
+#include <matroska/KaxTracks.h>
+#include <matroska/KaxTrackEntryData.h>
+#include <matroska/KaxTrackAudio.h>
+#include <matroska/KaxTrackVideo.h>
+#include <matroska/KaxVersion.h>
+
+using namespace std;
+using namespace libebml;
+using namespace libmatroska;
+
+int main() {
+
+  try {
+    EbmlHead head;
+    KaxSegment segment;
+    StdIOCallback out("test.mkv", MODE_CREATE);
+    
+    EDocType &doc_type = GetChild<EDocType>(head);
+    *static_cast<EbmlString *>(&doc_type) = "matroska";
+    EDocTypeVersion &doc_type_ver = GetChild<EDocTypeVersion>(head);
+    *(static_cast<EbmlUInteger *>(&doc_type_ver)) = 1;
+    EDocTypeReadVersion &doc_type_read_ver =
+      GetChild<EDocTypeReadVersion>(head);
+    *(static_cast<EbmlUInteger *>(&doc_type_read_ver)) = 1;
+
+    head.Render(out);
+
+    KaxInfo &info = GetChild<KaxInfo>(segment);
+    KaxTimecodeScale &time_scale = GetChild<KaxTimecodeScale>(info);
+    *(static_cast<EbmlUInteger *>(&time_scale)) = 1000000;
+
+    segment.WriteHead(out, 5);
+
+    // Write some dummy tags.
+    KaxTags &tags = GetChild<KaxTags>(segment);
+
+    KaxTag &tag = GetChild<KaxTag>(tags);
+
+    KaxTagTargets &targets = GetChild<KaxTagTargets>(tag);
+    *(static_cast<EbmlUInteger *>(&GetChild<KaxTagTrackUID>(targets))) =
+      1234;
+
+       // comment of the Targets
+     KaxTagMultiComment &mcomB = GetChild<KaxTagMultiComment>(targets);
+    *(static_cast<EbmlString *>
+      (&GetChild<KaxTagMultiCommentName>(mcomB))) =
+      "Comment Level 5";
+
+    *(static_cast<EbmlUInteger *>(&GetChild<KaxTagChapterUID>(targets))) =
+      5678;
+
+     KaxTagMultiComment &mcomA = GetChild<KaxTagMultiComment>(tag);
+    *(static_cast<EbmlString *>
+      (&GetChild<KaxTagMultiCommentName>(mcomA))) =
+      "Comment Level 3";
+
+    KaxTagGeneral &general = GetChild<KaxTagGeneral>(tag);
+    *(static_cast<EbmlUnicodeString *>(&GetChild<KaxTagSubject>(general))) =
+      L"Subject";
+    *(static_cast<EbmlUnicodeString *>
+      (&GetChild<KaxTagBibliography>(general))) =
+      L"Bibliography";
+    *(static_cast<EbmlString *>(&GetChild<KaxTagLanguage>(general))) = "ger";
+    KaxTagRating &rating = GetChild<KaxTagRating>(general);
+    rating.CopyBuffer((binary *)"hallo", 5);
+     *(static_cast<EbmlUnicodeString *>
+       (&GetChild<KaxTagEncoder>(general))) =
+       L"Encoder";
+     *(static_cast<EbmlUnicodeString *>
+       (&GetChild<KaxTagEncodeSettings>(general))) =
+       L"EncodeSettings";
+     *(static_cast<EbmlUnicodeString *>
+       (&GetChild<KaxTagFile>(general))) =
+       L"File";
+    *(static_cast<EbmlUnicodeString *>
+      (&GetChild<KaxTagArchivalLocation>(general))) =
+      L"ArchivalLocation";
+    KaxTagKeywords &keywords1 = GetChild<KaxTagKeywords>(general);
+    *(static_cast<EbmlUnicodeString *>(&keywords1)) = 
+      L"Keywords, 1";
+    *(static_cast<EbmlUnicodeString *>
+      (&GetNextChild<KaxTagKeywords>(general, keywords1))) =
+      L"Keywords, 2";
+    *(static_cast<EbmlUnicodeString *>
+      (&GetChild<KaxTagMood>(general))) =
+      L"Mood";
+    KaxTagRecordLocation &recordLocation1 =
+      GetChild<KaxTagRecordLocation>(general);
+    *(static_cast<EbmlString *>(&recordLocation1)) = 
+      "RecordLocation, 1";
+    *(static_cast<EbmlString *>
+      (&GetNextChild<KaxTagRecordLocation>(general, recordLocation1))) =
+      "RecordLocation, 2";
+    *(static_cast<EbmlUnicodeString *>
+      (&GetChild<KaxTagSource>(general))) =
+      L"Source";
+    *(static_cast<EbmlUnicodeString *>
+      (&GetChild<KaxTagSourceForm>(general))) =
+      L"SourceForm";
+    *(static_cast<EbmlUnicodeString *>
+      (&GetChild<KaxTagProduct>(general))) =
+      L"Product";
+    *(static_cast<EbmlUnicodeString *>
+      (&GetChild<KaxTagOriginalMediaType>(general))) =
+      L"OriginalMediaType";
+    *(static_cast<EbmlUInteger *>
+      (&GetChild<KaxTagPlayCounter>(general))) =
+      123456;
+    *(static_cast<EbmlSInteger *>
+      (&GetChild<KaxTagPopularimeter>(general))) =
+      234567;
+
+    KaxTagGenres &genres = GetChild<KaxTagGenres>(tag);
+    *(static_cast<EbmlString *>
+      (&GetChild<KaxTagAudioGenre>(genres))) =
+      "AudioGenre";
+    KaxTagVideoGenre &videoGenre = GetChild<KaxTagVideoGenre>(genres);
+    videoGenre.CopyBuffer((binary *)"hallo", 5);
+    *(static_cast<EbmlString *>
+      (&GetChild<KaxTagSubGenre>(genres))) =
+      "SubGenre";
+
+    KaxTagAudioSpecific &aspec = GetChild<KaxTagAudioSpecific>(tag);
+    KaxTagAudioEncryption &aenc = GetChild<KaxTagAudioEncryption>(aspec);
+    aenc.CopyBuffer((binary *)"hallo", 5);
+    *(static_cast<EbmlFloat *>
+      (&GetChild<KaxTagAudioGain>(aspec))) =
+      42.0;
+    *(static_cast<EbmlFloat *>
+      (&GetChild<KaxTagAudioPeak>(aspec))) =
+      54.0;
+    *(static_cast<EbmlFloat *>
+      (&GetChild<KaxTagBPM>(aspec))) =
+      23.0;
+    KaxTagEqualisation &aeq = GetChild<KaxTagEqualisation>(aspec);
+    aeq.CopyBuffer((binary *)"hallo", 5);
+    *(static_cast<EbmlUInteger *>
+      (&GetChild<KaxTagDiscTrack>(aspec))) =
+      2;
+    *(static_cast<EbmlUInteger *>
+      (&GetChild<KaxTagSetPart>(aspec))) =
+      4;
+    *(static_cast<EbmlString *>
+      (&GetChild<KaxTagInitialKey>(aspec))) =
+      "InitialKey";
+    *(static_cast<EbmlString *>
+      (&GetChild<KaxTagOfficialAudioFileURL>(aspec))) =
+      "OfficialAudioFileURL";
+    *(static_cast<EbmlString *>
+      (&GetChild<KaxTagOfficialAudioSourceURL>(aspec))) =
+      "OfficialAudioSourceURL";
+
+    KaxTagImageSpecific &ispec = GetChild<KaxTagImageSpecific>(tag);
+    *(static_cast<EbmlUInteger *>
+      (&GetChild<KaxTagCaptureDPI>(ispec))) =
+      42;
+    KaxTagCaptureLightness &clight = GetChild<KaxTagCaptureLightness>(ispec);
+    clight.CopyBuffer((binary *)"hallo", 5);
+    *(static_cast<EbmlUInteger *>
+      (&GetChild<KaxTagCapturePaletteSetting>(ispec))) =
+      54;
+    KaxTagCaptureSharpness &csharp = GetChild<KaxTagCaptureSharpness>(ispec);
+    csharp.CopyBuffer((binary *)"hallo", 5);
+    *(static_cast<EbmlUnicodeString *>
+      (&GetChild<KaxTagCropped>(ispec))) =
+      L"Cropped";
+    *(static_cast<EbmlString *>
+      (&GetChild<KaxTagOriginalDimensions>(ispec))) =
+      "OriginalDimensions";
+
+    KaxTagMultiCommercial &mcmrcl = GetChild<KaxTagMultiCommercial>(tag);
+    KaxTagCommercial &cmrcl = GetChild<KaxTagCommercial>(mcmrcl);
+    *(static_cast<EbmlUInteger *>
+      (&GetChild<KaxTagMultiCommercialType>(cmrcl))) =
+      3;
+    *(static_cast<EbmlUnicodeString *>
+      (&GetChild<KaxTagMultiCommercialAddress>(cmrcl))) =
+      L"MultiCommercialAddress";
+    *(static_cast<EbmlString *>
+      (&GetChild<KaxTagMultiCommercialURL>(cmrcl))) =
+      "MultiCommercialURL";
+    *(static_cast<EbmlString *>
+      (&GetChild<KaxTagMultiCommercialEmail>(cmrcl))) =
+      "MultiCommercialEmail";
+
+     KaxTagMultiPrice &mprice = GetChild<KaxTagMultiPrice>(cmrcl);
+     *(static_cast<EbmlString *>
+       (&GetChild<KaxTagMultiPriceCurrency>(mprice))) =
+       "MultiPriceCurrency";
+     *(static_cast<EbmlFloat *>
+       (&GetChild<KaxTagMultiPriceAmount>(mprice))) =
+       42.0;
+     KaxTagMultiPricePriceDate &pdate = 
+       GetChild<KaxTagMultiPricePriceDate>(mprice);
+     pdate.SetEpochDate(time(NULL));
+
+    KaxTagMultiDate &mdate = GetChild<KaxTagMultiDate>(tag);
+    KaxTagDate &date = GetChild<KaxTagDate>(mdate);
+    *(static_cast<EbmlUInteger *>
+      (&GetChild<KaxTagMultiDateType>(date))) =
+      4;
+    KaxTagMultiDateDateBegin &dbeg = 
+      GetChild<KaxTagMultiDateDateBegin>(date);
+    dbeg.SetEpochDate(time(NULL));
+    KaxTagMultiDateDateEnd &dend = 
+      GetChild<KaxTagMultiDateDateEnd>(date);
+    dend.SetEpochDate(time(NULL));
+
+    KaxTagMultiEntity &ment = GetChild<KaxTagMultiEntity>(tag);
+    KaxTagEntity &ent = GetChild<KaxTagEntity>(ment);
+    *(static_cast<EbmlUInteger *>
+      (&GetChild<KaxTagMultiEntityType>(ent))) =
+      1;
+    *(static_cast<EbmlUnicodeString *>
+      (&GetChild<KaxTagMultiEntityName>(ent))) =
+      L"MultiEntityName";
+    *(static_cast<EbmlString *>
+      (&GetChild<KaxTagMultiEntityURL>(ent))) =
+      "MultiEntityURL";
+    *(static_cast<EbmlString *>
+      (&GetChild<KaxTagMultiEntityEmail>(ent))) =
+      "MultiEntityEmail";
+    *(static_cast<EbmlUnicodeString *>
+      (&GetChild<KaxTagMultiEntityAddress>(ent))) =
+      L"MultiEntityAddress";
+
+     KaxTagMultiIdentifier &mident = GetChild<KaxTagMultiIdentifier>(tag);
+     KaxTagIdentifier &ident = GetChild<KaxTagIdentifier>(mident);
+     *(static_cast<EbmlUInteger *>
+       (&GetChild<KaxTagMultiIdentifierType>(ident))) =
+       5;
+     KaxTagMultiIdentifierBinary &ibin =
+       GetChild<KaxTagMultiIdentifierBinary>(ident);
+     ibin.CopyBuffer((binary *)"hallo", 5);
+     *(static_cast<EbmlUnicodeString *>
+       (&GetChild<KaxTagMultiIdentifierString>(ident))) =
+       L"MultiIdentifierString";
+
+    KaxTagMultiLegal &mlegal = GetChild<KaxTagMultiLegal>(tag);
+    KaxTagLegal &legal = GetChild<KaxTagLegal>(mlegal);
+    *(static_cast<EbmlUInteger *>
+      (&GetChild<KaxTagMultiLegalType>(legal))) =
+      3;
+    *(static_cast<EbmlString *>
+      (&GetChild<KaxTagMultiLegalURL>(legal))) =
+      "MultiLegalURL";
+    *(static_cast<EbmlUnicodeString *>
+      (&GetChild<KaxTagMultiLegalAddress>(legal))) =
+      L"MultiLegalAddress";
+
+    KaxTagMultiTitle &mtit = GetChild<KaxTagMultiTitle>(tag);
+    KaxTagTitle &tit = GetChild<KaxTagTitle>(mtit);
+    *(static_cast<EbmlUInteger *>
+      (&GetChild<KaxTagMultiTitleType>(tit))) =
+      2;
+    *(static_cast<EbmlUnicodeString *>
+      (&GetChild<KaxTagMultiTitleName>(tit))) =
+      L"MultiTitleName";
+    *(static_cast<EbmlUnicodeString *>
+      (&GetChild<KaxTagMultiTitleSubTitle>(tit))) =
+      L"MultiTitleSubTitle";
+    *(static_cast<EbmlUnicodeString *>
+      (&GetChild<KaxTagMultiTitleEdition>(tit))) =
+      L"MultiTitleEdition";
+    *(static_cast<EbmlUnicodeString *>
+      (&GetChild<KaxTagMultiTitleAddress>(tit))) =
+      L"MultiTitleAddress";
+    *(static_cast<EbmlString *>
+      (&GetChild<KaxTagMultiTitleURL>(tit))) =
+      "MultiTitleURL";
+    *(static_cast<EbmlString *>
+      (&GetChild<KaxTagMultiTitleEmail>(tit))) =
+      "MultiTitleEmail";
+    *(static_cast<EbmlString *>
+      (&GetChild<KaxTagMultiTitleLanguage>(tit))) =
+      "MultiTitleLanguage";
+
+    KaxTagSimple &stag_l1 = GetChild<KaxTagSimple>(tag);
+    *(static_cast<EbmlUnicodeString *>(&GetChild<KaxTagName>(stag_l1))) =
+      L"SIMPLE_TAG_NAME_LEVEL1_1";
+    *(static_cast<EbmlUnicodeString *>(&GetChild<KaxTagString>(stag_l1))) =
+      L"SIMPLE_TAG_STRING_LEVEL1_1";
+    KaxTagSimple &stag_l1_2 = GetNextChild<KaxTagSimple>(tag, stag_l1);
+    *(static_cast<EbmlUnicodeString *>(&GetChild<KaxTagName>(stag_l1_2))) =
+      L"SIMPLE_TAG_NAME_LEVEL1_2";
+    KaxTagBinary &tbin = GetChild<KaxTagBinary>(stag_l1_2);
+    tbin.CopyBuffer((binary *)"SIMPLE_TAG_BINARY_LEVEL1_2",
+                    strlen("SIMPLE_TAG_BINARY_LEVEL1_2"));
+    KaxTagSimple &stag_l2 = GetChild<KaxTagSimple>(stag_l1);
+    *(static_cast<EbmlUnicodeString *>(&GetChild<KaxTagName>(stag_l2))) =
+      L"SIMPLE_TAG_NAME_LEVEL2";
+    *(static_cast<EbmlUnicodeString *>(&GetChild<KaxTagString>(stag_l2))) =
+      L"SIMPLE_TAG_STRING_LEVEL2";
+    KaxTagSimple &stag_l3 = GetChild<KaxTagSimple>(stag_l2);
+    *(static_cast<EbmlUnicodeString *>(&GetChild<KaxTagName>(stag_l3))) =
+      L"SIMPLE_TAG_NAME_LEVEL3";
+    *(static_cast<EbmlUnicodeString *>(&GetChild<KaxTagString>(stag_l3))) =
+      L"SIMPLE_TAG_STRING_LEVEL3";
+    
+    tags.Render(out);
+
+  } catch (...) {
+    printf("exception\n");
+  }
+
+  return 0;
+}
diff --git a/test/test.proj b/test/test.proj
new file mode 100644 (file)
index 0000000..8af3a9a
--- /dev/null
@@ -0,0 +1 @@
+#include "*/*.proj"
diff --git a/test/utf8/test5.cpp b/test/utf8/test5.cpp
new file mode 100644 (file)
index 0000000..91d6371
--- /dev/null
@@ -0,0 +1,90 @@
+/****************************************************************************
+** libmatroska : parse Matroska files, see http://www.matroska.org/
+**
+** <file/class description>
+**
+** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
+**
+** This file is part of libmatroska.
+**
+** This file may be distributed under the terms of the Q Public License
+** as defined by Trolltech AS of Norway and appearing in the file
+** LICENSE.QPL included in the packaging of this file.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** Licensees holding an other license may use this file in accordance with 
+** the Agreement provided with the Software.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.matroska.org/license/qpl/ for QPL licensing information.
+** See http://www.matroska.org/license/gpl/ for GPL licensing information.
+**
+** Contact license@matroska.org if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*!
+    \file
+    \version \$Id: test5.cpp 1078 2005-03-03 13:13:04Z robux4 $
+    \brief Test encoding and decoding UTF8 characters
+    \author Steve Lhomme     <robux4 @ users.sf.net>
+*/
+
+#include <cstdio>
+
+#include <string>
+#include "TruncString.hpp"
+#include "FileName.hpp"
+#include "StdIOCallback.hpp"
+
+using namespace LIBMATROSKA_NAMESPACE;
+using namespace std;
+
+/*!
+       \see http://www.unicode.org/charts/
+       \see http://www-106.ibm.com/developerworks/linux/library/l-linuni.html
+       \see http://www.cl.cam.ac.uk/~mgk25/unicode.html#libs
+       \see ftp://ftp.ilog.fr/pub/Users/haible/utf8/Unicode-HOWTO-6.html#ss6.1
+*/
+int main(void)
+{
+    string test1 = "lhomme";
+    string test2 = "Stève"; // Supposed to be a UTF8 string
+//    test2[2] = 0x0152; // oe mixed in one, upper case
+
+//    const wchar_t *toto = test2.c_str();
+
+    printf("%lc  = 0x%04X\n",test2[2],test2[2]);
+//    wprintf(L"0x%04X\n",toto[2]);
+
+    StdIOCallback Test_file("test.utf8",StdIOCallback::MODE_CREATE);
+//    Test_file.write(toto, test2.size()*sizeof(wchar_t));
+    Test_file.write(test2.c_str(), test2.size());
+
+    TruncString8 testUTF8_1(10);
+    testUTF8_1 = test1.c_str();
+
+    TruncString8 testUTF8_2(10);
+    testUTF8_2 = test2.c_str(); 
+    // in UTF8 0xE8=1110-1000 should become 110.00110-10.001000=0xC6 0x88
+
+    FileName test01(64);
+    std::string str="..toto..txt  éhé";
+    test01 = str;
+    FileName::name_level bType = test01.Test();
+    test01.MakeRelaxed();
+    bType = test01.Test();
+    test01.MakeSafe();
+    bType = test01.Test();
+
+    const char *tst = (char*)test01.buffer();
+
+    return 0;
+}
diff --git a/test/utf8/utf8.proj b/test/utf8/utf8.proj
new file mode 100644 (file)
index 0000000..6245d7e
--- /dev/null
@@ -0,0 +1,6 @@
+#include "*/*.proj"
+
+CON utf8-test5
+{
+  SOURCE test5.cpp
+}