├── .gitignore ├── AUTHORS ├── COPYING ├── ChangeLog ├── INSTALL ├── NEWS ├── README ├── README.Windows.txt ├── Rakefile ├── TODO ├── ac ├── ax_boost_base.m4 ├── ax_boost_check_headers.m4 ├── ax_boost_filesystem.m4 ├── ax_boost_regex.m4 ├── ax_boost_system.m4 ├── ax_docbook.m4 ├── boost.m4 ├── build_timestamp_in_version.m4 ├── bz.m4 ├── c++11.m4 ├── check_version.m4 ├── curl.m4 ├── debugging_profiling.m4 ├── ebml.m4 ├── ebml_matroska_internal.m4 ├── endianess.m4 ├── etags.m4 ├── expat.m4 ├── extra_inc_lib.m4 ├── flac.m4 ├── gcc_version.m4 ├── gnurx.m4 ├── guide_translations.m4 ├── iconv.m4 ├── initialization.m4 ├── inttypes.m4 ├── lzo.m4 ├── magic.m4 ├── manpages_translations.m4 ├── matroska.m4 ├── mingw.m4 ├── nl_langinfo.m4 ├── ogg.m4 ├── pandoc.m4 ├── pkg.m4 ├── po4a.m4 ├── posix_fadvise.m4 ├── precompiled_headers.m4 ├── pri64d.m4 ├── qt4.m4 ├── tiocgwinsz.m4 ├── translations.m4 ├── vorbis.m4 ├── wxwidgets.m4 └── zlib.m4 ├── autogen.sh ├── build-config.in ├── config.windows.h ├── configure.in ├── contrib ├── fedora-core.spec ├── opensuse-12.spec └── parse_iso.awk ├── debian-upstream ├── changelog ├── compat ├── control ├── copyright ├── docs ├── mkvtoolnix-gui.desktop ├── mkvtoolnix-gui.install ├── mkvtoolnix-gui.manpages ├── mkvtoolnix-gui.menu ├── mkvtoolnix-gui.postinst ├── mkvtoolnix-gui.prerm ├── mkvtoolnix.examples ├── mkvtoolnix.install ├── mkvtoolnix.links ├── mkvtoolnix.postinst ├── mkvtoolnix.prerm ├── rules ├── source │ └── format └── watch ├── doc ├── Doxyfile ├── Rakefile ├── development.html ├── development.md ├── guide │ ├── Rakefile │ ├── en │ │ ├── images │ │ │ ├── addingremovingattachments.gif │ │ │ ├── addremovefiles.gif │ │ │ ├── attachmentoptions.gif │ │ │ ├── audiotrackoptions.gif │ │ │ ├── chaptereditor.gif │ │ │ ├── generaltrackoptions.gif │ │ │ ├── jobmanager.gif │ │ │ ├── movietitle.gif │ │ │ ├── muxingwindow.gif │ │ │ ├── selectmkvmergeexecutable.gif │ │ │ ├── splitting.gif │ │ │ ├── textsubtitlestrackoptions.gif │ │ │ ├── trackselection.gif │ │ │ └── videotrackoptions.gif │ │ ├── mkvmerge-gui.hhc │ │ ├── mkvmerge-gui.hhp │ │ └── mkvmerge-gui.html │ └── zh_CN │ │ ├── images │ │ ├── addingremovingattachments.gif │ │ ├── addremovefiles.gif │ │ ├── attachmentoptions.gif │ │ ├── audiotrackoptions.gif │ │ ├── chaptereditor.gif │ │ ├── generaltrackoptions.gif │ │ ├── jobmanager.gif │ │ ├── movietitle.gif │ │ ├── muxingwindow.gif │ │ ├── selectmkvmergeexecutable.gif │ │ ├── splitting.gif │ │ ├── textsubtitlestrackoptions.gif │ │ ├── trackselection.gif │ │ └── videotrackoptions.gif │ │ ├── mkvmerge-gui.hhc │ │ ├── mkvmerge-gui.hhp │ │ └── mkvmerge-gui.html ├── man │ ├── Rakefile │ ├── ja │ │ ├── mkvextract.1 │ │ ├── mkvinfo.1 │ │ ├── mkvmerge.1 │ │ ├── mkvpropedit.1 │ │ └── mmg.1 │ ├── mkvextract.1 │ ├── mkvextract.xml │ ├── mkvinfo.1 │ ├── mkvinfo.xml │ ├── mkvmerge.1 │ ├── mkvmerge.xml │ ├── mkvpropedit.1 │ ├── mkvpropedit.xml │ ├── mmg.1 │ ├── mmg.xml │ ├── nl │ │ ├── mkvextract.1 │ │ ├── mkvinfo.1 │ │ ├── mkvmerge.1 │ │ ├── mkvpropedit.1 │ │ └── mmg.1 │ ├── po4a │ │ ├── po │ │ │ ├── ja.po │ │ │ ├── nl.po │ │ │ └── zh_CN.po │ │ └── po4a.cfg │ └── zh_CN │ │ ├── mkvextract.1 │ │ ├── mkvinfo.1 │ │ ├── mkvmerge.1 │ │ ├── mkvpropedit.1 │ │ └── mmg.1 ├── pandoc-template.html ├── pandoc.css └── stylesheets │ ├── cmdsynopsis.xsl │ ├── docbook-to-html.xsl │ ├── head.xsl │ ├── mkvtoolnix-doc.css │ └── toc.xsl ├── drake ├── examples ├── example-chapters-1.xml ├── example-chapters-2.xml ├── example-cue-sheet-1.cue ├── example-segmentinfo-1.xml ├── example-tags-2.xml ├── example-timecodes-v1.txt ├── example-timecodes-v2.txt ├── matroskachapters.dtd ├── matroskasegmentinfo.dtd ├── matroskatags.dtd └── stylesheets │ ├── chapters-to-cuesheet.xsl │ └── chapters-to-shnsplit.xsl ├── install-sh ├── installer ├── EnvVarUpdate.nsh ├── external_links.ini ├── header_image.bmp ├── mkvtoolnix-unicode.nsi └── welcome_finish_page.bmp ├── lib ├── Rakefile ├── avilib-0.6.10 │ ├── README.avilib │ ├── Rakefile │ ├── avidump.c │ ├── avilib.c │ ├── avilib.h │ ├── avilib.proj │ ├── avimisc.c │ ├── xio.cpp │ └── xio.h ├── boost │ ├── LICENSE_1_0.txt │ └── utf8_codecvt_facet │ │ └── utf8_codecvt_facet.cpp ├── lib.proj ├── libebml │ ├── ChangeLog │ ├── LICENSE.LGPL │ ├── VERSION │ ├── debian │ │ ├── changelog │ │ ├── control │ │ ├── copyright │ │ ├── dirs │ │ ├── docs │ │ ├── libebml-dev.dirs │ │ ├── libebml-dev.files │ │ └── rules │ ├── ebml │ │ ├── Debug.h │ │ ├── EbmlBinary.h │ │ ├── EbmlConfig.h │ │ ├── EbmlContexts.h │ │ ├── EbmlCrc32.h │ │ ├── EbmlDate.h │ │ ├── EbmlDummy.h │ │ ├── EbmlElement.h │ │ ├── EbmlEndian.h │ │ ├── EbmlFloat.h │ │ ├── EbmlHead.h │ │ ├── EbmlId.h │ │ ├── EbmlMaster.h │ │ ├── EbmlSInteger.h │ │ ├── EbmlStream.h │ │ ├── EbmlString.h │ │ ├── EbmlSubHead.h │ │ ├── EbmlTypes.h │ │ ├── EbmlUInteger.h │ │ ├── EbmlUnicodeString.h │ │ ├── EbmlVersion.h │ │ ├── EbmlVoid.h │ │ ├── IOCallback.h │ │ ├── MemIOCallback.h │ │ ├── StdIOCallback.h │ │ └── c │ │ │ └── libebml_t.h │ ├── libebml.proj │ ├── make │ │ ├── linux │ │ │ ├── fedora-core.spec │ │ │ └── suse.spec │ │ ├── mingw32 │ │ │ └── libebml.dev │ │ ├── vc6 │ │ │ ├── lib │ │ │ │ └── static │ │ │ │ │ └── libebml.dsp │ │ │ └── libebml.dsw │ │ └── vc7 │ │ │ ├── dll │ │ │ └── libebmldll.v71.vcproj │ │ │ └── lib │ │ │ ├── libebml.v71.vcproj │ │ │ └── libebml.vcproj │ └── src │ │ ├── Debug.cpp │ │ ├── EbmlBinary.cpp │ │ ├── EbmlContexts.cpp │ │ ├── EbmlCrc32.cpp │ │ ├── EbmlDate.cpp │ │ ├── EbmlDummy.cpp │ │ ├── EbmlElement.cpp │ │ ├── EbmlFloat.cpp │ │ ├── EbmlHead.cpp │ │ ├── EbmlMaster.cpp │ │ ├── EbmlSInteger.cpp │ │ ├── EbmlStream.cpp │ │ ├── EbmlString.cpp │ │ ├── EbmlSubHead.cpp │ │ ├── EbmlUInteger.cpp │ │ ├── EbmlUnicodeString.cpp │ │ ├── EbmlVersion.cpp │ │ ├── EbmlVoid.cpp │ │ ├── IOCallback.cpp │ │ ├── MemIOCallback.cpp │ │ ├── StdIOCallback.cpp │ │ └── platform │ │ └── win32 │ │ ├── WinIOCallback.cpp │ │ └── WinIOCallback.h ├── libmatroska │ ├── ChangeLog │ ├── LICENSE.LGPL │ ├── VERSION │ ├── debian │ │ ├── changelog │ │ ├── control │ │ ├── copyright │ │ ├── dirs │ │ ├── docs │ │ ├── libmatroska-dev.dirs │ │ ├── libmatroska-dev.files │ │ └── rules │ ├── libmatroska.proj │ ├── make │ │ ├── Doxyfile │ │ ├── cygwin │ │ │ └── Makefile.rule │ │ ├── linux │ │ │ ├── Makefile.rule │ │ │ ├── check_ids │ │ │ ├── fedora-core.spec │ │ │ └── suse.spec │ │ ├── macosx │ │ │ └── macosx.pbproj │ │ │ │ └── project.pbxproj │ │ ├── makedoc.bat │ │ ├── makedoc.sh │ │ ├── mingw32 │ │ │ ├── libmatroska.dev │ │ │ └── test │ │ │ │ ├── test6.dev │ │ │ │ └── test8.dev │ │ ├── vc6 │ │ │ ├── lib │ │ │ │ └── static │ │ │ │ │ └── libmatroska.dsp │ │ │ ├── test │ │ │ │ ├── test0.dsp │ │ │ │ ├── test00.dsp │ │ │ │ ├── test1.dsp │ │ │ │ ├── test2.dsp │ │ │ │ ├── test3.dsp │ │ │ │ ├── test4.dsp │ │ │ │ ├── test5.dsp │ │ │ │ ├── test6.dsp │ │ │ │ ├── test6c.dsp │ │ │ │ ├── test7.dsp │ │ │ │ ├── test8.dsp │ │ │ │ ├── test8c.dsp │ │ │ │ └── test9.dsp │ │ │ └── vc6.dsw │ │ └── vc7 │ │ │ ├── lib │ │ │ ├── dll │ │ │ │ └── libmatroskadll.v71.vcproj │ │ │ └── static │ │ │ │ ├── libmatroska.v71.vcproj │ │ │ │ └── libmatroska.vcproj │ │ │ ├── test │ │ │ ├── test0.vcproj │ │ │ ├── test00.vcproj │ │ │ ├── test6.vcproj │ │ │ ├── test8.vcproj │ │ │ └── test9.vcproj │ │ │ └── vc7.sln │ ├── matroska │ │ ├── FileKax.h │ │ ├── KaxAttached.h │ │ ├── KaxAttachments.h │ │ ├── KaxBlock.h │ │ ├── KaxBlockData.h │ │ ├── KaxChapters.h │ │ ├── KaxCluster.h │ │ ├── KaxClusterData.h │ │ ├── KaxConfig.h │ │ ├── KaxContentEncoding.h │ │ ├── KaxContexts.h │ │ ├── KaxCues.h │ │ ├── KaxCuesData.h │ │ ├── KaxDefines.h │ │ ├── KaxInfo.h │ │ ├── KaxInfoData.h │ │ ├── KaxSeekHead.h │ │ ├── KaxSegment.h │ │ ├── KaxSemantic.h │ │ ├── KaxTag.h │ │ ├── KaxTags.h │ │ ├── KaxTrackAudio.h │ │ ├── KaxTrackEntryData.h │ │ ├── KaxTrackVideo.h │ │ ├── KaxTracks.h │ │ ├── KaxTypes.h │ │ ├── KaxVersion.h │ │ └── c │ │ │ ├── libmatroska.h │ │ │ └── libmatroska_t.h │ ├── src │ │ ├── FileKax.cpp │ │ ├── KaxAttached.cpp │ │ ├── KaxAttachments.cpp │ │ ├── KaxBlock.cpp │ │ ├── KaxBlockData.cpp │ │ ├── KaxCluster.cpp │ │ ├── KaxContexts.cpp │ │ ├── KaxCues.cpp │ │ ├── KaxCuesData.cpp │ │ ├── KaxInfoData.cpp │ │ ├── KaxSeekHead.cpp │ │ ├── KaxSegment.cpp │ │ ├── KaxSemantic.cpp │ │ ├── KaxTracks.cpp │ │ └── KaxVersion.cpp │ └── test │ │ ├── ebml │ │ ├── ebml.proj │ │ ├── test0.cpp │ │ └── test00.cpp │ │ ├── mux │ │ ├── mux.proj │ │ ├── test6.cpp │ │ └── test8.cpp │ │ ├── tags │ │ ├── tags.proj │ │ └── test9.cpp │ │ ├── test.proj │ │ └── utf8 │ │ ├── test5.cpp │ │ └── utf8.proj ├── librmff │ ├── COPYING │ ├── README │ ├── Rakefile │ ├── librmff.h │ ├── librmff.proj │ ├── mb_file_io.c │ ├── mb_file_io.h │ └── rmff.c └── utf8-cpp │ ├── doc │ ├── ReleaseNotes │ └── utf8cpp.html │ ├── source │ ├── utf8.h │ └── utf8 │ │ ├── checked.h │ │ ├── core.h │ │ └── unchecked.h │ └── utf8-cpp.proj ├── mkinstalldirs ├── mkvtoolnix.proj ├── mkvtoolnix.sln ├── po ├── de.po ├── es.po ├── fr.po ├── it.po ├── ja.po ├── lt.po ├── nl.po ├── ru.po ├── tr.po ├── uk.po ├── zh_CN.po └── zh_TW.po ├── rake.d ├── application.rb ├── config.rb ├── extensions.rb ├── helpers.rb ├── library.rb ├── target.rb └── vendor │ ├── comp_tree-1.0.1 │ ├── CHANGES.rdoc │ ├── README.rdoc │ └── lib │ │ ├── comp_tree.rb │ │ └── comp_tree │ │ ├── algorithm.rb │ │ ├── comp_tree.rb │ │ ├── driver.rb │ │ ├── error.rb │ │ ├── node.rb │ │ └── queue │ │ ├── queue.rb │ │ ├── queue_18.rb │ │ └── queue_19.rb │ └── drake-0.8.7.0.2.4 │ ├── MIT-LICENSE │ ├── README │ ├── bin │ └── drake │ └── lib │ ├── rake.rb │ └── rake │ ├── alt_system.rb │ ├── classic_namespace.rb │ ├── clean.rb │ ├── contrib │ ├── compositepublisher.rb │ ├── ftptools.rb │ ├── publisher.rb │ ├── rubyforgepublisher.rb │ ├── sshpublisher.rb │ └── sys.rb │ ├── gempackagetask.rb │ ├── loaders │ └── makefile.rb │ ├── packagetask.rb │ ├── parallel.rb │ ├── rake_test_loader.rb │ ├── rdoctask.rb │ ├── ruby182_test_unit_fix.rb │ ├── runtest.rb │ ├── tasklib.rb │ ├── testtask.rb │ └── win32.rb ├── share ├── desktop │ ├── mkvinfo.desktop │ └── mkvmergeGUI.desktop ├── icons │ ├── 32x32 │ │ ├── mkvinfo.png │ │ ├── mkvinfo.xpm │ │ ├── mkvmergeGUI.png │ │ └── mkvmergeGUI.xpm │ ├── 64x64 │ │ ├── mkvinfo.png │ │ ├── mkvinfo.xpm │ │ ├── mkvmergeGUI.png │ │ └── mkvmergeGUI.xpm │ └── windows │ │ ├── mkvinfo.ico │ │ └── mkvmergeGUI.ico └── mime │ └── mkvtoolnix.xml ├── src ├── Rakefile ├── common │ ├── Rakefile │ ├── aac.cpp │ ├── aac.h │ ├── ac3.cpp │ ├── ac3.h │ ├── at_scope_exit.h │ ├── base64.cpp │ ├── base64.h │ ├── bit_cursor.h │ ├── bitvalue.cpp │ ├── bitvalue.h │ ├── bswap.h │ ├── byte_buffer.h │ ├── chapters │ │ ├── Rakefile │ │ ├── chapters.cpp │ │ ├── chapters.h │ │ ├── cue_parser.cpp │ │ ├── writer.cpp │ │ └── xml_parser.cpp │ ├── checksums.cpp │ ├── checksums.h │ ├── cli_parser.cpp │ ├── cli_parser.h │ ├── clpi.cpp │ ├── clpi.h │ ├── command_line.cpp │ ├── command_line.h │ ├── common.cpp │ ├── common.h │ ├── common_pch.h │ ├── compression.cpp │ ├── compression.h │ ├── corepicture.h │ ├── curl.cpp │ ├── curl.h │ ├── debugging.cpp │ ├── debugging.h │ ├── dirac.cpp │ ├── dirac.h │ ├── dts.cpp │ ├── dts.h │ ├── ebml.cpp │ ├── ebml.h │ ├── endian.cpp │ ├── endian.h │ ├── error.h │ ├── extern_data.cpp │ ├── extern_data.h │ ├── file_types.cpp │ ├── file_types.h │ ├── flac.cpp │ ├── flac.h │ ├── fs_sys_helpers.cpp │ ├── fs_sys_helpers.h │ ├── hacks.cpp │ ├── hacks.h │ ├── hdsub.h │ ├── id3.cpp │ ├── id3.h │ ├── iso639.cpp │ ├── iso639.h │ ├── ivf.cpp │ ├── ivf.h │ ├── kate.cpp │ ├── kate.h │ ├── kax_analyzer.cpp │ ├── kax_analyzer.h │ ├── kax_file.cpp │ ├── kax_file.h │ ├── locale.cpp │ ├── locale.h │ ├── locale_string.cpp │ ├── locale_string.h │ ├── math.cpp │ ├── math.h │ ├── matroska.h │ ├── memory.cpp │ ├── memory.h │ ├── mm_io.cpp │ ├── mm_io.h │ ├── mm_io_win.cpp │ ├── mm_multi_file_io.cpp │ ├── mm_multi_file_io.h │ ├── mm_read_cache_io.cpp │ ├── mm_read_cache_io.h │ ├── mm_write_cache_io.cpp │ ├── mm_write_cache_io.h │ ├── mp3.cpp │ ├── mp3.h │ ├── mpeg1_2.cpp │ ├── mpeg1_2.h │ ├── mpeg4_p10.cpp │ ├── mpeg4_p10.h │ ├── mpeg4_p2.cpp │ ├── mpeg4_p2.h │ ├── ogmstreams.h │ ├── os.h │ ├── output.cpp │ ├── output.h │ ├── pgssup.h │ ├── property_element.cpp │ ├── property_element.h │ ├── qt.h │ ├── random.cpp │ ├── random.h │ ├── samples_timecode_conv.h │ ├── segment_tracks.cpp │ ├── segment_tracks.h │ ├── segmentinfo.cpp │ ├── segmentinfo.h │ ├── segmentinfo_parser.cpp │ ├── smart_pointers.h │ ├── stereo_mode.cpp │ ├── stereo_mode.h │ ├── strings │ │ ├── Rakefile │ │ ├── editing.cpp │ │ ├── editing.h │ │ ├── formatting.cpp │ │ ├── formatting.h │ │ ├── parsing.cpp │ │ ├── parsing.h │ │ ├── utf8.cpp │ │ └── utf8.h │ ├── tags │ │ ├── Rakefile │ │ ├── parser.cpp │ │ ├── parser.h │ │ ├── tags.cpp │ │ ├── tags.h │ │ ├── writer.cpp │ │ └── writer.h │ ├── terminal.cpp │ ├── terminal.h │ ├── theora.cpp │ ├── theora.h │ ├── translation.cpp │ ├── translation.h │ ├── truehd.cpp │ ├── truehd.h │ ├── tta.h │ ├── unique_numbers.cpp │ ├── unique_numbers.h │ ├── utf8_codecvt_facet.cpp │ ├── utf8_codecvt_facet.h │ ├── vc1.cpp │ ├── vc1.h │ ├── version.cpp │ ├── version.h │ ├── vint.cpp │ ├── vint.h │ ├── wavpack.cpp │ ├── wavpack.h │ ├── webm.cpp │ ├── webm.h │ ├── win_itaskbarlist3.cpp │ ├── win_itaskbarlist3.h │ ├── wx.h │ └── xml │ │ ├── Rakefile │ │ ├── element_mapping.cpp │ │ ├── element_mapping.h │ │ ├── element_parser.cpp │ │ ├── element_parser.h │ │ ├── element_writer.cpp │ │ ├── element_writer.h │ │ ├── xml.cpp │ │ └── xml.h ├── extract │ ├── Rakefile │ ├── attachments.cpp │ ├── chapters.cpp │ ├── cuesheets.cpp │ ├── extract_cli_parser.cpp │ ├── extract_cli_parser.h │ ├── manifest.xml │ ├── mkvextract.cpp │ ├── mkvextract.h │ ├── options.cpp │ ├── options.h │ ├── resources.rc │ ├── tags.cpp │ ├── timecodes_v2.cpp │ ├── track_spec.cpp │ ├── track_spec.h │ ├── tracks.cpp │ ├── xtr_aac.cpp │ ├── xtr_aac.h │ ├── xtr_avc.cpp │ ├── xtr_avc.h │ ├── xtr_avi.cpp │ ├── xtr_avi.h │ ├── xtr_base.cpp │ ├── xtr_base.h │ ├── xtr_cpic.cpp │ ├── xtr_cpic.h │ ├── xtr_ivf.cpp │ ├── xtr_ivf.h │ ├── xtr_mpeg1_2.cpp │ ├── xtr_mpeg1_2.h │ ├── xtr_ogg.cpp │ ├── xtr_ogg.h │ ├── xtr_pgs.cpp │ ├── xtr_pgs.h │ ├── xtr_rmff.cpp │ ├── xtr_rmff.h │ ├── xtr_textsubs.cpp │ ├── xtr_textsubs.h │ ├── xtr_tta.cpp │ ├── xtr_tta.h │ ├── xtr_vobsub.cpp │ ├── xtr_vobsub.h │ ├── xtr_wav.cpp │ └── xtr_wav.h ├── info │ ├── Rakefile │ ├── console_ui.cpp │ ├── info_cli_parser.cpp │ ├── info_cli_parser.h │ ├── manifest.xml │ ├── mkvinfo.cpp │ ├── mkvinfo.h │ ├── options.cpp │ ├── options.h │ ├── qt_ui.cpp │ ├── qt_ui.h │ ├── resources.rc │ ├── rightclick_tree_widget.h │ ├── ui │ │ └── mainwindow.ui │ ├── wxwidgets_ui.cpp │ └── wxwidgets_ui.h ├── input │ ├── Rakefile │ ├── qtmp4_atoms.h │ ├── r_aac.cpp │ ├── r_aac.h │ ├── r_aac_adif.cpp │ ├── r_aac_adif.h │ ├── r_ac3.cpp │ ├── r_ac3.h │ ├── r_asf.cpp │ ├── r_asf.h │ ├── r_avc.cpp │ ├── r_avc.h │ ├── r_avi.cpp │ ├── r_avi.h │ ├── r_cdxa.cpp │ ├── r_cdxa.h │ ├── r_corepicture.cpp │ ├── r_corepicture.h │ ├── r_dirac.cpp │ ├── r_dirac.h │ ├── r_dts.cpp │ ├── r_dts.h │ ├── r_dv.cpp │ ├── r_dv.h │ ├── r_flac.cpp │ ├── r_flac.h │ ├── r_flv.cpp │ ├── r_flv.h │ ├── r_hdsub.cpp │ ├── r_hdsub.h │ ├── r_ivf.cpp │ ├── r_ivf.h │ ├── r_matroska.cpp │ ├── r_matroska.h │ ├── r_mp3.cpp │ ├── r_mp3.h │ ├── r_mpeg_es.cpp │ ├── r_mpeg_es.h │ ├── r_mpeg_ps.cpp │ ├── r_mpeg_ps.h │ ├── r_mpeg_ts.cpp │ ├── r_mpeg_ts.h │ ├── r_ogm.cpp │ ├── r_ogm.h │ ├── r_ogm_flac.cpp │ ├── r_ogm_flac.h │ ├── r_pgssup.cpp │ ├── r_pgssup.h │ ├── r_qtmp4.cpp │ ├── r_qtmp4.h │ ├── r_real.cpp │ ├── r_real.h │ ├── r_srt.cpp │ ├── r_srt.h │ ├── r_ssa.cpp │ ├── r_ssa.h │ ├── r_truehd.cpp │ ├── r_truehd.h │ ├── r_tta.cpp │ ├── r_tta.h │ ├── r_usf.cpp │ ├── r_usf.h │ ├── r_vc1.cpp │ ├── r_vc1.h │ ├── r_vobbtn.cpp │ ├── r_vobbtn.h │ ├── r_vobsub.cpp │ ├── r_vobsub.h │ ├── r_wav.cpp │ ├── r_wav.h │ ├── r_wavpack.cpp │ ├── r_wavpack.h │ ├── subtitles.cpp │ └── subtitles.h ├── merge │ ├── Rakefile │ ├── cluster_helper.cpp │ ├── cluster_helper.h │ ├── debugging.cpp │ ├── debugging.h │ ├── item_selector.h │ ├── libmatroska_extensions.cpp │ ├── libmatroska_extensions.h │ ├── manifest.xml │ ├── mkvmerge.cpp │ ├── mkvmerge.h │ ├── output_control.cpp │ ├── output_control.h │ ├── packet.h │ ├── packet_extensions.h │ ├── pr_generic.cpp │ ├── pr_generic.h │ ├── resources.rc │ ├── timecode_factory.cpp │ ├── timecode_factory.h │ ├── webm.cpp │ └── webm.h ├── mmg-qt │ ├── Makefile │ ├── capabilities_reader.cpp │ ├── capabilities_reader.h │ ├── file_prober.cpp │ ├── file_prober.h │ ├── forms │ │ ├── chapter_editor_window.ui │ │ ├── main_window.ui │ │ └── settings_dialog.ui │ ├── input_file.cpp │ ├── input_file.h │ ├── main_window.cpp │ ├── main_window.h │ ├── mmg_qt.cpp │ ├── mmg_qt.h │ └── tab_input.cpp ├── mmg │ ├── Rakefile │ ├── cli_options_dlg.cpp │ ├── cli_options_dlg.h │ ├── header_editor │ │ ├── Rakefile │ │ ├── ascii_string_value_page.cpp │ │ ├── ascii_string_value_page.h │ │ ├── bit_value_page.cpp │ │ ├── bit_value_page.h │ │ ├── bool_value_page.cpp │ │ ├── bool_value_page.h │ │ ├── empty_page.cpp │ │ ├── empty_page.h │ │ ├── float_value_page.cpp │ │ ├── float_value_page.h │ │ ├── frame.cpp │ │ ├── frame.h │ │ ├── language_value_page.cpp │ │ ├── language_value_page.h │ │ ├── page_base.cpp │ │ ├── page_base.h │ │ ├── string_value_page.cpp │ │ ├── string_value_page.h │ │ ├── top_level_page.cpp │ │ ├── top_level_page.h │ │ ├── track_type_page.cpp │ │ ├── track_type_page.h │ │ ├── unsigned_integer_value_page.cpp │ │ ├── unsigned_integer_value_page.h │ │ ├── value_page.cpp │ │ └── value_page.h │ ├── helpers.cpp │ ├── jobs.cpp │ ├── jobs.h │ ├── manifest.xml │ ├── message_dialog.cpp │ ├── message_dialog.h │ ├── mmg.cpp │ ├── mmg.h │ ├── mmg_dialog.cpp │ ├── mmg_dialog.h │ ├── mmg_dialog_msw.cpp │ ├── mmg_options.cpp │ ├── mux_dialog.cpp │ ├── mux_dialog.h │ ├── options │ │ ├── Rakefile │ │ ├── chapters.cpp │ │ ├── chapters.h │ │ ├── dialog.cpp │ │ ├── dialog.h │ │ ├── languages.cpp │ │ ├── languages.h │ │ ├── mkvmerge.cpp │ │ ├── mkvmerge.h │ │ ├── mmg.cpp │ │ ├── mmg.h │ │ ├── tab_base.cpp │ │ └── tab_base.h │ ├── resources.rc │ ├── show_text_dlg.cpp │ ├── show_text_dlg.h │ ├── tabs │ │ ├── Rakefile │ │ ├── attachments.cpp │ │ ├── attachments.h │ │ ├── chapters.cpp │ │ ├── chapters.h │ │ ├── global.cpp │ │ ├── global.h │ │ ├── input.cpp │ │ ├── input.h │ │ ├── input_extra.cpp │ │ ├── input_format.cpp │ │ └── input_general.cpp │ ├── taskbar_progress.cpp │ ├── taskbar_progress.h │ ├── translation_table.cpp │ ├── translation_table.h │ ├── update_checker.cpp │ ├── update_checker.h │ ├── wx_kax_analyzer.cpp │ └── wx_kax_analyzer.h ├── mpegparser │ ├── CircBuffer.cpp │ ├── CircBuffer.h │ ├── M2VParser.cpp │ ├── M2VParser.h │ ├── MPEGVideoBuffer.cpp │ ├── MPEGVideoBuffer.h │ ├── Rakefile │ ├── Types.h │ └── mpegparser.proj ├── output │ ├── Rakefile │ ├── p_aac.cpp │ ├── p_aac.h │ ├── p_ac3.cpp │ ├── p_ac3.h │ ├── p_avc.cpp │ ├── p_avc.h │ ├── p_dirac.cpp │ ├── p_dirac.h │ ├── p_dts.cpp │ ├── p_dts.h │ ├── p_flac.cpp │ ├── p_flac.h │ ├── p_kate.cpp │ ├── p_kate.h │ ├── p_mp3.cpp │ ├── p_mp3.h │ ├── p_mpeg1_2.cpp │ ├── p_mpeg1_2.h │ ├── p_mpeg4_p10.cpp │ ├── p_mpeg4_p10.h │ ├── p_mpeg4_p2.cpp │ ├── p_mpeg4_p2.h │ ├── p_passthrough.cpp │ ├── p_passthrough.h │ ├── p_pcm.cpp │ ├── p_pcm.h │ ├── p_pgs.cpp │ ├── p_pgs.h │ ├── p_realaudio.cpp │ ├── p_realaudio.h │ ├── p_textsubs.cpp │ ├── p_textsubs.h │ ├── p_theora.cpp │ ├── p_theora.h │ ├── p_truehd.cpp │ ├── p_truehd.h │ ├── p_tta.cpp │ ├── p_tta.h │ ├── p_vc1.cpp │ ├── p_vc1.h │ ├── p_video.cpp │ ├── p_video.h │ ├── p_vobbtn.cpp │ ├── p_vobbtn.h │ ├── p_vobsub.cpp │ ├── p_vobsub.h │ ├── p_vorbis.cpp │ ├── p_vorbis.h │ ├── p_vp8.cpp │ ├── p_vp8.h │ ├── p_wavpack.cpp │ └── p_wavpack.h ├── propedit │ ├── Rakefile │ ├── change.cpp │ ├── change.h │ ├── manifest.xml │ ├── options.cpp │ ├── options.h │ ├── propedit.cpp │ ├── propedit.h │ ├── propedit_cli_parser.cpp │ ├── propedit_cli_parser.h │ ├── resources.rc │ ├── target.cpp │ └── target.h ├── scripts │ ├── README │ ├── mkvinfo2quickplot.pl │ ├── mpegtimecode.pl │ ├── scan_boost_format_strings.pl │ ├── vc1tcanalysis-csv.pl │ └── verify_format_srings_in_translations.rb ├── src.proj └── tools │ ├── Rakefile │ ├── base64tool.cpp │ ├── diracparser.cpp │ ├── ebml_validator.cpp │ ├── element_info.cpp │ ├── element_info.h │ ├── mkvgraph.pl │ ├── validator_to_kax_analyzer_dump.awk │ └── vc1parser.cpp ├── tests ├── new_test ├── results.txt ├── run.rb ├── test-001mp3.rb ├── test-002aac.rb ├── test-003ac3.rb ├── test-004aacmp4.rb ├── test-005flac.rb ├── test-006oggflac.rb ├── test-007oggvorbis.rb ├── test-008avi_divx3_mp3.rb ├── test-009realvideo_3.rb ├── test-010realvideo_4.rb ├── test-011srt.rb ├── test-012ssa.rb ├── test-013vobsubs.rb ├── test-014splitting_by_size.rb ├── test-015splitting_by_time.rb ├── test-016cuesheet.rb ├── test-017chapters.rb ├── test-018attachments.rb ├── test-019attachments2.rb ├── test-020languages.rb ├── test-021aspect_ratio.rb ├── test-022display_dimensions.rb ├── test-023no_x.rb ├── test-024sync_mp3.rb ├── test-025sync_vorbis.rb ├── test-026sync_pcm.rb ├── test-027default_track.rb ├── test-028compression.rb ├── test-029link.rb ├── test-030timecodes_v1.rb ├── test-031timecodes_v2.rb ├── test-032cues.rb ├── test-033timecode_scale.rb ├── test-034ac3misdetected_as_mp2.rb ├── test-035X_vfw_video.rb ├── test-036X_mp3.rb ├── test-037X_aac.rb ├── test-038X_ac3.rb ├── test-039X_flac.rb ├── test-041X_mp2.rb ├── test-042X_vorbis.rb ├── test-043X_wav.rb ├── test-044X_srt.rb ├── test-045X_ssa.rb ├── test-046X_chapters.rb ├── test-047X_tags.rb ├── test-048X_chapters_ogmstyle.rb ├── test-049ass.rb ├── test-050X_ass.rb ├── test-051ogm.rb ├── test-200mp2_from_mp4.rb ├── test-201avc_from_mp4_with_par.rb ├── test-202avc_from_mp4_with_par_bframes.rb ├── test-203wavpack_with_correctiondata.rb ├── test-204wavpack_without_correctiondata.rb ├── test-205X_cuesheets.rb ├── test-206X_vobsub.rb ├── test-207segmentinfo.rb ├── test-208cat_and_splitting.rb ├── test-209ac3misdeetected_as_mpeges.rb ├── test-210splitting_and_chapters.rb ├── test-211bug_segfault_reading_mp4.rb ├── test-212ssa_attachments.rb ├── test-213mp4_broken_pixel_dimensions.rb ├── test-214one_frame_avi.rb ├── test-215X_codec_extradata_avi.rb ├── test-216mp4_editlists.rb ├── test-217file_identification.rb ├── test-218theora.rb ├── test-219srt_short_timecodes.rb ├── test-220ass_with_comments_at_start.rb ├── test-221aac_lc_misdetected_as_sbr.rb ├── test-222stereo_mode.rb ├── test-223ra_cook_keyframes.rb ├── test-224dts.rb ├── test-225dts_in_wav.rb ├── test-226h264.rb ├── test-227h264_with_garbage.rb ├── test-228h264_no_idr_slices.rb ├── test-229rav3_in_rm.rb ├── test-230h264_nalu_size_len_change.rb ├── test-231X_ac3_header_removal.rb ├── test-232h264_changing_sps_pps.rb ├── test-233srt_with_coordinates.rb ├── test-234avi_aac_codecid_0x706d.rb ├── test-235wav_fmt_chunk_length.rb ├── test-236ac3_in_mov.rb ├── test-237ac3_in_wav_iec61937_mode.rb ├── test-238ac3_in_wav_acm_mode.rb ├── test-239aac_with_id3_tags.rb ├── test-240dts_hd.rb ├── test-241ac3_with_id3_tags.rb ├── test-242ogm_with_chapters.rb ├── test-243avi_with_audio_garbage.rb ├── test-244iconv_missing_character.rb ├── test-245srt_timecode_formats.rb ├── test-246theora_pixel_aspect_ratio.rb ├── test-247attachment_selection.rb ├── test-248mpeg2.rb ├── test-249mpeg2_no_codecprivate.rb ├── test-250tag_selection.rb ├── test-251vc1_truehd_eac3_from_evo.rb ├── test-252native_mpeg4.rb ├── test-254avi_with_subs.rb ├── test-255aspect_ratio_display_dimensions.rb ├── test-256cropping_stereo_mode.rb ├── test-257theora_v1_1.rb ├── test-258srt_negative_timecodes.rb ├── test-259mp4_chapters_text_trak.rb ├── test-260version_numbers.rb ├── test-261line_endings_in_text_files.rb ├── test-262level1_with_size_0.rb ├── test-263ass_missing_text_in_format.rb ├── test-264avc_es_from_lavf_with_native_codecid.rb ├── test-265mkvinfo_clusters_with_unknown_size.rb ├── test-266mkvmerge_clusters_with_unknown_size.rb ├── test-267mkvextract_clusters_with_unknown_size.rb ├── test-268X_vp8.rb ├── test-269X_vp8_without_default_duration.rb ├── test-270ivf.rb ├── test-271ogg_flac_1_1_1.rb ├── test-272dirac.rb ├── test-273pgssup.rb ├── test-274h264_in_nalus_in_avi.rb ├── test-275srt_mixed_eol_styles.rb ├── test-276h264_without_nalus_in_avi.rb ├── test-277display_dimensions_fixing_aspect_ratio_usage.rb ├── test-278turning_off_compression.rb ├── test-279packet_queue_not_empty_ivf.rb ├── test-280replace_one_byte_with_ebmlvoid.rb ├── test-281idr_after_non_idr_not_recognized.rb ├── test-282mkvextract_error_on_non_existing_file.rb ├── test-283no_video_on_avi.rb ├── test-284merging_chapter_editions_when_appending.rb ├── test-285h264_misdetected_as_mp3.rb ├── test-286vp8_in_ogg.rb ├── test-287mkvextract_exit_codes.rb ├── test-288identify_files_by_amg.rb ├── test-289wav_unsupported_formattag.rb ├── test-290seven_bytes_aac_codec_data.rb ├── test-291waveformatextensible.rb ├── test-292avi_aac_706d_privsize_huge.rb ├── test-293aac_adif_misdetected_as_video.rb ├── test-294vobsub_negative_delay.rb ├── test-295vc1_rederiving_frame_types.rb ├── test-296video_frames_duration_0.rb ├── test-297mpeg_transport_streams.rb ├── test-298ts_language.rb ├── test-299ts_ghost_entries_in_pmt.rb ├── test-300ts_dts_duplicate_timestamps.rb ├── test-301ts_pgssub.rb ├── test-302pat_pmt_only_once.rb ├── test-303mpeg_ts_eac3_pmt_descriptor_tag_0x7a.rb ├── test-304eac3_pes_private_but_no_pmt_descriptor_tag.rb ├── test-305ui_locale_en_US.rb ├── test-306ui_locale_de_DE.rb ├── test-307ui_locale_es_ES.rb ├── test-308ui_locale_fr_FR.rb ├── test-309ui_locale_it_IT.rb ├── test-310ui_locale_ja_JP.rb ├── test-311ui_locale_lt_LT.rb ├── test-312ui_locale_nl_NL.rb ├── test-313ui_locale_ru_RU.rb ├── test-314ui_locale_tr_TR.rb ├── test-315ui_locale_uk_UA.rb ├── test-316ui_locale_zh_CN.rb ├── test-317ui_locale_zh_TW.rb ├── test-318ui_locale_invalid.rb ├── test-319wav_with_pcm_detected_as_dts.rb ├── test-320ts_aac.rb └── test-321vc1_without_markers.rb └── winbuild ├── Build using VC8.bat ├── avi.vcproj ├── bh.bat ├── bh2.bat ├── common.vcproj ├── extract.vcproj ├── info.vcproj ├── input.vcproj ├── merge.vcproj ├── mmg.vcproj ├── mpegparser.vcproj ├── output.vcproj ├── propedit.vcproj ├── rmff.vcproj ├── setup_cross_compilation_env.sh ├── trim.vcproj ├── zlib.sln └── zlib.vcproj /NEWS: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/NEWS -------------------------------------------------------------------------------- /TODO: -------------------------------------------------------------------------------- 1 | # -*- mode: text; -*- 2 | 3 | The contents of this file have been moved to by bug tracking system. 4 | 5 | https://www.bunkus.org/bugzilla/buglist.cgi?query_format=advanced&product=mkvtoolnix&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_severity=enhancement 6 | 7 | Apart from that as a short reminder list for myself for the near future: 8 | 9 | - Fix bitstream AR to match container AR in video tracks 10 | 11 | - Let mmg interpret files listed on the command line as files to add 12 | -------------------------------------------------------------------------------- /ac/ax_boost_check_headers.m4: -------------------------------------------------------------------------------- 1 | AC_DEFUN([AX_BOOST_CHECK_HEADERS],[ 2 | CPPFLAGS_SAVED="$CPPFLAGS" 3 | CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" 4 | export CPPFLAGS 5 | 6 | LDFLAGS_SAVED="$LDFLAGS" 7 | LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" 8 | export LDFLAGS 9 | 10 | AC_LANG_PUSH(C++) 11 | AC_CHECK_HEADERS([$1],[$2],[$3],[$4]) 12 | AC_LANG_POP() 13 | 14 | CPPFLAGS="$CPPFLAGS_SAVED" 15 | LDFLAGS="$LDFLAGS_SAVED" 16 | ]) 17 | -------------------------------------------------------------------------------- /ac/boost.m4: -------------------------------------------------------------------------------- 1 | # boost's headers must be present. 2 | AX_BOOST_BASE([1.46.0]) 3 | 4 | # boost::system can be absend for older versions. However, the test 5 | # for boost::filesystem might fail if boost::system is not available 6 | # with newer versions. 7 | AX_BOOST_SYSTEM() 8 | 9 | # boost::filesystem must be present. 10 | AX_BOOST_FILESYSTEM() 11 | 12 | if test x"$ax_cv_boost_filesystem" != "xyes"; then 13 | AC_MSG_ERROR(The Boost Filesystem Library was not found.) 14 | fi 15 | 16 | # boost::regex must be present. 17 | AX_BOOST_REGEX() 18 | 19 | if test x"$ax_cv_boost_regex" != "xyes"; then 20 | AC_MSG_ERROR(The Boost Regex Library was not found.) 21 | fi 22 | 23 | AX_BOOST_CHECK_HEADERS([boost/property_tree/ptree.hpp],,[ 24 | AC_MSG_ERROR([Boost's property tree library is required but wasn't found]) 25 | ]) 26 | -------------------------------------------------------------------------------- /ac/build_timestamp_in_version.m4: -------------------------------------------------------------------------------- 1 | AC_ARG_WITH([build-timestamp], 2 | AC_HELP_STRING([--without-build-timestamp],[Don't include build timestamp in version information]), 3 | [ with_build_timestamp=${withval} ], 4 | [ with_build_timestamp=yes ]) 5 | 6 | if test "$with_build_timestamp" != "no" ; then 7 | AC_DEFINE(HAVE_BUILD_TIMESTAMP, [1], [Define if the build timestamp should be included in the version information]) 8 | fi 9 | -------------------------------------------------------------------------------- /ac/bz.m4: -------------------------------------------------------------------------------- 1 | dnl 2 | dnl Check for libbz2 3 | dnl 4 | AC_ARG_ENABLE([bz2], 5 | AC_HELP_STRING([--enable-bz2],[compile in support for BZ2 compression (auto)])) 6 | if test x"$enable_bz2" = x"yes" -o x"$enable_bz2" = "x"; then 7 | AC_CHECK_LIB(bz2, BZ2_bzCompress, 8 | [ BZ2_LIBS="-lbz2" 9 | bz2_found=yes ], 10 | [ bz2_found=no ],) 11 | if test "$bz2_found" = "yes"; then 12 | AC_CHECK_HEADERS(bzlib.h, , bz2_found=no) 13 | fi 14 | fi 15 | if test x"$bz2_found" = xyes ; then 16 | opt_features_yes="$opt_features_yes\n * BZ2 compression" 17 | else 18 | opt_features_no="$opt_features_no\n * BZ2 compression" 19 | fi 20 | 21 | AC_SUBST(BZ2_LIBS) 22 | -------------------------------------------------------------------------------- /ac/check_version.m4: -------------------------------------------------------------------------------- 1 | check_version() { 2 | check_ver_req="$1" 3 | check_ver_real="$2" 4 | 5 | set - `echo $check_ver_req 0 0 0 | sed 's/\./\ /g'` 6 | check_ver_major=$1 7 | check_ver_minor=$2 8 | check_ver_micro=$3 9 | 10 | set - `echo $check_ver_real 0 0 0 | sed 's/\./\ /g'` 11 | check_ver_ok=0 12 | 13 | if test "x$1" = "x" -o $1 -lt ${check_ver_major} ; then 14 | check_ver_ok=0 15 | elif test $1 -gt ${check_ver_major} ; then 16 | check_ver_ok=1 17 | elif test "x$2" = "x" -o $2 -lt ${check_ver_minor} ; then 18 | check_ver_ok=0 19 | elif test $2 -gt ${check_ver_minor} ; then 20 | check_ver_ok=1 21 | elif test "x$3" = "x" -o $3 -lt ${check_ver_micro} ; then 22 | check_ver_ok=0 23 | else 24 | check_ver_ok=1 25 | fi 26 | 27 | test $check_ver_ok = 1 28 | } 29 | -------------------------------------------------------------------------------- /ac/curl.m4: -------------------------------------------------------------------------------- 1 | dnl 2 | dnl Check for libcurl 3 | dnl 4 | 5 | PKG_CHECK_MODULES([CURL], [libcurl], [curl_found=yes]) 6 | 7 | if test "$curl_found" = "yes"; then 8 | opt_features_yes="$opt_features_yes\n * online update checks (via libcurl)" 9 | AC_DEFINE(HAVE_CURL_EASY_H, 1, [define if libcurl is found via pkg-config]) 10 | else 11 | opt_features_no="$opt_features_no\n * online update checks (via libcurl)" 12 | CURL_CFLAGS="" 13 | CURL_LIBS="" 14 | fi 15 | -------------------------------------------------------------------------------- /ac/ebml_matroska_internal.m4: -------------------------------------------------------------------------------- 1 | dnl 2 | dnl Define variables for the internal versions of libEBML and libMatroska 3 | dnl 4 | EBML_CFLAGS="-Ilib/libebml" 5 | EBML_LDFLAGS="-Llib/libebml/src" 6 | EBML_LIBS="-lebml" 7 | EBML_MATROSKA_INTERNAL=yes 8 | MATROSKA_CFLAGS="-Ilib/libmatroska" 9 | MATROSKA_LDFLAGS="-Llib/libmatroska/src" 10 | MATROSKA_LIBS="-lmatroska" 11 | 12 | AC_SUBST(EBML_CFLAGS) 13 | AC_SUBST(EBML_LDFLAGS) 14 | AC_SUBST(EBML_LIBS) 15 | AC_SUBST(EBML_MATROSKA_INTERNAL) 16 | AC_SUBST(MATROSKA_CFLAGS) 17 | AC_SUBST(MATROSKA_LDFLAGS) 18 | AC_SUBST(MATROSKA_LIBS) 19 | -------------------------------------------------------------------------------- /ac/etags.m4: -------------------------------------------------------------------------------- 1 | dnl 2 | dnl Check for etags (optional) 3 | dnl 4 | AC_PATH_PROG(ETAGS, "etags") 5 | AC_SUBST(ETAGS) 6 | -------------------------------------------------------------------------------- /ac/expat.m4: -------------------------------------------------------------------------------- 1 | dnl 2 | dnl Check for libexpat 3 | dnl 4 | AC_CHECK_LIB(expat, XML_ParserCreate, 5 | [ EXPAT_LIBS="-lexpat" 6 | expat_found=yes ], 7 | [ expat_found=no ],) 8 | if test "$expat_found" = "no"; then 9 | AC_MSG_ERROR([Could not find the Expat library]) 10 | fi 11 | AC_CHECK_HEADERS(expat.h, , expat_found=no) 12 | if test "$expat_found" = "no"; then 13 | AC_MSG_ERROR([Could not find expat.h]) 14 | fi 15 | 16 | AC_SUBST(EXPAT_CFLAGS) 17 | AC_SUBST(EXPAT_LIBS) 18 | -------------------------------------------------------------------------------- /ac/gcc_version.m4: -------------------------------------------------------------------------------- 1 | AC_CACHE_CHECK( 2 | [gcc version], 3 | [ac_cv_gcc_version], 4 | [ac_cv_gcc_version=`$CXX -dumpversion | sed -e 's/[[^0-9\.]].*//g'`]) 5 | -------------------------------------------------------------------------------- /ac/gnurx.m4: -------------------------------------------------------------------------------- 1 | dnl 2 | dnl Check for libgnurx on mingw 3 | dnl 4 | if test "x$ac_cv_mingw32" = "xyes"; then 5 | AC_CHECK_LIB(gnurx, regexec, [ gnurx_found=yes ], [ gnurx_found=no ]) 6 | fi 7 | 8 | if test "x$gnurx_found" = xyes ; then 9 | GNURX_LIBS=-lgnurx 10 | fi 11 | AC_SUBST(GNURX_LIBS) 12 | -------------------------------------------------------------------------------- /ac/guide_translations.m4: -------------------------------------------------------------------------------- 1 | AC_MSG_CHECKING(the mmg guide translation languages to install) 2 | GUIDE_TRANSLATIONS="" 3 | if test x"$LINGUAS" = x ; then 4 | for entry in $srcdir/doc/guide/* ; do 5 | test -d "$entry" && GUIDE_TRANSLATIONS="$GUIDE_TRANSLATIONS`basename $entry` " 6 | done 7 | else 8 | for i in $LINGUAS; do 9 | test -d "$srcdir/doc/guide/$i" && GUIDE_TRANSLATIONS="$GUIDE_TRANSLATIONS$i " 10 | done 11 | fi 12 | AC_MSG_RESULT($GUIDE_TRANSLATIONS) 13 | 14 | AC_SUBST(GUIDE_TRANSLATIONS) 15 | -------------------------------------------------------------------------------- /ac/initialization.m4: -------------------------------------------------------------------------------- 1 | AC_CANONICAL_TARGET 2 | SAVED_CFLAGS="$CFLAGS" 3 | AC_PROG_CC 4 | CFLAGS="$SAVED_CFLAGS" 5 | AC_PROG_CC_C_O 6 | AC_PROG_CPP 7 | SAVED_CXXFLAGS="$CXXFLAGS" 8 | AC_PROG_CXX 9 | CXXFLAGS="$SAVED_CXXFLAGS" 10 | AC_PROG_MAKE_SET 11 | AC_PROG_INSTALL 12 | AC_CHECK_TOOL(RANLIB, ranlib, :) 13 | AC_CHECK_TOOL(STRIP, strip, :) 14 | AC_CHECK_TOOL(AR, ar, :) 15 | AC_CHECK_TOOL(LD, ld, :) 16 | PKG_PROG_PKG_CONFIG 17 | 18 | dnl Check for headers 19 | AC_HEADER_STDC() 20 | AC_CHECK_HEADERS([inttypes.h stdint.h sys/types.h]) 21 | AC_CHECK_FUNCS(vsscanf,,) 22 | -------------------------------------------------------------------------------- /ac/magic.m4: -------------------------------------------------------------------------------- 1 | dnl 2 | dnl Check for libmagic 3 | dnl 4 | 5 | magic_mingw_libs="" 6 | if test "x$ac_cv_mingw32" = "xyes"; then 7 | magic_mingw_libs="-lshlwapi" 8 | fi 9 | 10 | AC_CHECK_LIB(magic, magic_open, [ magic_found=yes ], [ magic_found=no ], [-lz $GNURX_LIBS $magic_mingw_libs]) 11 | 12 | if test "x$magic_found" = "xyes" ; then 13 | AC_CHECK_HEADERS([magic.h]) 14 | if test "x$ac_cv_header_magic_h" = "xyes" ; then 15 | MAGIC_LIBS="-lmagic -lz $GNURX_LIBS $magic_mingw_libs" 16 | opt_features_yes="$opt_features_yes\n * libMagic file type detection" 17 | else 18 | opt_features_no="$opt_features_no\n * libMagic file type detection" 19 | fi 20 | else 21 | opt_features_no="$opt_features_no\n * libMagic file type detection" 22 | fi 23 | 24 | AC_SUBST(MAGIC_LIBS) 25 | -------------------------------------------------------------------------------- /ac/manpages_translations.m4: -------------------------------------------------------------------------------- 1 | AC_MSG_CHECKING(the manpage translation languages to install) 2 | MANPAGES_TRANSLATIONS="" 3 | if test x"$LINGUAS" = x ; then 4 | for file in $srcdir/doc/man/po4a/po/*.po; do 5 | MANPAGES_TRANSLATIONS="$MANPAGES_TRANSLATIONS`basename $file .po` " 6 | done 7 | else 8 | for i in $LINGUAS; do 9 | if test -f "$srcdir/doc/man/po4a/po/$i.po"; then 10 | MANPAGES_TRANSLATIONS="$MANPAGES_TRANSLATIONS$i " 11 | fi 12 | done 13 | fi 14 | AC_MSG_RESULT($MANPAGES_TRANSLATIONS) 15 | 16 | AC_SUBST(MANPAGES_TRANSLATIONS) 17 | -------------------------------------------------------------------------------- /ac/mingw.m4: -------------------------------------------------------------------------------- 1 | dnl 2 | dnl Check for mingw 3 | dnl 4 | AC_CACHE_CHECK([if being compiled with mingw32], 5 | [ac_cv_mingw32],[ 6 | case $host in 7 | *mingw*) 8 | ac_cv_mingw32=yes 9 | ;; 10 | *) 11 | ac_cv_mingw32=no 12 | ;; 13 | esac]) 14 | 15 | if test "x$ac_cv_mingw32" = "xyes"; then 16 | export MINGW=1 17 | MINGW_GUIAPP=-mwindows 18 | EXEEXT=.exe 19 | 20 | AC_CHECK_TOOL(WINDRES, windres, :) 21 | fi 22 | 23 | AC_SUBST(MINGW) 24 | AC_SUBST(MINGW_LIBS) 25 | AC_SUBST(MINGW_GUIAPP) 26 | AC_SUBST(EXEEXT) 27 | -------------------------------------------------------------------------------- /ac/ogg.m4: -------------------------------------------------------------------------------- 1 | dnl 2 | dnl Check for libogg 3 | dnl 4 | AC_CHECK_LIB(ogg, ogg_sync_init, 5 | [ OGG_LIBS="-logg" 6 | ogg_found=yes ], 7 | [ ogg_found=no ],) 8 | if test "$ogg_found" = "no"; then 9 | AC_MSG_ERROR([Could not find the Ogg library]) 10 | fi 11 | AC_CHECK_HEADERS(ogg/ogg.h, , ogg_found=no) 12 | if test "$ogg_found" = "no"; then 13 | AC_MSG_ERROR([Could not find the Ogg header files]) 14 | fi 15 | 16 | AC_SUBST(OGG_LIBS) 17 | -------------------------------------------------------------------------------- /ac/pandoc.m4: -------------------------------------------------------------------------------- 1 | dnl 2 | dnl Check for pandoc (optional) 3 | dnl 4 | AC_PATH_PROG(PANDOC, "pandoc") 5 | AC_SUBST(PANDOC) 6 | -------------------------------------------------------------------------------- /ac/po4a.m4: -------------------------------------------------------------------------------- 1 | TRANSLATE_PERCENT=5 2 | PO4A_FLAGS="-M utf-8 -k $TRANSLATE_PERCENT" 3 | PO4A_TRANSLATE_FLAGS="$PO4A_FLAGS -f docbook" 4 | AC_PATH_PROG(PO4A, po4a) 5 | AC_PATH_PROG(PO4A_TRANSLATE, po4a-translate) 6 | 7 | if test "$PO4A" != "" -a "$PO4A_TRANSLATE" != ""; then 8 | AC_CACHE_CHECK([whether po4a-translate works], 9 | [ac_cv_po4a_works], 10 | [ 11 | ac_cv_po4a_works=no 12 | $PO4A_TRANSLATE $PO4A_TRANSLATE_FLAGS -m $srcdir/doc/man/mkvmerge.xml -p $srcdir/doc/man/po4a/po/ja.po -l /dev/null 13 | if test "$?" = 0; then 14 | ac_cv_po4a_works=yes 15 | fi 16 | ]) 17 | PO4A_WORKS=$ac_cv_po4a_works 18 | fi 19 | 20 | AC_SUBST(PO4A) 21 | AC_SUBST(PO4A_TRANSLATE) 22 | AC_SUBST(PO4A_FLAGS) 23 | AC_SUBST(PO4A_TRANSLATE_FLAGS) 24 | AC_SUBST(PO4A_WORKS) 25 | -------------------------------------------------------------------------------- /ac/posix_fadvise.m4: -------------------------------------------------------------------------------- 1 | dnl 2 | dnl Check for posix_fadvise and its definitions 3 | dnl 4 | AC_ARG_ENABLE(posix-fadvise, 5 | AC_HELP_STRING([--disable-posix-fadvise],[do not use posix_fadvise (auto)]),, 6 | [enable_posix_fadvise=yes]) 7 | 8 | if test x"$enable_posix_fadvise" != "xno" ; then 9 | AC_CACHE_CHECK([for posix_fadvise], [ac_cv_posix_fadvise],[ 10 | ac_cv_posix_fadvise="no" 11 | AC_LANG_PUSH(C++) 12 | AC_TRY_COMPILE([ 13 | #include 14 | ],[ 15 | posix_fadvise(0, 0, 0, POSIX_FADV_WILLNEED); 16 | posix_fadvise(0, 0, 0, POSIX_FADV_DONTNEED); 17 | ],[ac_cv_posix_fadvise="yes"]) 18 | AC_LANG_POP 19 | ]) 20 | if test x"$ac_cv_posix_fadvise" = "xyes" ; then 21 | AC_DEFINE([HAVE_POSIX_FADVISE], 1, [define if posix_advise and its definitions are available]) 22 | fi 23 | fi 24 | -------------------------------------------------------------------------------- /ac/precompiled_headers.m4: -------------------------------------------------------------------------------- 1 | dnl 2 | dnl Precompiled headers 3 | dnl 4 | 5 | AC_ARG_ENABLE([precompiled_headers], 6 | AC_HELP_STRING([--enable-precompiled-headers],[enable the generation and use of precompiled headers (auto)]), 7 | [], 8 | [enable_precompiled_headers=auto]) 9 | 10 | if test x"$enable_precompiled_headers" = x"auto"; then 11 | if ! check_version 4.1.0 $ac_cv_gcc_version ; then 12 | enable_precompiled_headers=no 13 | else 14 | enable_precompiled_headers=yes 15 | fi 16 | fi 17 | 18 | if test x"$enable_precompiled_headers" = x"yes"; then 19 | AC_DEFINE(USE_PRECOMPILED_HEADERS, 1, [Define if precompiled headers are generated and used]) 20 | USE_PRECOMPILED_HEADERS=yes 21 | fi 22 | 23 | AC_SUBST(USE_PRECOMPILED_HEADERS) 24 | -------------------------------------------------------------------------------- /ac/pri64d.m4: -------------------------------------------------------------------------------- 1 | dnl 2 | dnl Verify that PRId64 and PRIu64 are available 3 | dnl 4 | AC_MSG_CHECKING(for PRId64 and PRIu64) 5 | AC_CACHE_VAL(ac_cv_has_prix64,[ 6 | AC_TRY_COMPILE([ 7 | #define __STDC_FORMAT_MACROS 8 | #if HAVE_INTTYPES_H 9 | # include 10 | #endif 11 | #if HAVE_STDINT_H 12 | # include 13 | #endif 14 | #if HAVE_SYS_TYPES_H 15 | # include 16 | #endif 17 | ], 18 | [char *dummy = "text " PRId64 " text " PRIu64;], 19 | ac_cv_has_prix64=yes, 20 | ac_cv_has_prix64=no) 21 | ]) 22 | AC_MSG_RESULT($ac_cv_has_prix64) 23 | 24 | if test x$ac_cv_has_prix64 = "xno" ; then 25 | echo "*** On your system the #define PRId64 and/or PRIu64 was not found." 26 | echo "*** These are required for compilation. Please contact the author." 27 | exit 1 28 | fi 29 | -------------------------------------------------------------------------------- /ac/tiocgwinsz.m4: -------------------------------------------------------------------------------- 1 | AC_SYS_POSIX_TERMIOS 2 | AC_HEADER_TIOCGWINSZ 3 | AC_CHECK_HEADERS([sys/ioctl.h]) 4 | 5 | if test x"$ac_cv_sys_posix_termios" = "xyes" ; then 6 | AC_DEFINE([HAVE_TIOCGWINSZ], 1, [define if ioctl & TIOCGWINSZ are available]) 7 | fi 8 | -------------------------------------------------------------------------------- /ac/vorbis.m4: -------------------------------------------------------------------------------- 1 | dnl 2 | dnl Check for libvorbis 3 | dnl 4 | AC_CHECK_LIB(vorbis, vorbis_synthesis_init, 5 | [ VORBIS_LIBS="-lvorbis -lm" 6 | vorbis_found=yes ], 7 | [ vorbis_found=no ], 8 | $OGG_LIBS -lm) 9 | if test "$vorbis_found" = "no"; then 10 | AC_MSG_ERROR([Could not find the Vorbis library]) 11 | fi 12 | AC_CHECK_HEADERS(vorbis/codec.h, , vorbis_found=no) 13 | if test "$vorbis_found" = "no"; then 14 | AC_MSG_ERROR([Could not find the Vorbis header files]) 15 | fi 16 | 17 | AC_SUBST(VORBIS_LIBS) 18 | -------------------------------------------------------------------------------- /ac/zlib.m4: -------------------------------------------------------------------------------- 1 | dnl 2 | dnl Check for zlib 3 | dnl 4 | 5 | PKG_CHECK_MODULES([ZLIB],[zlib],[zlib_found=yes]) 6 | 7 | if test x"$zlib_found" != xyes; then 8 | AC_MSG_ERROR([Could not find the zlib library]) 9 | fi 10 | -------------------------------------------------------------------------------- /contrib/parse_iso.awk: -------------------------------------------------------------------------------- 1 | #!/bin/awk -f 2 | 3 | BEGIN { 4 | FS = "|"; 5 | } 6 | 7 | !/qaa-qtz/ { 8 | printf(" { %-83s \"%s\", %s, %s },\n", "\""$4"\",", $1, $3 ? "\""$3"\"" : "NULL", $2 ? "\""$2"\"" : "NULL "); 9 | } 10 | 11 | END { 12 | printf(" { %-83s %s, %s, %s },\n", "NULL,", "NULL", "NULL", "NULL"); 13 | } 14 | -------------------------------------------------------------------------------- /debian-upstream/compat: -------------------------------------------------------------------------------- 1 | 7 2 | -------------------------------------------------------------------------------- /debian-upstream/copyright: -------------------------------------------------------------------------------- 1 | This package was debianized by Clément Stenac on 2 | Tue, 1 Feb 2005 08:48:37 +0100. 3 | 4 | It was downloaded from http://www.bunkus.org/videotools/mkvtoolnix/ 5 | 6 | Upstream Author: Moritz Bunkus 7 | 8 | Licence for lib/librmff/* : LGPL 2.1 9 | Copyright: 10 | Copyright (C) Moritz Bunkus - March 2004 11 | 12 | Licence for lib/utf8-cpp/source/* : BSD 13 | Copyright: 14 | Copyright 2006 Nemanja Trifunovic 15 | 16 | License for other files : GPL 2 17 | Copyright: 18 | Copyright 2003 -2008 Moritz Bunkus 19 | Copyright (C) Thomas Östreich - June 2001 20 | (c)94 UP-Vision Computergrafik for c't 21 | Copyright (C) 1999 Rainer Johanni 22 | Copyright (C) Lukas Hejtmanek - January 2004 23 | 24 | This software is licensed under the GNU General Public Licence. 25 | On Debian systems, this license can be found in /usr/share/common-licenses 26 | -------------------------------------------------------------------------------- /debian-upstream/docs: -------------------------------------------------------------------------------- 1 | AUTHORS 2 | README 3 | TODO 4 | -------------------------------------------------------------------------------- /debian-upstream/mkvtoolnix-gui.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=MKV files creator 3 | Name[fr]=Créateur de fichiers MKV 4 | Exec=mmg 5 | Terminal=false 6 | Type=Application 7 | Categories=GNOME;AudioVideo; 8 | Icon=matroskalogo 9 | -------------------------------------------------------------------------------- /debian-upstream/mkvtoolnix-gui.install: -------------------------------------------------------------------------------- 1 | src/mmg/mmg-gui /usr/bin 2 | src/mkvinfo-gui /usr/bin 3 | share/desktop/*.desktop /usr/share/applications 4 | share/mime/*.xml /usr/share/mime/packages 5 | share/icons/32x32/* /usr/share/icons/hicolor/32x32/apps 6 | share/icons/64x64/* /usr/share/icons/hicolor/64x64/apps 7 | usr/share/doc/mkvtoolnix-gui/guide 8 | -------------------------------------------------------------------------------- /debian-upstream/mkvtoolnix-gui.manpages: -------------------------------------------------------------------------------- 1 | doc/man/mmg.1 2 | -------------------------------------------------------------------------------- /debian-upstream/mkvtoolnix-gui.menu: -------------------------------------------------------------------------------- 1 | ?package(mkvtoolnix-gui):needs="X11" section="Applications/Video"\ 2 | title="MKV Creator" command="/usr/bin/mmg" 3 | -------------------------------------------------------------------------------- /debian-upstream/mkvtoolnix-gui.postinst: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | set -e 4 | 5 | if test -e /usr/bin/mkvinfo && ! test -L /usr/bin/mkvinfo; then 6 | echo "Error. /usr/bin/mkvinfo is not a symlink. This is a bug in " 7 | echo "the mkvtoolnix package or you installed a binary in /usr/bin/mkvinfo." 8 | echo "Aborting." 9 | exit 1 10 | fi 11 | 12 | update-alternatives --install /usr/bin/mkvinfo mkvinfo /usr/bin/mkvinfo-gui 40 13 | 14 | #test -e /usr/bin/mkvinfo || ln -s /etc/alternatives/mkvinfo /usr/bin 15 | 16 | #DEBHELPER# 17 | 18 | exit 0 19 | -------------------------------------------------------------------------------- /debian-upstream/mkvtoolnix-gui.prerm: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | set -e 4 | 5 | [ "$1" = "remove" ] || [ "$1" = "deconfigure" ] && \ 6 | update-alternatives --remove mkvinfo /usr/bin/mkvinfo-gui 7 | 8 | #DEBHELPER# 9 | 10 | exit 0 11 | -------------------------------------------------------------------------------- /debian-upstream/mkvtoolnix.examples: -------------------------------------------------------------------------------- 1 | examples/* 2 | -------------------------------------------------------------------------------- /debian-upstream/mkvtoolnix.install: -------------------------------------------------------------------------------- 1 | usr/bin/mkvmerge 2 | usr/bin/mkvinfo 3 | usr/bin/mkvextract 4 | usr/bin/mkvpropedit 5 | usr/share/man 6 | usr/share/locale 7 | -------------------------------------------------------------------------------- /debian-upstream/mkvtoolnix.links: -------------------------------------------------------------------------------- 1 | /usr/share/doc/quilt/README.source /usr/share/doc/mkvtoolnix/README.source 2 | -------------------------------------------------------------------------------- /debian-upstream/mkvtoolnix.postinst: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | set -e 4 | 5 | if test -e /usr/bin/mkvinfo && ! test -L /usr/bin/mkvinfo; then 6 | echo "Error. /usr/bin/mkvinfo is not a symlink. This is a bug in " 7 | echo "the mkvtoolnix package or you installed a binary in /usr/bin/mkvinfo." 8 | echo "Aborting." 9 | exit 1 10 | fi 11 | 12 | update-alternatives --install /usr/bin/mkvinfo mkvinfo /usr/bin/mkvinfo-text 30 13 | 14 | #test -e /usr/bin/mkvinfo || ln -s /etc/alternatives/mkvinfo /usr/bin 15 | 16 | #DEBHELPER# 17 | 18 | exit 0 19 | -------------------------------------------------------------------------------- /debian-upstream/mkvtoolnix.prerm: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | set -e 4 | 5 | [ "$1" = "remove" ] || [ "$1" = "deconfigure" ] && \ 6 | update-alternatives --remove mkvinfo /usr/bin/mkvinfo-text 7 | 8 | #DEBHELPER# 9 | 10 | exit 0 11 | -------------------------------------------------------------------------------- /debian-upstream/source/format: -------------------------------------------------------------------------------- 1 | 3.0 (quilt) 2 | -------------------------------------------------------------------------------- /debian-upstream/watch: -------------------------------------------------------------------------------- 1 | version=3 2 | http://www.bunkus.org/videotools/mkvtoolnix/sources/mkvtoolnix-(.*)\.tar\.bz2 3 | -------------------------------------------------------------------------------- /doc/Rakefile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env rake 2 | # -*- mode: ruby; -*- 3 | 4 | import ['..', '../..', '../../..'].collect { |subdir| FileList[File.dirname(__FILE__) + "/#{subdir}/build-config.in"].to_a }.flatten.compact.first.gsub(/build-config.in/, 'Rakefile') 5 | -------------------------------------------------------------------------------- /doc/guide/Rakefile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env rake 2 | # -*- mode: ruby; -*- 3 | 4 | import ['..', '../..', '../../..'].collect { |subdir| FileList[File.dirname(__FILE__) + "/#{subdir}/build-config.in"].to_a }.flatten.compact.first.gsub(/build-config.in/, 'Rakefile') 5 | -------------------------------------------------------------------------------- /doc/guide/en/images/addingremovingattachments.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/doc/guide/en/images/addingremovingattachments.gif -------------------------------------------------------------------------------- /doc/guide/en/images/addremovefiles.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/doc/guide/en/images/addremovefiles.gif -------------------------------------------------------------------------------- /doc/guide/en/images/attachmentoptions.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/doc/guide/en/images/attachmentoptions.gif -------------------------------------------------------------------------------- /doc/guide/en/images/audiotrackoptions.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/doc/guide/en/images/audiotrackoptions.gif -------------------------------------------------------------------------------- /doc/guide/en/images/chaptereditor.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/doc/guide/en/images/chaptereditor.gif -------------------------------------------------------------------------------- /doc/guide/en/images/generaltrackoptions.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/doc/guide/en/images/generaltrackoptions.gif -------------------------------------------------------------------------------- /doc/guide/en/images/jobmanager.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/doc/guide/en/images/jobmanager.gif -------------------------------------------------------------------------------- /doc/guide/en/images/movietitle.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/doc/guide/en/images/movietitle.gif -------------------------------------------------------------------------------- /doc/guide/en/images/muxingwindow.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/doc/guide/en/images/muxingwindow.gif -------------------------------------------------------------------------------- /doc/guide/en/images/selectmkvmergeexecutable.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/doc/guide/en/images/selectmkvmergeexecutable.gif -------------------------------------------------------------------------------- /doc/guide/en/images/splitting.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/doc/guide/en/images/splitting.gif -------------------------------------------------------------------------------- /doc/guide/en/images/textsubtitlestrackoptions.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/doc/guide/en/images/textsubtitlestrackoptions.gif -------------------------------------------------------------------------------- /doc/guide/en/images/trackselection.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/doc/guide/en/images/trackselection.gif -------------------------------------------------------------------------------- /doc/guide/en/images/videotrackoptions.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/doc/guide/en/images/videotrackoptions.gif -------------------------------------------------------------------------------- /doc/guide/en/mkvmerge-gui.hhp: -------------------------------------------------------------------------------- 1 | Contents file=mkvmerge-gui.hhc 2 | Index file=mkvmerge-gui.hhk 3 | Title=The guide to mkvmerge GUI (aka 'mmg') 4 | Default topic=mkvmerge-gui.html 5 | -------------------------------------------------------------------------------- /doc/guide/zh_CN/images/addingremovingattachments.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/doc/guide/zh_CN/images/addingremovingattachments.gif -------------------------------------------------------------------------------- /doc/guide/zh_CN/images/addremovefiles.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/doc/guide/zh_CN/images/addremovefiles.gif -------------------------------------------------------------------------------- /doc/guide/zh_CN/images/attachmentoptions.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/doc/guide/zh_CN/images/attachmentoptions.gif -------------------------------------------------------------------------------- /doc/guide/zh_CN/images/audiotrackoptions.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/doc/guide/zh_CN/images/audiotrackoptions.gif -------------------------------------------------------------------------------- /doc/guide/zh_CN/images/chaptereditor.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/doc/guide/zh_CN/images/chaptereditor.gif -------------------------------------------------------------------------------- /doc/guide/zh_CN/images/generaltrackoptions.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/doc/guide/zh_CN/images/generaltrackoptions.gif -------------------------------------------------------------------------------- /doc/guide/zh_CN/images/jobmanager.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/doc/guide/zh_CN/images/jobmanager.gif -------------------------------------------------------------------------------- /doc/guide/zh_CN/images/movietitle.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/doc/guide/zh_CN/images/movietitle.gif -------------------------------------------------------------------------------- /doc/guide/zh_CN/images/muxingwindow.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/doc/guide/zh_CN/images/muxingwindow.gif -------------------------------------------------------------------------------- /doc/guide/zh_CN/images/selectmkvmergeexecutable.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/doc/guide/zh_CN/images/selectmkvmergeexecutable.gif -------------------------------------------------------------------------------- /doc/guide/zh_CN/images/splitting.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/doc/guide/zh_CN/images/splitting.gif -------------------------------------------------------------------------------- /doc/guide/zh_CN/images/textsubtitlestrackoptions.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/doc/guide/zh_CN/images/textsubtitlestrackoptions.gif -------------------------------------------------------------------------------- /doc/guide/zh_CN/images/trackselection.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/doc/guide/zh_CN/images/trackselection.gif -------------------------------------------------------------------------------- /doc/guide/zh_CN/images/videotrackoptions.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/doc/guide/zh_CN/images/videotrackoptions.gif -------------------------------------------------------------------------------- /doc/guide/zh_CN/mkvmerge-gui.hhc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/doc/guide/zh_CN/mkvmerge-gui.hhc -------------------------------------------------------------------------------- /doc/guide/zh_CN/mkvmerge-gui.hhp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/doc/guide/zh_CN/mkvmerge-gui.hhp -------------------------------------------------------------------------------- /doc/man/Rakefile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env rake 2 | # -*- mode: ruby; -*- 3 | 4 | import ['..', '../..', '../../..'].collect { |subdir| FileList[File.dirname(__FILE__) + "/#{subdir}/build-config.in"].to_a }.flatten.compact.first.gsub(/build-config.in/, 'Rakefile') 5 | -------------------------------------------------------------------------------- /doc/man/po4a/po4a.cfg: -------------------------------------------------------------------------------- 1 | [po4a_paths] doc/man/po4a/po/mkvtoolnix.pot ja:doc/man/po4a/po/ja.po nl:doc/man/po4a/po/nl.po zh_CN:doc/man/po4a/po/zh_CN.po 2 | 3 | [type: docbook] doc/man/mkvextract.xml $lang:doc/man/$lang/mkvextract.xml 4 | [type: docbook] doc/man/mkvinfo.xml $lang:doc/man/$lang/mkvinfo.xml 5 | [type: docbook] doc/man/mkvmerge.xml $lang:doc/man/$lang/mkvmerge.xml 6 | [type: docbook] doc/man/mkvpropedit.xml $lang:doc/man/$lang/mkvpropedit.xml 7 | [type: docbook] doc/man/mmg.xml $lang:doc/man/$lang/mmg.xml 8 | -------------------------------------------------------------------------------- /doc/pandoc-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Developer notes 5 | 6 | 7 | $for(author)$ 8 | 9 | $endfor$ 10 | 11 | $for(css)$ 12 | 13 | $endfor$ 14 | $if(math)$ 15 | $math$ 16 | $endif$ 17 | $for(header-includes)$ 18 | $header-includes$ 19 | $endfor$ 20 | 21 | 22 |

Developer notes

23 | $for(include-before)$ 24 | $include-before$ 25 | $endfor$ 26 | $if(toc)$ 27 | $toc$ 28 | $endif$ 29 | $body$ 30 | $for(include-after)$ 31 | $include-after$ 32 | $endfor$ 33 | 34 | 35 | -------------------------------------------------------------------------------- /doc/stylesheets/head.xsl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | <xsl:value-of select="refnamediv/refname"/> 8 | <xsl:text> -- </xsl:text> 9 | <xsl:value-of select="refnamediv/refpurpose"/> 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /doc/stylesheets/toc.xsl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 |

Table of contents

7 | 8 | 22 |
23 |
24 |
25 | -------------------------------------------------------------------------------- /drake: -------------------------------------------------------------------------------- 1 | rake.d/vendor/drake-0.8.7.0.2.4/bin/drake -------------------------------------------------------------------------------- /examples/example-chapters-2.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/examples/example-chapters-2.xml -------------------------------------------------------------------------------- /examples/example-segmentinfo-1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 12 | 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 13 | ff ee dd cc bb aa 99 88 77 66 55 44 33 22 11 00 14 | 00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff 15 | 11 00 11 11 11 22 11 33 11 44 11 55 11 66 11 77 16 | 17 | -------------------------------------------------------------------------------- /examples/example-timecodes-v2.txt: -------------------------------------------------------------------------------- 1 | # timecode format v2 2 | 3 | # The very first line MUST have this format. 4 | 5 | # As you can see empty lines and other lines starting with '#' are ignored. 6 | 7 | # The remaining lines simply contain the timecode in ms for the following 8 | # frame. The number can be a floating point number, but it doesn't have to 9 | # be. Note that only dots ('.') are accepted as the decimal point, not 10 | # commas! 11 | 12 | # White spaces are ignored. 13 | 14 | # You must give at least as many timecode lines here as the track contais 15 | # frames. Otherwise mkvmerge will complain, and the results might not be 16 | # what you expect. 17 | 18 | # Example for 10 consecutive frames at 25fps: 19 | 0 20 | 40.0 21 | 80.0 22 | 120 23 | 160 24 | 200 25 | 240 26 | 280 27 | 320 28 | 360 29 | 30 | # No need to use floats, but you can if you want. Now some more frames which 31 | # are spaced a bit more. 32 | 460 33 | 560 34 | 660 35 | 760 36 | 860 37 | 960 38 | 1060 39 | -------------------------------------------------------------------------------- /examples/matroskasegmentinfo.dtd: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /examples/matroskatags.dtd: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /installer/external_links.ini: -------------------------------------------------------------------------------- 1 | [Settings] 2 | NumFields=3 3 | 4 | [Field 1] 5 | Type=Label 6 | Text=If you need a GUI for mkvextract then give these projects a try: 7 | Left=8 8 | Right=350 9 | Top=16 10 | Bottom=32 11 | 12 | [Field 2] 13 | Type=Link 14 | Text=MKVExtractGUI-2 15 | State=http://sourceforge.net/projects/mkvextractgui-2/ 16 | Left=8 17 | Right=350 18 | Top=40 19 | Bottom=48 20 | 21 | [Field 3] 22 | Type=Link 23 | Text=MKVcleaver 24 | State=http://einsof-haras.ca/apps/ 25 | Left=8 26 | Right=350 27 | Top=52 28 | Bottom=60 29 | -------------------------------------------------------------------------------- /installer/header_image.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/installer/header_image.bmp -------------------------------------------------------------------------------- /installer/welcome_finish_page.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/installer/welcome_finish_page.bmp -------------------------------------------------------------------------------- /lib/Rakefile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env rake 2 | # -*- mode: ruby; -*- 3 | 4 | import ['..', '../..', '../../..'].collect { |subdir| FileList[File.dirname(__FILE__) + "/#{subdir}/build-config.in"].to_a }.flatten.compact.first.gsub(/build-config.in/, 'Rakefile') 5 | -------------------------------------------------------------------------------- /lib/avilib-0.6.10/Rakefile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env rake 2 | # -*- mode: ruby; -*- 3 | 4 | import ['..', '../..', '../../..'].collect { |subdir| FileList[File.dirname(__FILE__) + "/#{subdir}/build-config.in"].to_a }.flatten.compact.first.gsub(/build-config.in/, 'Rakefile') 5 | -------------------------------------------------------------------------------- /lib/avilib-0.6.10/avidump.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/lib/avilib-0.6.10/avidump.c -------------------------------------------------------------------------------- /lib/avilib-0.6.10/avilib.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/lib/avilib-0.6.10/avilib.c -------------------------------------------------------------------------------- /lib/avilib-0.6.10/avilib.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/lib/avilib-0.6.10/avilib.h -------------------------------------------------------------------------------- /lib/avilib-0.6.10/avilib.proj: -------------------------------------------------------------------------------- 1 | #include "*/*.proj" 2 | 3 | LIB avilib 4 | { 5 | USEINCLUDE mktcommon 6 | USE boost_foreach 7 | USE libiconv 8 | DEFINE _CRT_SECURE_NO_DEPRECATE 9 | INCLUDE ../../src 10 | INCLUDE ../.. 11 | EXPINCLUDE . 12 | SOURCE avilib.c 13 | SOURCE avidump.c 14 | SOURCE avimisc.c 15 | SOURCE xio.cpp 16 | HEADER avilib.h 17 | HEADER xio.h 18 | } 19 | -------------------------------------------------------------------------------- /lib/avilib-0.6.10/avimisc.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/lib/avilib-0.6.10/avimisc.c -------------------------------------------------------------------------------- /lib/lib.proj: -------------------------------------------------------------------------------- 1 | #include "*/*.proj" 2 | -------------------------------------------------------------------------------- /lib/libebml/ChangeLog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/lib/libebml/ChangeLog -------------------------------------------------------------------------------- /lib/libebml/VERSION: -------------------------------------------------------------------------------- 1 | 1.2.3 revision 824 2 | -------------------------------------------------------------------------------- /lib/libebml/debian/control: -------------------------------------------------------------------------------- 1 | Source: libebml 2 | Priority: optional 3 | Maintainer: Moritz Bunkus 4 | Build-Depends: debhelper (>> 3.0.0) 5 | Standards-Version: 3.5.8 6 | Section: libs 7 | 8 | Package: libebml-dev 9 | Section: libdevel 10 | Architecture: any 11 | Depends: ${shlibs:Depends} 12 | Description: Extensible Binary Meta Language access library 13 | A library for reading and writing files with the Extensible Binary 14 | Meta Language, a binary pendant to XML. 15 | 16 | -------------------------------------------------------------------------------- /lib/libebml/debian/dirs: -------------------------------------------------------------------------------- 1 | usr/bin 2 | usr/sbin 3 | -------------------------------------------------------------------------------- /lib/libebml/debian/docs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/lib/libebml/debian/docs -------------------------------------------------------------------------------- /lib/libebml/debian/libebml-dev.dirs: -------------------------------------------------------------------------------- 1 | usr/lib 2 | usr/include 3 | -------------------------------------------------------------------------------- /lib/libebml/debian/libebml-dev.files: -------------------------------------------------------------------------------- 1 | usr/include/* 2 | usr/lib/lib*.a 3 | -------------------------------------------------------------------------------- /lib/libebml/ebml/EbmlEndian.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/lib/libebml/ebml/EbmlEndian.h -------------------------------------------------------------------------------- /lib/libebml/make/vc6/libebml.dsw: -------------------------------------------------------------------------------- 1 | Microsoft Developer Studio Workspace File, Format Version 6.00 2 | # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! 3 | 4 | ############################################################################### 5 | 6 | Project: "libebml"=".\lib\static\libebml.dsp" - Package Owner=<4> 7 | 8 | Package=<5> 9 | {{{ 10 | }}} 11 | 12 | Package=<4> 13 | {{{ 14 | }}} 15 | 16 | ############################################################################### 17 | 18 | Global: 19 | 20 | Package=<5> 21 | {{{ 22 | }}} 23 | 24 | Package=<3> 25 | {{{ 26 | }}} 27 | 28 | ############################################################################### 29 | 30 | -------------------------------------------------------------------------------- /lib/libmatroska/VERSION: -------------------------------------------------------------------------------- 1 | 1.3.0 revision 824 2 | -------------------------------------------------------------------------------- /lib/libmatroska/debian/control: -------------------------------------------------------------------------------- 1 | Source: libmatroska 2 | Priority: optional 3 | Maintainer: Moritz Bunkus 4 | Build-Depends: debhelper (>> 3.0.0), libebml-dev (>= 1.0.0-1) 5 | Standards-Version: 3.5.8 6 | Section: libs 7 | 8 | Package: libmatroska-dev 9 | Section: libdevel 10 | Architecture: any 11 | Depends: libebml-dev (>= 1.0.0-1) 12 | Description: an extensible open standard Audio/Video container format 13 | Matroska is aiming to become the standard of Multimedia 14 | Container Formats one day. It is based on EBML (Extensible Binary 15 | Meta Language), a kind of binary version of XML. This way the 16 | significant advantages in terms of future format extensability 17 | are gained without breaking file support in old parsers. 18 | -------------------------------------------------------------------------------- /lib/libmatroska/debian/dirs: -------------------------------------------------------------------------------- 1 | usr/bin 2 | usr/sbin 3 | -------------------------------------------------------------------------------- /lib/libmatroska/debian/docs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/lib/libmatroska/debian/docs -------------------------------------------------------------------------------- /lib/libmatroska/debian/libmatroska-dev.dirs: -------------------------------------------------------------------------------- 1 | usr/lib 2 | usr/include 3 | -------------------------------------------------------------------------------- /lib/libmatroska/debian/libmatroska-dev.files: -------------------------------------------------------------------------------- 1 | usr/include/* 2 | usr/lib/lib*.a 3 | -------------------------------------------------------------------------------- /lib/libmatroska/make/linux/check_ids: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # A small script that looks for duplicate EBML IDs in all of libmatroska's 4 | # source files. 5 | 6 | echo 'Duplicate IDs:' 7 | grep -h '^EbmlId.*_TheId' ../../src/*cpp | \ 8 | sed -e 's/TheId/TheId /' | \ 9 | awk '{ print $3 }' | \ 10 | sed -e 's/(//' -e 's/,//' | \ 11 | sort | \ 12 | uniq -d | \ 13 | ( while read id ; do 14 | echo '' 15 | echo ${id}: 16 | grep -i $id ../../src/*cpp 17 | done ) 18 | 19 | -------------------------------------------------------------------------------- /lib/libmatroska/make/makedoc.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | rem you should have DOXYGEN.EXE in your path 3 | rem http://www.doxygen.org/ 4 | 5 | echo make Documentation 6 | 7 | 8 | doxygen Doxyfile > Doxygen.log.txt 2> Doxygen.err.txt -------------------------------------------------------------------------------- /lib/libmatroska/make/makedoc.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/sh 2 | # you should have "doxygen" in your path 3 | # http://www.doxygen.org/ 4 | 5 | echo make Documentation 6 | 7 | doxygen Doxyfile > Doxygen.log.txt 2> Doxygen.err.txt 8 | -------------------------------------------------------------------------------- /lib/libmatroska/test/ebml/ebml.proj: -------------------------------------------------------------------------------- 1 | #include "*/*.proj" 2 | 3 | CON ebml-test00 4 | { 5 | USE matroska 6 | SOURCE test00.cpp 7 | } 8 | 9 | CON ebml-test0 10 | { 11 | USE matroska 12 | SOURCE test0.cpp 13 | } 14 | -------------------------------------------------------------------------------- /lib/libmatroska/test/ebml/test0.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/lib/libmatroska/test/ebml/test0.cpp -------------------------------------------------------------------------------- /lib/libmatroska/test/mux/mux.proj: -------------------------------------------------------------------------------- 1 | #include "*/*.proj" 2 | 3 | CON mux-test6 4 | { 5 | USE matroska 6 | SOURCE test6.cpp 7 | } 8 | 9 | CON mux-test8 10 | { 11 | USE matroska 12 | SOURCE test8.cpp 13 | } 14 | -------------------------------------------------------------------------------- /lib/libmatroska/test/mux/test6.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/lib/libmatroska/test/mux/test6.cpp -------------------------------------------------------------------------------- /lib/libmatroska/test/mux/test8.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/lib/libmatroska/test/mux/test8.cpp -------------------------------------------------------------------------------- /lib/libmatroska/test/tags/tags.proj: -------------------------------------------------------------------------------- 1 | #include "*/*.proj" 2 | 3 | CON tags-test9 4 | { 5 | SOURCE tags.cpp 6 | } 7 | -------------------------------------------------------------------------------- /lib/libmatroska/test/test.proj: -------------------------------------------------------------------------------- 1 | #include "*/*.proj" 2 | 3 | WORKSPACE tests 4 | { 5 | USE mux-test6 6 | USE mux-test8 7 | USE ebml-test00 8 | USE ebml-test0 9 | } 10 | -------------------------------------------------------------------------------- /lib/libmatroska/test/utf8/test5.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/lib/libmatroska/test/utf8/test5.cpp -------------------------------------------------------------------------------- /lib/libmatroska/test/utf8/utf8.proj: -------------------------------------------------------------------------------- 1 | #include "*/*.proj" 2 | 3 | CON utf8-test5 4 | { 5 | SOURCE test5.cpp 6 | } 7 | -------------------------------------------------------------------------------- /lib/librmff/README: -------------------------------------------------------------------------------- 1 | librmff 0.6.0 2 | ============= 3 | 4 | librmff is short for 'RealMedia file format access library'. It aims 5 | at providing the programmer an easy way to read and write RealMedia 6 | files. It does not contain any codecs for audio/video handling. 7 | 8 | The library was written by Moritz Bunkus . It is 9 | licensed under the terms of the GNU Lesser General Public License (GNU 10 | LGPL) which can be found in the file COPYING. 11 | 12 | Documentation is provided in doxygen compatible comments in librmff.h. 13 | -------------------------------------------------------------------------------- /lib/librmff/Rakefile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env rake 2 | # -*- mode: ruby; -*- 3 | 4 | import ['..', '../..', '../../..'].collect { |subdir| FileList[File.dirname(__FILE__) + "/#{subdir}/build-config.in"].to_a }.flatten.compact.first.gsub(/build-config.in/, 'Rakefile') 5 | -------------------------------------------------------------------------------- /lib/librmff/librmff.proj: -------------------------------------------------------------------------------- 1 | #include "*/*.proj" 2 | 3 | LIB rmff 4 | { 5 | USEINCLUDE mktcommon 6 | USE boost_foreach 7 | INCLUDE ../../src 8 | INCLUDE ../.. 9 | EXPINCLUDE .. 10 | SOURCE mb_file_io.c 11 | SOURCE mb_file_io.h 12 | SOURCE rmff.c 13 | HEADER librmff.h 14 | } 15 | -------------------------------------------------------------------------------- /lib/utf8-cpp/doc/ReleaseNotes: -------------------------------------------------------------------------------- 1 | utf8 cpp library 2 | <<<<<<< .mine 3 | Release 2.3 4 | ======= 5 | Release 2.2.1 6 | >>>>>>> .r98 7 | 8 | <<<<<<< .mine 9 | This is a bug fix release. 10 | ======= 11 | This is a minor bug fix release aimed at supporting GCC 4.3. 12 | >>>>>>> .r98 13 | 14 | <<<<<<< .mine 15 | Changes from version 2.2 16 | - Bug fix: ID: 2830326 : multiple definition of `utf8::internal::is_overlong_sequence 17 | ======= 18 | Changes from version 2.2 19 | - Bug fix [ ID: 2823847 ] "warning from GCC 4.3" 20 | >>>>>>> .r98 21 | 22 | Files included in the release: utf8.h, core.h, checked.h, unchecked.h, utf8cpp.html, ReleaseNotes 23 | -------------------------------------------------------------------------------- /lib/utf8-cpp/utf8-cpp.proj: -------------------------------------------------------------------------------- 1 | GROUP utf8-cpp 2 | { 3 | INCLUDE source 4 | EXPINCLUDE source 5 | HEADER source/utf8/checked.h 6 | HEADER source/utf8/core.h 7 | HEADER source/utf8/unchecked.h 8 | SOURCE source/utf8.h 9 | } 10 | -------------------------------------------------------------------------------- /mkvtoolnix.proj: -------------------------------------------------------------------------------- 1 | #include "*/*.proj" 2 | 3 | WORKSPACE mkvtoolnix 4 | { 5 | USE mkvmerge 6 | USE mkvextract 7 | USE mkvinfo 8 | } 9 | -------------------------------------------------------------------------------- /rake.d/application.rb: -------------------------------------------------------------------------------- 1 | class Application < Target 2 | def initialize(exe) 3 | super exe + c(:EXEEXT) 4 | @namespace = :apps 5 | end 6 | 7 | def create_specific 8 | libraries :rpcrt4, :if => c?(:MINGW) 9 | 10 | namespace :apps do 11 | desc @desc if @aliases.empty? && !@desc.empty? 12 | file @target => @dependencies do |t| 13 | runq " LINK #{t.name}", "#{c(:CXX)} #{$flags[:ldflags]} #{$system_libdirs} -o #{t.name} #{@objects.join(" ")} #{@libraries.join(" ")}" 14 | end 15 | end 16 | self 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /rake.d/config.rb: -------------------------------------------------------------------------------- 1 | def read_config 2 | error "build-config not found: please run ./configure" unless File.exists?("build-config") 3 | 4 | $config = Hash[ *IO.readlines("build-config").collect { |line| line.chomp.gsub(/#.*/, "") }.select { |line| !line.empty? }.collect do |line| 5 | parts = line.split(/\s*=\s*/, 2).collect { |part| part.gsub(/^\s+/, '').gsub(/\s+$/, '') } 6 | [ parts[0].to_sym, parts[1] || '' ] 7 | end.flatten ] 8 | $config.default = '' 9 | end 10 | 11 | def c(idx) 12 | idx_s = idx.to_s 13 | var = (ENV[idx_s].nil? ? $config[idx.to_sym] : ENV[idx_s]).to_s 14 | var.gsub(/\$[\({](.*?)[\)}]/) { c($1) }.gsub(/^\s+/, '').gsub(/\s+$/, '') 15 | end 16 | 17 | def c?(idx) 18 | c(idx).to_bool 19 | end 20 | -------------------------------------------------------------------------------- /rake.d/extensions.rb: -------------------------------------------------------------------------------- 1 | class NilClass 2 | def to_bool 3 | false 4 | end 5 | 6 | def blank? 7 | true 8 | end 9 | end 10 | 11 | class String 12 | def to_bool 13 | %w{1 true yes}.include? self.downcase 14 | end 15 | 16 | def blank? 17 | empty? 18 | end 19 | end 20 | 21 | class TrueClass 22 | def to_bool 23 | self 24 | end 25 | end 26 | 27 | class FalseClass 28 | def to_bool 29 | self 30 | end 31 | end 32 | -------------------------------------------------------------------------------- /rake.d/library.rb: -------------------------------------------------------------------------------- 1 | class Library < Target 2 | def initialize(name) 3 | super name 4 | @build_dll = false 5 | end 6 | 7 | def build_dll(build_dll_as_well = true) 8 | @build_dll = build_dll_as_well 9 | self 10 | end 11 | 12 | def create_specific 13 | file "#{@target}.a" => @objects do |t| 14 | FileUtils.rm_f t.name 15 | runq " AR #{t.name}", "#{c(:AR)} rcu #{t.name} #{@objects.join(" ")}" 16 | runq " RANLIB #{t.name}", "#{c(:RANLIB)} #{t.name}" 17 | end 18 | 19 | return self unless @build_dll 20 | 21 | file "#{@target}.dll" => @objects do |t| 22 | runq " LD/DLL #{t.name}", <<-COMMAND 23 | #{c(:CXX)} #{$flags[:ldflags]} #{$system_libdirs} -shared -Wl,--export-all -Wl,--out-implib=#{t.name}.a -o #{t.name} #{@objects.join(" ")} #{@libraries.join(" ")} 24 | COMMAND 25 | end 26 | 27 | self 28 | end 29 | end 30 | -------------------------------------------------------------------------------- /rake.d/vendor/comp_tree-1.0.1/lib/comp_tree/queue/queue.rb: -------------------------------------------------------------------------------- 1 | require("comp_tree/queue/queue_" + (RUBY_VERSION < "1.9" ? "18" : "19")) 2 | -------------------------------------------------------------------------------- /rake.d/vendor/comp_tree-1.0.1/lib/comp_tree/queue/queue_18.rb: -------------------------------------------------------------------------------- 1 | 2 | require 'thread' 3 | 4 | module CompTree 5 | # 6 | # minimal version of standard Queue 7 | # 8 | class Queue 9 | def initialize 10 | @queue = [] 11 | @waiting = [] 12 | end 13 | 14 | def push(object) 15 | Thread.critical = true 16 | @queue.push object 17 | if thread = @waiting.shift 18 | thread.wakeup 19 | end 20 | ensure 21 | Thread.critical = false 22 | end 23 | 24 | def pop 25 | while (Thread.critical = true ; @queue.empty?) 26 | @waiting.push Thread.current 27 | Thread.stop 28 | end 29 | @queue.shift 30 | ensure 31 | Thread.critical = false 32 | end 33 | end 34 | end 35 | -------------------------------------------------------------------------------- /rake.d/vendor/comp_tree-1.0.1/lib/comp_tree/queue/queue_19.rb: -------------------------------------------------------------------------------- 1 | 2 | module CompTree 3 | # 4 | # minimal version of standard Queue 5 | # 6 | class Queue 7 | def initialize 8 | @queue = [] 9 | @waiting = [] 10 | @mutex = Mutex.new 11 | end 12 | 13 | def push(object) 14 | @mutex.synchronize { 15 | @queue.push object 16 | if thread = @waiting.shift 17 | thread.wakeup 18 | end 19 | } 20 | end 21 | 22 | def pop 23 | @mutex.synchronize { 24 | while true 25 | if @queue.empty? 26 | @waiting.push Thread.current 27 | @mutex.sleep 28 | else 29 | return @queue.shift 30 | end 31 | end 32 | } 33 | end 34 | end 35 | end 36 | -------------------------------------------------------------------------------- /rake.d/vendor/drake-0.8.7.0.2.4/lib/rake/classic_namespace.rb: -------------------------------------------------------------------------------- 1 | # The following classes used to be in the top level namespace. 2 | # Loading this file enables compatibility with older Rakefile that 3 | # referenced Task from the top level. 4 | 5 | Task = Rake::Task 6 | FileTask = Rake::FileTask 7 | FileCreationTask = Rake::FileCreationTask 8 | RakeApp = Rake::Application 9 | -------------------------------------------------------------------------------- /rake.d/vendor/drake-0.8.7.0.2.4/lib/rake/contrib/compositepublisher.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | module Rake 4 | 5 | # Manage several publishers as a single entity. 6 | class CompositePublisher 7 | def initialize 8 | @publishers = [] 9 | end 10 | 11 | # Add a publisher to the composite. 12 | def add(pub) 13 | @publishers << pub 14 | end 15 | 16 | # Upload all the individual publishers. 17 | def upload 18 | @publishers.each { |p| p.upload } 19 | end 20 | end 21 | 22 | end 23 | 24 | 25 | -------------------------------------------------------------------------------- /rake.d/vendor/drake-0.8.7.0.2.4/lib/rake/contrib/rubyforgepublisher.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | require 'rake/contrib/sshpublisher' 4 | 5 | module Rake 6 | 7 | class RubyForgePublisher < SshDirPublisher 8 | attr_reader :project, :proj_id, :user 9 | 10 | def initialize(projname, user) 11 | super( 12 | "#{user}@rubyforge.org", 13 | "/var/www/gforge-projects/#{projname}", 14 | "html") 15 | end 16 | end 17 | 18 | end 19 | -------------------------------------------------------------------------------- /rake.d/vendor/drake-0.8.7.0.2.4/lib/rake/rake_test_loader.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | # Load the test files from the command line. 4 | 5 | ARGV.each { |f| load f unless f =~ /^-/ } 6 | -------------------------------------------------------------------------------- /rake.d/vendor/drake-0.8.7.0.2.4/lib/rake/ruby182_test_unit_fix.rb: -------------------------------------------------------------------------------- 1 | module Test 2 | module Unit 3 | module Collector 4 | class Dir 5 | undef collect_file 6 | def collect_file(name, suites, already_gathered) 7 | # loadpath = $:.dup 8 | dir = File.dirname(File.expand_path(name)) 9 | $:.unshift(dir) unless $:.first == dir 10 | if(@req) 11 | @req.require(name) 12 | else 13 | require(name) 14 | end 15 | find_test_cases(already_gathered).each{|t| add_suite(suites, t.suite)} 16 | ensure 17 | # $:.replace(loadpath) 18 | $:.delete_at $:.rindex(dir) 19 | end 20 | end 21 | end 22 | end 23 | end 24 | -------------------------------------------------------------------------------- /rake.d/vendor/drake-0.8.7.0.2.4/lib/rake/runtest.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | require 'test/unit' 4 | require 'test/unit/assertions' 5 | 6 | module Rake 7 | include Test::Unit::Assertions 8 | 9 | def run_tests(pattern='test/test*.rb', log_enabled=false) 10 | Dir["#{pattern}"].each { |fn| 11 | puts fn if log_enabled 12 | begin 13 | load fn 14 | rescue Exception => ex 15 | puts "Error in #{fn}: #{ex.message}" 16 | puts ex.backtrace 17 | assert false 18 | end 19 | } 20 | end 21 | 22 | extend self 23 | end 24 | -------------------------------------------------------------------------------- /rake.d/vendor/drake-0.8.7.0.2.4/lib/rake/tasklib.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | require 'rake' 4 | 5 | module Rake 6 | 7 | # Base class for Task Libraries. 8 | class TaskLib 9 | include Cloneable 10 | 11 | # Make a symbol by pasting two strings together. 12 | # 13 | # NOTE: DEPRECATED! This method is kinda stupid. I don't know why 14 | # I didn't just use string interpolation. But now other task 15 | # libraries depend on this so I can't remove it without breaking 16 | # other people's code. So for now it stays for backwards 17 | # compatibility. BUT DON'T USE IT. 18 | def paste(a,b) # :nodoc: 19 | (a.to_s + b.to_s).intern 20 | end 21 | end 22 | 23 | end 24 | -------------------------------------------------------------------------------- /share/desktop/mkvinfo.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Type=Application 3 | Name=mkvinfo 4 | GenericName=Show information about MKV files 5 | GenericName[de]=Informationen über MKV-Dateien anzeigen 6 | GenericName[es]=Mostrar información sobre ficheros MKV 7 | GenericName[zh_CN]=显示 MKV 文件的信息 8 | GenericName[zh_TW]=顯示 MKV 檔資訊 9 | Icon=mkvinfo 10 | Exec=mkvinfo -g 11 | Terminal=false 12 | MimeType=video/x-matroska;audio/x-matroska; 13 | Categories=AudioVideo;AudioVideoEditing; 14 | InitialPreference=-1 15 | -------------------------------------------------------------------------------- /share/desktop/mkvmergeGUI.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Type=Application 3 | Name=mkvmerge GUI 4 | GenericName=MKV files creator 5 | GenericName[de]=MKV-Dateien erstellen 6 | GenericName[es]=Creador de ficheros MKV 7 | GenericName[fr]=Créateur de fichiers MKV 8 | GenericName[zh_CN]=MKV 文件创建器 9 | GenericName[zh_TW]=MKV 檔製作軟體 10 | Icon=mkvmergeGUI 11 | Exec=mmg 12 | Terminal=false 13 | MimeType=application/x-mmg-settings;video/x-matroska;audio/x-matroska; 14 | Categories=GNOME;AudioVideo;AudioVideoEditing; 15 | InitialPreference=-5 16 | -------------------------------------------------------------------------------- /share/icons/32x32/mkvinfo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/share/icons/32x32/mkvinfo.png -------------------------------------------------------------------------------- /share/icons/32x32/mkvmergeGUI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/share/icons/32x32/mkvmergeGUI.png -------------------------------------------------------------------------------- /share/icons/64x64/mkvinfo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/share/icons/64x64/mkvinfo.png -------------------------------------------------------------------------------- /share/icons/64x64/mkvmergeGUI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/share/icons/64x64/mkvmergeGUI.png -------------------------------------------------------------------------------- /share/icons/windows/mkvinfo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/share/icons/windows/mkvinfo.ico -------------------------------------------------------------------------------- /share/icons/windows/mkvmergeGUI.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/share/icons/windows/mkvmergeGUI.ico -------------------------------------------------------------------------------- /share/mime/mkvtoolnix.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | mkvmerge GUI settings 5 | Einstellungen für mkvmerge GUI 6 | ajustes de mkvmerge GUI 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/Rakefile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env rake 2 | # -*- mode: ruby; -*- 3 | 4 | import ['..', '../..', '../../..'].collect { |subdir| FileList[File.dirname(__FILE__) + "/#{subdir}/build-config.in"].to_a }.flatten.compact.first.gsub(/build-config.in/, 'Rakefile') 5 | -------------------------------------------------------------------------------- /src/common/Rakefile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env rake 2 | # -*- mode: ruby; -*- 3 | 4 | import ['..', '../..', '../../..'].collect { |subdir| FileList[File.dirname(__FILE__) + "/#{subdir}/build-config.in"].to_a }.flatten.compact.first.gsub(/build-config.in/, 'Rakefile') 5 | -------------------------------------------------------------------------------- /src/common/at_scope_exit.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvmerge -- utility for splicing together matroska files 3 | from component media subtypes 4 | 5 | Distributed under the GPL 6 | see the file COPYING for details 7 | or visit http://www.gnu.org/copyleft/gpl.html 8 | 9 | run code at scope exit 10 | 11 | Written by Moritz Bunkus . 12 | */ 13 | 14 | #ifndef MTX_COMMON_AT_SCOPE_EXIT_H 15 | #define MTX_COMMON_AT_SCOPE_EXIT_H 16 | 17 | class at_scope_exit_c { 18 | private: 19 | std::function m_code; 20 | public: 21 | at_scope_exit_c(const std::function &code) : m_code(code) {} 22 | ~at_scope_exit_c() { 23 | m_code(); 24 | } 25 | }; 26 | 27 | #endif // MTX_COMMON_AT_SCOPE_EXIT_H 28 | -------------------------------------------------------------------------------- /src/common/chapters/Rakefile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env rake 2 | # -*- mode: ruby; -*- 3 | 4 | import ['..', '../..', '../../..'].collect { |subdir| FileList[File.dirname(__FILE__) + "/#{subdir}/build-config.in"].to_a }.flatten.compact.first.gsub(/build-config.in/, 'Rakefile') 5 | -------------------------------------------------------------------------------- /src/common/command_line.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvmerge -- utility for splicing together matroska files 3 | from component media subtypes 4 | 5 | Distributed under the GPL 6 | see the file COPYING for details 7 | or visit http://www.gnu.org/copyleft/gpl.html 8 | 9 | Definitions for command line helper functions 10 | 11 | Written by Moritz Bunkus . 12 | */ 13 | 14 | #ifndef __MTX_COMMON_COMMAND_LINE_H 15 | #define __MTX_COMMON_COMMAND_LINE_H 16 | 17 | #include "common/os.h" 18 | 19 | #include 20 | #include 21 | 22 | extern std::string usage_text, version_info; 23 | 24 | void usage(int exit_code = 0); 25 | bool handle_common_cli_args(std::vector &args, const std::string &redirect_output_short); 26 | 27 | #endif // __MTX_COMMON_COMMAND_LINE_H 28 | -------------------------------------------------------------------------------- /src/common/common_pch.h: -------------------------------------------------------------------------------- 1 | #ifndef __MTX_COMMON_COMMON_GCH_H 2 | #define __MTX_COMMON_COMMON_GCH_H 3 | 4 | #include "common/common.h" 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /src/common/curl.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvmerge -- utility for splicing together matroska files 3 | from component media subtypes 4 | 5 | Distributed under the GPL 6 | see the file COPYING for details 7 | or visit http://www.gnu.org/copyleft/gpl.html 8 | 9 | even easier interface to CURL 10 | 11 | Written by Moritz Bunkus . 12 | */ 13 | 14 | #ifndef __MTX_COMMON_CURL_H 15 | # define __MTX_COMMON_CURL_H 16 | 17 | # include "common/common_pch.h" 18 | 19 | # if defined(HAVE_CURL_EASY_H) 20 | 21 | # if defined(SYS_WINDOWS) 22 | # include 23 | # endif // defined(SYS_WINDOWS) 24 | # include 25 | # include 26 | 27 | CURLcode retrieve_via_curl(const std::string &url, std::string &data, int connect_timeout = 10); 28 | 29 | # endif // defined(HAVE_CURL_EASY_H) 30 | 31 | #endif // __MTX_COMMON_CURL_H 32 | -------------------------------------------------------------------------------- /src/common/debugging.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvmerge -- utility for splicing together matroska files 3 | from component media subtypes 4 | 5 | Distributed under the GPL 6 | see the file COPYING for details 7 | or visit http://www.gnu.org/copyleft/gpl.html 8 | 9 | definitions used in all programs, helper functions 10 | 11 | Written by Moritz Bunkus . 12 | */ 13 | 14 | #ifndef __MTX_COMMON_DEBUGGING_H 15 | #define __MTX_COMMON_DEBUGGING_H 16 | 17 | #include "common/os.h" 18 | 19 | #include 20 | 21 | bool debugging_requested(const char *option, std::string *arg = NULL); 22 | bool debugging_requested(const std::string &option, std::string *arg = NULL); 23 | void request_debugging(const std::string &options); 24 | void clear_debugging_requests(); 25 | void init_debugging(); 26 | 27 | int parse_debug_interval_arg(const std::string &option, int default_value = 1000, int invalid_value = -1); 28 | 29 | #endif // __MTX_COMMON_DEBUGGING_H 30 | -------------------------------------------------------------------------------- /src/common/extern_data.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvmerge -- utility for splicing together matroska files 3 | from component media subtypes 4 | 5 | Distributed under the GPL 6 | see the file COPYING for details 7 | or visit http://www.gnu.org/copyleft/gpl.html 8 | 9 | declarations for ComboBox data 10 | 11 | Written by Moritz Bunkus . 12 | */ 13 | 14 | #ifndef __MTX_COMMON_EXTERN_DATA_H 15 | #define __MTX_COMMON_EXTERN_DATA_H 16 | 17 | #include "os.h" 18 | 19 | #include 20 | 21 | typedef struct { 22 | const char *name, *extensions; 23 | } mime_type_t; 24 | 25 | extern const char *sub_charsets[]; 26 | extern const mime_type_t mime_types[]; 27 | extern const char *cctlds[]; 28 | 29 | std::string guess_mime_type(std::string ext, bool is_file); 30 | bool is_valid_cctld(const std::string &s); 31 | 32 | #endif // __MTX_COMMON_EXTERN_DATA_H 33 | -------------------------------------------------------------------------------- /src/common/hdsub.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvmerge -- utility for splicing together matroska files 3 | from component media subtypes 4 | 5 | Distributed under the GPL 6 | see the file COPYING for details 7 | or visit http://www.gnu.org/copyleft/gpl.html 8 | 9 | definitions and helper functions for PGS/SUP subtitles 10 | 11 | Written by Moritz Bunkus . 12 | */ 13 | 14 | #ifndef __MTX_COMMON_PGSSUP_H 15 | #define __MTX_COMMON_PGSSUP_H 16 | 17 | #include "common/os.h" 18 | 19 | #define HDSUB_FILE_MAGIC 0x5350 // "SP" big endian 20 | 21 | #endif // __MTX_COMMON_HDSUB_H 22 | 23 | -------------------------------------------------------------------------------- /src/common/id3.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvmerge -- utility for splicing together matroska files 3 | from component media subtypes 4 | 5 | Distributed under the GPL 6 | see the file COPYING for details 7 | or visit http://www.gnu.org/copyleft/gpl.html 8 | 9 | helper functions for ID3 tags 10 | 11 | Written by Moritz Bunkus . 12 | */ 13 | 14 | #ifndef __MTX_COMMON_ID3_COMMON_H 15 | #define __MTX_COMMON_ID3_COMMON_H 16 | 17 | #include "common/os.h" 18 | 19 | class mm_io_c; 20 | 21 | int skip_id3v2_tag(mm_io_c &io); 22 | int id3v1_tag_present_at_end(mm_io_c &io); 23 | int id3v2_tag_present_at_end(mm_io_c &io); 24 | int id3_tag_present_at_end(mm_io_c &io); 25 | 26 | #endif /* __ID3_COMMON_H */ 27 | -------------------------------------------------------------------------------- /src/common/ivf.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | mkvmerge -- utility for splicing together matroska files 3 | from component media subtypes 4 | 5 | Distributed under the GPL 6 | see the file COPYING for details 7 | or visit http://www.gnu.org/copyleft/gpl.html 8 | 9 | helper functions for IVF data 10 | 11 | Written by Moritz Bunkus . 12 | */ 13 | 14 | #include "common/common_pch.h" 15 | 16 | #include 17 | 18 | #include "common/ivf.h" 19 | 20 | ivf_file_header_t::ivf_file_header_t() 21 | { 22 | memset(this, 0, sizeof(*this)); 23 | } 24 | 25 | ivf_frame_header_t::ivf_frame_header_t() 26 | { 27 | memset(this, 0, sizeof(*this)); 28 | } 29 | -------------------------------------------------------------------------------- /src/common/math.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvmerge -- utility for splicing together matroska files 3 | from component media subtypes 4 | 5 | Distributed under the GPL 6 | see the file COPYING for details 7 | or visit http://www.gnu.org/copyleft/gpl.html 8 | 9 | math helper functions 10 | 11 | Written by Moritz Bunkus . 12 | */ 13 | 14 | #ifndef __MTX_COMMON_MATH_H 15 | #define __MTX_COMMON_MATH_H 16 | 17 | #include "common/os.h" 18 | 19 | #define irnd(a) ((int64_t)((double)(a) + 0.5)) 20 | #define iabs(a) ((a) < 0 ? (a) * -1 : (a)) 21 | 22 | uint32_t round_to_nearest_pow2(uint32_t value); 23 | 24 | int int_log2(uint32_t value); 25 | 26 | #endif // __MTX_COMMON_MATH_H 27 | -------------------------------------------------------------------------------- /src/common/mp3.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nmaier/mkvtoolnix/fec28879c0477dd0a22bbe62c7398a5c818ec6de/src/common/mp3.cpp -------------------------------------------------------------------------------- /src/common/pgssup.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvmerge -- utility for splicing together matroska files 3 | from component media subtypes 4 | 5 | Distributed under the GPL 6 | see the file COPYING for details 7 | or visit http://www.gnu.org/copyleft/gpl.html 8 | 9 | definitions and helper functions for PGS/SUP subtitles 10 | 11 | Written by Moritz Bunkus . 12 | */ 13 | 14 | #ifndef __MTX_COMMON_PGSSUP_H 15 | #define __MTX_COMMON_PGSSUP_H 16 | 17 | #include "common/os.h" 18 | 19 | #define PGSSUP_FILE_MAGIC 0x5047 // "PG" big endian 20 | #define PGSSUP_PALETTE_SEGMENT 0x14 21 | #define PGSSUP_PICTURE_SEGMENT 0x15 22 | #define PGSSUP_PRESENTATION_SEGMENT 0x16 23 | #define PGSSUP_WINDOW_SEGMENT 0x17 24 | #define PGSSUP_DISPLAY_SEGMENT 0x80 25 | 26 | #endif // __MTX_COMMON_PGSSUP_H 27 | 28 | -------------------------------------------------------------------------------- /src/common/qt.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvmerge -- utility for splicing together matroska files 3 | from component media subtypes 4 | 5 | Distributed under the GPL 6 | see the file COPYING for details 7 | or visit http://www.gnu.org/copyleft/gpl.html 8 | 9 | definitions used by Qt GUIs 10 | 11 | Written by Moritz Bunkus . 12 | */ 13 | 14 | #ifndef __MTX_COMMON_QTCOMMON_H 15 | #define __MTX_COMMON_QTCOMMON_H 16 | 17 | #define Q(s) QString::fromUtf8(s) 18 | 19 | #endif // __MTX_COMMON_QTCOMMON_H 20 | -------------------------------------------------------------------------------- /src/common/segment_tracks.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvmerge -- utility for splicing together matroska files 3 | from component media subtypes 4 | 5 | Distributed under the GPL 6 | see the file COPYING for details 7 | or visit http://www.gnu.org/copyleft/gpl.html 8 | 9 | segment tracks helper functions 10 | 11 | Written by Moritz Bunkus . 12 | */ 13 | 14 | #ifndef __MTX_COMMON_SEGMENT_TRACKS_H 15 | #define __MTX_COMMON_SEGMENT_TRACKS_H 16 | 17 | #include "os.h" 18 | 19 | #include 20 | 21 | using namespace libebml; 22 | using namespace libmatroska; 23 | 24 | void fix_mandatory_segment_tracks_elements(EbmlElement *e); 25 | 26 | #endif // __MTX_COMMON_SEGMENT_TRACKS_H 27 | 28 | -------------------------------------------------------------------------------- /src/common/segmentinfo.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvmerge -- utility for splicing together matroska files 3 | from component media subtypes 4 | 5 | Distributed under the GPL 6 | see the file COPYING for details 7 | or visit http://www.gnu.org/copyleft/gpl.html 8 | 9 | segment info parser/writer functions 10 | 11 | Written by Moritz Bunkus and 12 | Steve Lhomme . 13 | */ 14 | 15 | #ifndef __MTX_COMMON_SEGMENTINFO_H 16 | #define __MTX_COMMON_SEGMENTINFO_H 17 | 18 | #include "common/common_pch.h" 19 | 20 | #include 21 | 22 | #include "common/mm_io.h" 23 | 24 | using namespace libebml; 25 | using namespace libmatroska; 26 | 27 | KaxInfo *parse_segmentinfo(const std::string &file_name, bool exception_on_error = false); 28 | 29 | KaxInfo *parse_xml_segmentinfo(mm_text_io_c *in, bool exception_on_error = false); 30 | 31 | void fix_mandatory_segmentinfo_elements(EbmlElement *e); 32 | 33 | #endif // __MTX_COMMON_SEGMENTINFO_H 34 | 35 | -------------------------------------------------------------------------------- /src/common/strings/Rakefile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env rake 2 | # -*- mode: ruby; -*- 3 | 4 | import ['..', '../..', '../../..'].collect { |subdir| FileList[File.dirname(__FILE__) + "/#{subdir}/build-config.in"].to_a }.flatten.compact.first.gsub(/build-config.in/, 'Rakefile') 5 | -------------------------------------------------------------------------------- /src/common/strings/utf8.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvmerge -- utility for splicing together matroska files 3 | from component media subtypes 4 | 5 | Distributed under the GPL 6 | see the file COPYING for details 7 | or visit http://www.gnu.org/copyleft/gpl.html 8 | 9 | Definitions for locale handling functions 10 | 11 | Written by Moritz Bunkus . 12 | */ 13 | 14 | #ifndef __MTX_COMMON_LOCALE_UTF8_H 15 | #define __MTX_COMMON_LOCALE_UTF8_H 16 | 17 | #include "common/os.h" 18 | 19 | #include 20 | 21 | std::wstring to_wide(const std::string &source); 22 | std::string to_utf8(const std::wstring &source); 23 | 24 | size_t get_width_in_em(wchar_t c); 25 | size_t get_width_in_em(const std::wstring &s); 26 | 27 | #endif // __MTX_COMMON_LOCALE_UTF8_H 28 | -------------------------------------------------------------------------------- /src/common/tags/Rakefile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env rake 2 | # -*- mode: ruby; -*- 3 | 4 | import ['..', '../..', '../../..'].collect { |subdir| FileList[File.dirname(__FILE__) + "/#{subdir}/build-config.in"].to_a }.flatten.compact.first.gsub(/build-config.in/, 'Rakefile') 5 | -------------------------------------------------------------------------------- /src/common/tags/parser.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvmerge -- utility for splicing together matroska files 3 | from component media subtypes 4 | 5 | Distributed under the GPL 6 | see the file COPYING for details 7 | or visit http://www.gnu.org/copyleft/gpl.html 8 | 9 | definition of global variables and functions for the XML tag parser 10 | 11 | Written by Moritz Bunkus . 12 | */ 13 | 14 | #ifndef __MTX_COMMON_TAGPARSER_H 15 | #define __MTX_COMMON_TAGPARSER_H 16 | 17 | #include "common/os.h" 18 | 19 | #include 20 | 21 | namespace libmatroska { 22 | class KaxTags; 23 | }; 24 | 25 | using namespace libmatroska; 26 | 27 | void parse_xml_tags(const std::string &name, KaxTags *tags); 28 | 29 | #endif // __MTX_COMMON_TAGPARSER_H 30 | -------------------------------------------------------------------------------- /src/common/tags/writer.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | mkvextract -- extract tracks from Matroska files into other files 3 | 4 | Distributed under the GPL 5 | see the file COPYING for details 6 | or visit http://www.gnu.org/copyleft/gpl.html 7 | 8 | writes tags in XML format 9 | 10 | Written by Moritz Bunkus . 11 | */ 12 | 13 | #include "common/common_pch.h" 14 | 15 | #include 16 | 17 | #include "common/xml/element_writer.h" 18 | 19 | using namespace libmatroska; 20 | 21 | void 22 | write_tags_xml(KaxTags &tags, 23 | mm_io_c *out) { 24 | size_t i; 25 | 26 | for (i = 0; NULL != tag_elements[i].name; i++) { 27 | tag_elements[i].start_hook = NULL; 28 | tag_elements[i].end_hook = NULL; 29 | } 30 | 31 | for (i = 0; tags.ListSize() > i; i++) 32 | write_xml_element_rec(1, 0, tags[i], out, tag_elements); 33 | } 34 | -------------------------------------------------------------------------------- /src/common/tags/writer.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvextract -- extract tracks from Matroska files into other files 3 | 4 | Distributed under the GPL 5 | see the file COPYING for details 6 | or visit http://www.gnu.org/copyleft/gpl.html 7 | 8 | writes tags in XML format 9 | 10 | Written by Moritz Bunkus . 11 | */ 12 | 13 | #ifndef __MTX_COMMON_TAGWRITER_H 14 | #define __MTX_COMMON_TAGWRITER_H 15 | 16 | #include "common/os.h" 17 | 18 | #include 19 | #include 20 | 21 | using namespace libmatroska; 22 | 23 | class mm_io_c; 24 | 25 | void write_tags_xml(KaxTags &tags, mm_io_c *out); 26 | 27 | #endif // __MTX_COMMON_TAGWRITER_H 28 | -------------------------------------------------------------------------------- /src/common/terminal.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvmerge -- utility for splicing together matroska files 3 | from component media subtypes 4 | 5 | Distributed under the GPL 6 | see the file COPYING for details 7 | or visit http://www.gnu.org/copyleft/gpl.html 8 | 9 | terminal access functions 10 | 11 | Written by Moritz Bunkus . 12 | */ 13 | 14 | #ifndef __MTX_COMMON_TERMINAL_H 15 | #define __MTX_COMMON_TERMINAL_H 16 | 17 | #include "common/os.h" 18 | 19 | int get_terminal_columns(); 20 | 21 | #endif // __MTX_COMMON_TERMINAL_H 22 | -------------------------------------------------------------------------------- /src/common/utf8_codecvt_facet.cpp: -------------------------------------------------------------------------------- 1 | // Copyright Vladimir Prus 2004. 2 | // Distributed under the Boost Software License, Version 1.0. 3 | // (See accompanying file LICENSE_1_0.txt 4 | // or copy at http://www.boost.org/LICENSE_1_0.txt) 5 | 6 | // For HP-UX, request that WCHAR_MAX and WCHAR_MIN be defined as macros, 7 | // not casts. See ticket 5048 8 | #define _INCLUDE_STDCSOURCE_199901 9 | 10 | #ifndef BOOST_SYSTEM_NO_DEPRECATED 11 | # define BOOST_SYSTEM_NO_DEPRECATED 12 | #endif 13 | 14 | #define BOOST_FILESYSTEM_SOURCE 15 | #include 16 | 17 | #define BOOST_UTF8_BEGIN_NAMESPACE namespace mtx { 18 | 19 | #define BOOST_UTF8_END_NAMESPACE } 20 | #define BOOST_UTF8_DECL BOOST_FILESYSTEM_DECL 21 | 22 | #include "../../lib/boost/utf8_codecvt_facet/utf8_codecvt_facet.cpp" 23 | 24 | #undef BOOST_UTF8_BEGIN_NAMESPACE 25 | #undef BOOST_UTF8_END_NAMESPACE 26 | #undef BOOST_UTF8_DECL 27 | -------------------------------------------------------------------------------- /src/common/utf8_codecvt_facet.h: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2001 Ronald Garcia, Indiana University (garcia@osl.iu.edu) 2 | // Andrew Lumsdaine, Indiana University (lums@osl.iu.edu). 3 | 4 | // Distributed under the Boost Software License, Version 1.0. 5 | // (See http://www.boost.org/LICENSE_1_0.txt) 6 | 7 | #ifndef __MTX_COMMON_UTF8_FILECVT_FACET_H 8 | #define __MTX_COMMON_UTF8_FILECVT_FACET_H 9 | 10 | #include 11 | 12 | #define BOOST_UTF8_BEGIN_NAMESPACE namespace mtx { 13 | 14 | #define BOOST_UTF8_END_NAMESPACE } 15 | #define BOOST_UTF8_DECL BOOST_FILESYSTEM_DECL 16 | 17 | #include 18 | 19 | #undef BOOST_UTF8_BEGIN_NAMESPACE 20 | #undef BOOST_UTF8_END_NAMESPACE 21 | #undef BOOST_UTF8_DECL 22 | 23 | #endif 24 | -------------------------------------------------------------------------------- /src/common/webm.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | mkvmerge -- utility for splicing together matroska files 3 | from component media subtypes 4 | 5 | Distributed under the GPL 6 | see the file COPYING for details 7 | or visit http://www.gnu.org/copyleft/gpl.html 8 | 9 | helper functions for WebM 10 | 11 | Written by Moritz Bunkus . 12 | */ 13 | 14 | #include "common/common_pch.h" 15 | 16 | #include "common/webm.h" 17 | 18 | #include 19 | #include 20 | 21 | bool 22 | is_webm_file_name(const std::string &file_name) { 23 | static boost::regex s_webm_file_name_re("\\.webm(?:a|v)?$", boost::regex::perl); 24 | return boost::regex_search(file_name, s_webm_file_name_re); 25 | } 26 | -------------------------------------------------------------------------------- /src/common/webm.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvmerge -- utility for splicing together matroska files 3 | from component media subtypes 4 | 5 | Distributed under the GPL 6 | see the file COPYING for details 7 | or visit http://www.gnu.org/copyleft/gpl.html 8 | 9 | definitions and helper functions for WebM 10 | 11 | Written by Moritz Bunkus . 12 | */ 13 | 14 | #ifndef __MTX_COMMON_WEBM_H 15 | #define __MTX_COMMON_WEBM_H 16 | 17 | #include "common/os.h" 18 | 19 | #include 20 | 21 | bool is_webm_file_name(const std::string &file_name); 22 | 23 | #endif // __MTX_COMMON_WEBM_H 24 | -------------------------------------------------------------------------------- /src/common/win_itaskbarlist3.cpp: -------------------------------------------------------------------------------- 1 | #include "os.h" 2 | 3 | #if defined(SYS_WINDOWS) 4 | 5 | # include "common/win_itaskbarlist3.h" 6 | 7 | GUID_EXT const GUID MTX_CLSID_TaskbarList GUID_SECT = { 0x56fdf344, 0xfd6d, 0x11d0, { 0x95, 0x8a, 0x0, 0x60, 0x97, 0xc9, 0xa0, 0x90 } }; 8 | 9 | #endif // SYS_WINDOWS 10 | -------------------------------------------------------------------------------- /src/common/xml/Rakefile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env rake 2 | # -*- mode: ruby; -*- 3 | 4 | import ['..', '../..', '../../..'].collect { |subdir| FileList[File.dirname(__FILE__) + "/#{subdir}/build-config.in"].to_a }.flatten.compact.first.gsub(/build-config.in/, 'Rakefile') 5 | -------------------------------------------------------------------------------- /src/common/xml/xml.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvmerge -- utility for splicing together matroska files 3 | from component media subtypes 4 | 5 | Distributed under the GPL 6 | see the file COPYING for details 7 | or visit http://www.gnu.org/copyleft/gpl.html 8 | 9 | XML helper functions 10 | 11 | Written by Moritz Bunkus . 12 | */ 13 | 14 | #ifndef __MTX_COMMON_XML_H 15 | #define __MTX_COMMON_XML_H 16 | 17 | #include "common/os.h" 18 | 19 | #include 20 | 21 | std::string escape_xml(const std::string &src); 22 | std::string create_xml_node_name(const char *name, const char **atts); 23 | 24 | #endif // __MTX_COMMON_XML_H 25 | -------------------------------------------------------------------------------- /src/extract/Rakefile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env rake 2 | # -*- mode: ruby; -*- 3 | 4 | import ['..', '../..', '../../..'].collect { |subdir| FileList[File.dirname(__FILE__) + "/#{subdir}/build-config.in"].to_a }.flatten.compact.first.gsub(/build-config.in/, 'Rakefile') 5 | -------------------------------------------------------------------------------- /src/extract/manifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | WindowsExecutable 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/extract/options.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | mkvextract -- extract tracks from Matroska files into other files 3 | 4 | Distributed under the GPL 5 | see the file COPYING for details 6 | or visit http://www.gnu.org/copyleft/gpl.html 7 | 8 | Written by Moritz Bunkus . 9 | */ 10 | 11 | #include "common/common_pch.h" 12 | 13 | #include 14 | 15 | #include "extract/mkvextract.h" 16 | #include "extract/options.h" 17 | 18 | options_c::options_c() 19 | : m_simple_chapter_format(false) 20 | , m_parse_mode(kax_analyzer_c::parse_mode_fast) 21 | , m_extraction_mode(options_c::em_unknown) 22 | { 23 | } 24 | -------------------------------------------------------------------------------- /src/extract/options.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvextract -- extract tracks from Matroska files into other files 3 | 4 | Distributed under the GPL 5 | see the file COPYING for details 6 | or visit http://www.gnu.org/copyleft/gpl.html 7 | 8 | Written by Moritz Bunkus . 9 | */ 10 | 11 | #ifndef __EXTRACT_OPTIONS_H 12 | #define __EXTRACT_OPTIONS_H 13 | 14 | #include "common/os.h" 15 | 16 | #include 17 | #include 18 | 19 | class options_c { 20 | public: 21 | enum extraction_mode_e { 22 | em_unknown, 23 | em_attachments, 24 | em_chapters, 25 | em_cuesheet, 26 | em_tags, 27 | em_timecodes_v2, 28 | em_tracks 29 | }; 30 | 31 | std::string m_file_name; 32 | bool m_simple_chapter_format; 33 | kax_analyzer_c::parse_mode_e m_parse_mode; 34 | extraction_mode_e m_extraction_mode; 35 | 36 | std::vector m_tracks; 37 | 38 | public: 39 | options_c(); 40 | }; 41 | 42 | #endif // __EXTRACT_OPTIONS_H 43 | -------------------------------------------------------------------------------- /src/extract/resources.rc: -------------------------------------------------------------------------------- 1 | MATROSKAICON ICON "../../share/icons/windows/mkvmergeGUI.ico" 2 | 3 | 1 VERSIONINFO 4 | FILEVERSION 5, 1, 0, 0 5 | PRODUCTVERSION 5, 1, 0, 0 6 | FILEFLAGSMASK 0x3f 7 | FILEOS 0x4 8 | BEGIN 9 | BLOCK "StringFileInfo" 10 | BEGIN 11 | BLOCK "040904B0" 12 | BEGIN 13 | VALUE "CompanyName", "Moritz Bunkus" 14 | VALUE "FileDescription", "mkvextract" 15 | VALUE "FileVersion", "5.1.0" 16 | VALUE "InternalName", "mkvextract" 17 | VALUE "LegalCopyright", "Released under the GNU Pulic License http://www.gnu.org/licenses/gpl-2.0.html" 18 | VALUE "OriginalFilename", "mkvextract" 19 | VALUE "ProductName", "MKVToolNix" 20 | VALUE "ProductVersion", "5.1.0" 21 | END 22 | END 23 | BLOCK "VarFileInfo" 24 | BEGIN 25 | VALUE "Translation", 0x0409, 1252 // Englisch (USA) 26 | END 27 | END 28 | 29 | 1 RT_MANIFEST "manifest.xml" 30 | -------------------------------------------------------------------------------- /src/extract/track_spec.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | mkvextract -- extract tracks from Matroska files into other files 3 | 4 | Distributed under the GPL 5 | see the file COPYING for details 6 | or visit http://www.gnu.org/copyleft/gpl.html 7 | 8 | extracts tracks and other items from Matroska files into other files 9 | 10 | Written by Moritz Bunkus . 11 | */ 12 | 13 | #include "common/common_pch.h" 14 | 15 | #include "extract/track_spec.h" 16 | 17 | track_spec_t::track_spec_t() 18 | : tid(0) 19 | , tuid(0) 20 | , extract_cuesheet(false) 21 | , target_mode(track_spec_t::tm_normal) 22 | , extract_blockadd_level(-1) 23 | , done(false) 24 | { 25 | } 26 | -------------------------------------------------------------------------------- /src/extract/track_spec.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvextract -- extract tracks from Matroska files into other files 3 | 4 | Distributed under the GPL 5 | see the file COPYING for details 6 | or visit http://www.gnu.org/copyleft/gpl.html 7 | 8 | extracts tracks and other items from Matroska files into other files 9 | 10 | Written by Moritz Bunkus . 11 | */ 12 | 13 | #ifndef __EXTRACT_TRACK_SPEC_H 14 | #define __EXTRACT_TRACK_SPEC_H 15 | 16 | #include "common/os.h" 17 | 18 | #include 19 | 20 | struct track_spec_t { 21 | enum target_mode_e { 22 | tm_normal, 23 | tm_raw, 24 | tm_full_raw 25 | }; 26 | 27 | int64_t tid, tuid; 28 | std::string out_name; 29 | 30 | std::string sub_charset; 31 | bool extract_cuesheet; 32 | 33 | target_mode_e target_mode; 34 | int extract_blockadd_level; 35 | 36 | bool done; 37 | 38 | track_spec_t(); 39 | }; 40 | 41 | #endif // __EXTRACT_TRACK_SPEC_H 42 | -------------------------------------------------------------------------------- /src/extract/xtr_pgs.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvextract -- extract tracks from Matroska files into other files 3 | 4 | Distributed under the GPL 5 | see the file COPYING for details 6 | or visit http://www.gnu.org/copyleft/gpl.html 7 | 8 | Extraction of Blu-Ray subtitles. 9 | 10 | Written by Moritz Bunkus and Mike Chen. 11 | */ 12 | 13 | #ifndef __XTR_PGS_H 14 | #define __XTR_PGS_H 15 | 16 | #include "common/common_pch.h" 17 | 18 | #include "extract/xtr_base.h" 19 | 20 | class xtr_pgs_c: public xtr_base_c { 21 | 22 | public: 23 | xtr_pgs_c(const std::string &codec_id, int64_t tid, track_spec_t &tspec); 24 | 25 | virtual void handle_frame(memory_cptr &frame, KaxBlockAdditions *additions, int64_t timecode, int64_t duration, int64_t bref, int64_t fref, 26 | bool keyframe, bool discardable, bool references_valid); 27 | 28 | virtual const char *get_container_name() { 29 | return "SUP"; 30 | } 31 | }; 32 | 33 | #endif 34 | -------------------------------------------------------------------------------- /src/info/Rakefile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env rake 2 | # -*- mode: ruby; -*- 3 | 4 | import ['..', '../..', '../../..'].collect { |subdir| FileList[File.dirname(__FILE__) + "/#{subdir}/build-config.in"].to_a }.flatten.compact.first.gsub(/build-config.in/, 'Rakefile') 5 | -------------------------------------------------------------------------------- /src/info/options.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | mkvinfo -- info tracks from Matroska files into other files 3 | 4 | Distributed under the GPL 5 | see the file COPYING for details 6 | or visit http://www.gnu.org/copyleft/gpl.html 7 | 8 | Written by Moritz Bunkus . 9 | */ 10 | 11 | #include "common/common_pch.h" 12 | 13 | #include "info/mkvinfo.h" 14 | #include "info/options.h" 15 | 16 | options_c::options_c() 17 | : m_use_gui(false) 18 | , m_calc_checksums(false) 19 | , m_show_summary(false) 20 | , m_show_hexdump(false) 21 | , m_show_size(false) 22 | , m_show_track_info(false) 23 | , m_hexdump_max_size(16) 24 | , m_verbose(0) 25 | { 26 | } 27 | -------------------------------------------------------------------------------- /src/info/options.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvinfo -- info tracks from Matroska files into other files 3 | 4 | Distributed under the GPL 5 | see the file COPYING for details 6 | or visit http://www.gnu.org/copyleft/gpl.html 7 | 8 | Written by Moritz Bunkus . 9 | */ 10 | 11 | #ifndef __INFO_OPTIONS_H 12 | #define __INFO_OPTIONS_H 13 | 14 | #include "common/os.h" 15 | 16 | #include 17 | #include 18 | 19 | class options_c { 20 | public: 21 | std::string m_file_name; 22 | bool m_use_gui, m_calc_checksums, m_show_summary, m_show_hexdump, m_show_size, m_show_track_info; 23 | int m_hexdump_max_size, m_verbose; 24 | public: 25 | options_c(); 26 | }; 27 | 28 | #endif // __INFO_OPTIONS_H 29 | -------------------------------------------------------------------------------- /src/info/resources.rc: -------------------------------------------------------------------------------- 1 | MATROSKAICON ICON "../../share/icons/windows/mkvinfo.ico" 2 | 3 | #ifndef NOWXWIDGETS 4 | #define wxUSE_NO_MANIFEST 1 5 | #include "wx/msw/wx.rc" 6 | #endif 7 | 8 | 1 VERSIONINFO 9 | FILEVERSION 5, 1, 0, 0 10 | PRODUCTVERSION 5, 1, 0, 0 11 | FILEFLAGSMASK 0x3f 12 | FILEOS 0x4 13 | BEGIN 14 | BLOCK "StringFileInfo" 15 | BEGIN 16 | BLOCK "040904B0" 17 | BEGIN 18 | VALUE "CompanyName", "Moritz Bunkus" 19 | VALUE "FileDescription", "mkvinfo" 20 | VALUE "FileVersion", "5.1.0" 21 | VALUE "InternalName", "mkvinfo" 22 | VALUE "LegalCopyright", "Released under the GNU Pulic License http://www.gnu.org/licenses/gpl-2.0.html" 23 | VALUE "OriginalFilename", "mkvinfo" 24 | VALUE "ProductName", "MKVToolNix" 25 | VALUE "ProductVersion", "5.1.0" 26 | END 27 | END 28 | BLOCK "VarFileInfo" 29 | BEGIN 30 | VALUE "Translation", 0x0409, 1252 // Englisch (USA) 31 | END 32 | END 33 | 34 | 1 RT_MANIFEST "manifest.xml" 35 | -------------------------------------------------------------------------------- /src/info/rightclick_tree_widget.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvinfo -- utility for gathering information about Matroska files 3 | 4 | Distributed under the GPL 5 | see the file COPYING for details 6 | or visit http://www.gnu.org/copyleft/gpl.html 7 | 8 | A Qt GUI for mkvinfo 9 | 10 | Written by Moritz Bunkus . 11 | */ 12 | 13 | #ifndef __RIGHTCLICK_TREE_WIDGET_H 14 | #define __RIGHTCLICK_TREE_WIDGET_H 15 | 16 | #include "common/os.h" 17 | 18 | #include 19 | 20 | class rightclick_tree_widget: public QTreeWidget { 21 | Q_OBJECT; 22 | 23 | public slots: 24 | 25 | public: 26 | rightclick_tree_widget(QWidget *parent = NULL); 27 | 28 | protected: 29 | virtual void mousePressEvent(QMouseEvent *event); 30 | }; 31 | 32 | #endif // __RIGHTCLICK_TREE_WIDGET_H 33 | -------------------------------------------------------------------------------- /src/input/Rakefile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env rake 2 | # -*- mode: ruby; -*- 3 | 4 | import ['..', '../..', '../../..'].collect { |subdir| FileList[File.dirname(__FILE__) + "/#{subdir}/build-config.in"].to_a }.flatten.compact.first.gsub(/build-config.in/, 'Rakefile') 5 | -------------------------------------------------------------------------------- /src/input/r_aac_adif.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvmerge -- utility for splicing together matroska files 3 | from component media subtypes 4 | 5 | Distributed under the GPL 6 | see the file COPYING for details 7 | or visit http://www.gnu.org/copyleft/gpl.html 8 | 9 | class definitions for the AAC ADIF demultiplexer module 10 | 11 | Written by Moritz Bunkus . 12 | */ 13 | 14 | #ifndef __R_AAC_ADIF_H 15 | #define __R_AAC_ADIF_H 16 | 17 | #include "common/common_pch.h" 18 | 19 | #include "common/error.h" 20 | #include "common/mm_io.h" 21 | 22 | class aac_adif_reader_c { 23 | public: 24 | static int probe_file(mm_io_c *io, uint64_t size); 25 | }; 26 | 27 | #endif // __R_AAC_ADIF_H 28 | -------------------------------------------------------------------------------- /src/input/r_asf.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvmerge -- utility for splicing together matroska files 3 | from component media subtypes 4 | 5 | Distributed under the GPL 6 | see the file COPYING for details 7 | or visit http://www.gnu.org/copyleft/gpl.html 8 | 9 | class definitions for the ASF demultiplexer module 10 | 11 | Written by Moritz Bunkus . 12 | */ 13 | 14 | #ifndef __R_ASF_H 15 | #define __R_ASF_H 16 | 17 | #include "common/common_pch.h" 18 | 19 | #include "common/mm_io.h" 20 | 21 | class asf_reader_c { 22 | public: 23 | static int probe_file(mm_io_c *in, uint64_t size); 24 | }; 25 | 26 | #endif // __R_ASF_H 27 | -------------------------------------------------------------------------------- /src/input/r_cdxa.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvmerge -- utility for splicing together matroska files 3 | from component media subtypes 4 | 5 | Distributed under the GPL 6 | see the file COPYING for details 7 | or visit http://www.gnu.org/copyleft/gpl.html 8 | 9 | class definitions for the RIFF CDXA demultiplexer module 10 | 11 | Written by Moritz Bunkus . 12 | */ 13 | 14 | #ifndef __R_CDXA_H 15 | #define __R_CDXA_H 16 | 17 | #include "common/common_pch.h" 18 | 19 | #include "common/mm_io.h" 20 | 21 | class cdxa_reader_c { 22 | public: 23 | static bool probe_file(mm_io_c *in, uint64_t size); 24 | }; 25 | 26 | #endif // __R_CDXA_H 27 | -------------------------------------------------------------------------------- /src/input/r_dv.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvmerge -- utility for splicing together matroska files 3 | from component media subtypes 4 | 5 | Distributed under the GPL 6 | see the file COPYING for details 7 | or visit http://www.gnu.org/copyleft/gpl.html 8 | 9 | class definitions for the DV demultiplexer module 10 | 11 | Written by Moritz Bunkus . 12 | */ 13 | 14 | #ifndef __R_DV_H 15 | #define __R_DV_H 16 | 17 | #include "common/common_pch.h" 18 | 19 | class dv_reader_c { 20 | public: 21 | static int probe_file(mm_io_c *in, uint64_t size); 22 | }; 23 | 24 | #endif // __R_DV_H 25 | -------------------------------------------------------------------------------- /src/input/r_flv.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvmerge -- utility for splicing together matroska files 3 | from component media subtypes 4 | 5 | Distributed under the GPL 6 | see the file COPYING for details 7 | or visit http://www.gnu.org/copyleft/gpl.html 8 | 9 | class definitions for the Macromedia Flash Video (FLV) demultiplexer module 10 | 11 | Written by Moritz Bunkus . 12 | */ 13 | 14 | #ifndef __R_FLV_H 15 | #define __R_FLV_H 16 | 17 | #include "common/common_pch.h" 18 | 19 | class flv_reader_c { 20 | public: 21 | static int probe_file(mm_io_c *in, uint64_t size); 22 | }; 23 | 24 | #endif // __R_FLV_H 25 | -------------------------------------------------------------------------------- /src/input/r_hdsub.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvmerge -- utility for splicing together matroska files 3 | from component media subtypes 4 | 5 | Distributed under the GPL 6 | see the file COPYING for details 7 | or visit http://www.gnu.org/copyleft/gpl.html 8 | 9 | class definitions for the HDSUB demultiplexer module 10 | 11 | Written by Moritz Bunkus . 12 | */ 13 | 14 | #ifndef __R_HDSUB_H 15 | #define __R_HDSUB_H 16 | 17 | #include "common/common_pch.h" 18 | 19 | class hdsub_reader_c { 20 | public: 21 | static int probe_file(mm_io_c *in, uint64_t size); 22 | }; 23 | 24 | #endif // __R_HDSUB_H 25 | -------------------------------------------------------------------------------- /src/merge/Rakefile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env rake 2 | # -*- mode: ruby; -*- 3 | 4 | import ['..', '../..', '../../..'].collect { |subdir| FileList[File.dirname(__FILE__) + "/#{subdir}/build-config.in"].to_a }.flatten.compact.first.gsub(/build-config.in/, 'Rakefile') 5 | -------------------------------------------------------------------------------- /src/merge/debugging.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvmerge -- utility for splicing together matroska files 3 | from component media subtypes 4 | 5 | Distributed under the GPL 6 | see the file COPYING for details 7 | or visit http://www.gnu.org/copyleft/gpl.html 8 | 9 | mkvmerge debugging routines 10 | 11 | Written by Moritz Bunkus . 12 | */ 13 | 14 | #ifndef __MTX_MERGE_DEBUGGING_H 15 | #define __MTX_MERGE_DEBUGGING_H 16 | 17 | void debug_run_main_loop_hooks(); 18 | 19 | #endif // __MTX_MERGE_DEBUGGING_H 20 | -------------------------------------------------------------------------------- /src/merge/manifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | WindowsExecutable 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/merge/mkvmerge.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvmerge -- utility for splicing together matroska files 3 | from component media subtypes 4 | 5 | Distributed under the GPL 6 | see the file COPYING for details 7 | or visit http://www.gnu.org/copyleft/gpl.html 8 | 9 | definition of global variables found in mkvmerge.cpp 10 | 11 | Written by Moritz Bunkus . 12 | */ 13 | 14 | #ifndef __MKVMERGE_H 15 | #define __MKVMERGE_H 16 | 17 | #include "merge/pr_generic.h" 18 | 19 | int64_t create_track_number(generic_reader_c *reader, int64_t tid); 20 | 21 | #endif // __MKVMERGE_H 22 | -------------------------------------------------------------------------------- /src/merge/resources.rc: -------------------------------------------------------------------------------- 1 | MATROSKAICON ICON "../../share/icons/windows/mkvmergeGUI.ico" 2 | 3 | 1 VERSIONINFO 4 | FILEVERSION 5, 1, 0, 0 5 | PRODUCTVERSION 5, 1, 0, 0 6 | FILEFLAGSMASK 0x3f 7 | FILEOS 0x4 8 | BEGIN 9 | BLOCK "StringFileInfo" 10 | BEGIN 11 | BLOCK "040904B0" 12 | BEGIN 13 | VALUE "CompanyName", "Moritz Bunkus" 14 | VALUE "FileDescription", "mkvmerge" 15 | VALUE "FileVersion", "5.1.0" 16 | VALUE "InternalName", "mkvmerge" 17 | VALUE "LegalCopyright", "Released under the GNU Pulic License http://www.gnu.org/licenses/gpl-2.0.html" 18 | VALUE "OriginalFilename", "mkvmerge" 19 | VALUE "ProductName", "MKVToolNix" 20 | VALUE "ProductVersion", "5.1.0" 21 | END 22 | END 23 | BLOCK "VarFileInfo" 24 | BEGIN 25 | VALUE "Translation", 0x0409, 1252 // Englisch (USA) 26 | END 27 | END 28 | 29 | 1 RT_MANIFEST "manifest.xml" 30 | -------------------------------------------------------------------------------- /src/merge/webm.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | mkvmerge -- utility for splicing together matroska files 3 | from component media subtypes 4 | 5 | Distributed under the GPL 6 | see the file COPYING for details 7 | or visit http://www.gnu.org/copyleft/gpl.html 8 | 9 | helper functions for WebM in mkvmerge 10 | 11 | Written by Moritz Bunkus . 12 | */ 13 | 14 | #include "common/common_pch.h" 15 | 16 | #include "merge/webm.h" 17 | 18 | static output_compatibility_e s_output_compatibility = OC_MATROSKA; 19 | 20 | bool 21 | outputting_webm() { 22 | return OC_WEBM == s_output_compatibility; 23 | } 24 | 25 | void 26 | set_output_compatibility(output_compatibility_e compatibility) { 27 | s_output_compatibility = compatibility; 28 | } 29 | 30 | output_compatibility_e 31 | get_output_compatbility() { 32 | return s_output_compatibility; 33 | } 34 | 35 | -------------------------------------------------------------------------------- /src/merge/webm.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvmerge -- utility for splicing together matroska files 3 | from component media subtypes 4 | 5 | Distributed under the GPL 6 | see the file COPYING for details 7 | or visit http://www.gnu.org/copyleft/gpl.html 8 | 9 | definitions and helper functions for Webm in mkvmerge 10 | 11 | Written by Moritz Bunkus . 12 | */ 13 | 14 | #ifndef __MTX_MERGE_WEBM_H 15 | #define __MTX_MERGE_WEBM_H 16 | 17 | #include "common/os.h" 18 | 19 | enum output_compatibility_e { 20 | OC_MATROSKA, 21 | OC_WEBM, 22 | }; 23 | 24 | bool outputting_webm(); 25 | void set_output_compatibility(output_compatibility_e compatibility); 26 | output_compatibility_e get_output_compatbility(); 27 | 28 | #endif // __MTX_MERGE_WEBM_H 29 | -------------------------------------------------------------------------------- /src/mmg-qt/capabilities_reader.h: -------------------------------------------------------------------------------- 1 | #ifndef __CAPABILITIES_READER_H 2 | #define __CAPABILITIES_READER_H 3 | 4 | #include "config.h" 5 | 6 | #include 7 | #include 8 | #include 9 | 10 | #include "mmg_qt.h" 11 | 12 | #include "main_window.h" 13 | 14 | class capabilities_reader_c: public QObject { 15 | Q_OBJECT; 16 | private: 17 | main_window_c *m_parent; 18 | QProcess m_process; 19 | QHash m_capabilities; 20 | 21 | public: 22 | capabilities_reader_c(main_window_c *parent); 23 | virtual ~capabilities_reader_c(); 24 | 25 | virtual void run(); 26 | 27 | public slots: 28 | virtual void data_available(); 29 | 30 | protected: 31 | virtual void process_line(const QString &line); 32 | }; 33 | 34 | #endif // __CAPABILITIES_READER_H 35 | -------------------------------------------------------------------------------- /src/mmg-qt/file_prober.h: -------------------------------------------------------------------------------- 1 | #ifndef __FILE_PROBER_H 2 | #define __FILE_PROBER_H 3 | 4 | #include "config.h" 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | #include "mmg_qt.h" 12 | 13 | #include "input_file.h" 14 | #include "main_window.h" 15 | 16 | class file_prober_c: public QObject { 17 | Q_OBJECT; 18 | private: 19 | main_window_c *m_parent; 20 | QProcess m_process; 21 | QStringList m_output; 22 | input_file_c *m_file; 23 | QTemporaryFile *m_options_file; 24 | 25 | public: 26 | file_prober_c(main_window_c *parent); 27 | virtual ~file_prober_c(); 28 | 29 | virtual int run(const QString &input_file_name); 30 | virtual input_file_c *get_file(); 31 | 32 | public slots: 33 | virtual void data_available(); 34 | 35 | protected: 36 | virtual int process_output(); 37 | virtual QHash unpack_properties(const QString &packed); 38 | }; 39 | 40 | #endif // __FILE_PROBER_H 41 | -------------------------------------------------------------------------------- /src/mmg-qt/input_file.cpp: -------------------------------------------------------------------------------- 1 | #include "input_file.h" 2 | 3 | input_track_c::input_track_c() 4 | : m_tid(0) 5 | , m_enabled(true) 6 | { 7 | } 8 | 9 | input_track_c::~input_track_c() { 10 | } 11 | 12 | void 13 | input_track_c::save_settings(QSettings &settings) { 14 | } 15 | 16 | void 17 | input_track_c::load_settings(QSettings &settings) { 18 | } 19 | 20 | // ---------------------------------------------------------------------- 21 | 22 | input_file_c::input_file_c() 23 | : m_no_attachments(false) 24 | , m_no_chapters(false) 25 | , m_no_tags(false) 26 | { 27 | } 28 | 29 | input_file_c::~input_file_c() { 30 | } 31 | 32 | void 33 | input_file_c::save_settings(QSettings &settings) { 34 | int i; 35 | for (i = 0; m_tracks.size() > i; ++i) 36 | m_tracks[i]->save_settings(settings); 37 | } 38 | 39 | void 40 | input_file_c::load_settings(QSettings &settings) { 41 | int i; 42 | for (i = 0; m_tracks.size() > i; ++i) 43 | m_tracks[i]->load_settings(settings); 44 | } 45 | -------------------------------------------------------------------------------- /src/mmg-qt/mmg_qt.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | #include "qtcommon.h" 5 | 6 | #include "mmg_qt.h" 7 | 8 | #include "main_window.h" 9 | 10 | mkvmerge_settings_t::mkvmerge_settings_t() 11 | : executable(Q("mkvmerge")) 12 | , priority(priority_normal) 13 | { 14 | } 15 | 16 | int 17 | main(int argc, 18 | char **argv) { 19 | #ifdef SYS_WINDOWS 20 | QApplication::setStyle(Q("windows")); 21 | #endif 22 | 23 | QApplication app(argc, argv); 24 | 25 | main_window_c main_window; 26 | main_window.show(); 27 | 28 | return app.exec(); 29 | } 30 | -------------------------------------------------------------------------------- /src/mmg-qt/mmg_qt.h: -------------------------------------------------------------------------------- 1 | #ifndef __MMG_QT_H 2 | #define __MMG_QT_H 3 | 4 | #include "config.h" 5 | 6 | #define NAME "mmg/Qt" 7 | 8 | #include 9 | 10 | struct mkvmerge_settings_t { 11 | enum process_priority_e { 12 | priority_lowest, 13 | priority_low, 14 | priority_normal, 15 | priority_high, 16 | priority_highest, 17 | }; 18 | 19 | QString executable; 20 | process_priority_e priority; 21 | 22 | mkvmerge_settings_t(); 23 | }; 24 | 25 | #endif // __MMG_QT_H 26 | -------------------------------------------------------------------------------- /src/mmg/Rakefile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env rake 2 | # -*- mode: ruby; -*- 3 | 4 | import ['..', '../..', '../../..'].collect { |subdir| FileList[File.dirname(__FILE__) + "/#{subdir}/build-config.in"].to_a }.flatten.compact.first.gsub(/build-config.in/, 'Rakefile') 5 | -------------------------------------------------------------------------------- /src/mmg/header_editor/Rakefile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env rake 2 | # -*- mode: ruby; -*- 3 | 4 | import ['..', '../..', '../../..'].collect { |subdir| FileList[File.dirname(__FILE__) + "/#{subdir}/build-config.in"].to_a }.flatten.compact.first.gsub(/build-config.in/, 'Rakefile') 5 | -------------------------------------------------------------------------------- /src/mmg/header_editor/top_level_page.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvmerge GUI -- utility for splicing together matroska files 3 | from component media subtypes 4 | 5 | Distributed under the GPL 6 | see the file COPYING for details 7 | or visit http://www.gnu.org/copyleft/gpl.html 8 | 9 | header editor: segment info page class 10 | 11 | Written by Moritz Bunkus . 12 | */ 13 | 14 | #ifndef __HE_TOP_LEVEL_PAGE_H 15 | #define __HE_TOP_LEVEL_PAGE_H 16 | 17 | #include "common/os.h" 18 | 19 | #include "mmg/header_editor/empty_page.h" 20 | 21 | class he_top_level_page_c: public he_empty_page_c { 22 | public: 23 | he_top_level_page_c(header_editor_frame_c *parent, const translatable_string_c &title, EbmlElement *l1_element); 24 | virtual ~he_top_level_page_c(); 25 | 26 | virtual void do_modifications(); 27 | virtual void init(); 28 | }; 29 | 30 | #endif // __HE_TOP_LEVEL_PAGE_H 31 | -------------------------------------------------------------------------------- /src/mmg/message_dialog.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvmerge GUI -- utility for splicing together matroska files 3 | from component media subtypes 4 | 5 | Distributed under the GPL 6 | see the file COPYING for details 7 | or visit http://www.gnu.org/copyleft/gpl.html 8 | 9 | message dialog 10 | 11 | Written by Moritz Bunkus . 12 | */ 13 | 14 | #ifndef __MESSAGE_DIALOG_H 15 | #define __MESSAGE_DIALOG_H 16 | 17 | #include "common/os.h" 18 | 19 | #include 20 | #include 21 | 22 | class message_dialog: public wxDialog { 23 | DECLARE_CLASS(message_dialog); 24 | DECLARE_EVENT_TABLE(); 25 | public: 26 | 27 | message_dialog(wxWindow *parent, const wxString &title, const wxString &heading, const wxString &message); 28 | ~message_dialog(); 29 | 30 | void on_ok(wxCommandEvent &evt); 31 | 32 | static int show(wxWindow *parent, const wxString &title, const wxString &heading, const wxString &message); 33 | }; 34 | 35 | #endif // __MESSAGE_DIALOG_H 36 | -------------------------------------------------------------------------------- /src/mmg/options/Rakefile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env rake 2 | # -*- mode: ruby; -*- 3 | 4 | import ['..', '../..', '../../..'].collect { |subdir| FileList[File.dirname(__FILE__) + "/#{subdir}/build-config.in"].to_a }.flatten.compact.first.gsub(/build-config.in/, 'Rakefile') 5 | -------------------------------------------------------------------------------- /src/mmg/options/tab_base.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvmerge GUI -- utility for splicing together matroska files 3 | from component media subtypes 4 | 5 | Distributed under the GPL 6 | see the file COPYING for details 7 | or visit http://www.gnu.org/copyleft/gpl.html 8 | 9 | declarations for the options dialog -- abstract tab base class 10 | 11 | Written by Moritz Bunkus . 12 | */ 13 | 14 | #ifndef __MMG_OPTIONS_TAB_BASE_H 15 | #define __MMG_OPTIONS_TAB_BASE_H 16 | 17 | #include "common/os.h" 18 | 19 | #include 20 | #include 21 | 22 | class optdlg_base_tab: public wxPanel { 23 | DECLARE_CLASS(optdlg_base_tab); 24 | protected: 25 | mmg_options_t &m_options; 26 | 27 | public: 28 | optdlg_base_tab(wxWindow *parent, mmg_options_t &options); 29 | 30 | virtual void save_options() = 0; 31 | virtual bool validate_choices(); 32 | virtual wxString get_title() = 0; 33 | }; 34 | 35 | #endif // __MMG_OPTIONS_TAB_BASE_H 36 | -------------------------------------------------------------------------------- /src/mmg/resources.rc: -------------------------------------------------------------------------------- 1 | MATROSKAICON ICON "../../share/icons/windows/mkvmergeGUI.ico" 2 | 3 | #define wxUSE_NO_MANIFEST 1 4 | #include "wx/msw/wx.rc" 5 | 6 | 1 VERSIONINFO 7 | FILEVERSION 5, 1, 0, 0 8 | PRODUCTVERSION 5, 1, 0, 0 9 | FILEFLAGSMASK 0x3f 10 | FILEOS 0x4 11 | BEGIN 12 | BLOCK "StringFileInfo" 13 | BEGIN 14 | BLOCK "040904B0" 15 | BEGIN 16 | VALUE "CompanyName", "Moritz Bunkus" 17 | VALUE "FileDescription", "mmg" 18 | VALUE "FileVersion", "5.1.0" 19 | VALUE "InternalName", "mmg" 20 | VALUE "LegalCopyright", "Released under the GNU Pulic License http://www.gnu.org/licenses/gpl-2.0.html" 21 | VALUE "OriginalFilename", "mmg" 22 | VALUE "ProductName", "MKVToolNix" 23 | VALUE "ProductVersion", "5.1.0" 24 | END 25 | END 26 | BLOCK "VarFileInfo" 27 | BEGIN 28 | VALUE "Translation", 0x0409, 1252 // Englisch (USA) 29 | END 30 | END 31 | 32 | 1 RT_MANIFEST "manifest.xml" 33 | -------------------------------------------------------------------------------- /src/mmg/show_text_dlg.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvmerge GUI -- utility for splicing together matroska files 3 | from component media subtypes 4 | 5 | Distributed under the GPL 6 | see the file COPYING for details 7 | or visit http://www.gnu.org/copyleft/gpl.html 8 | 9 | "show text" dialog definitions 10 | 11 | Written by Moritz Bunkus . 12 | */ 13 | 14 | #ifndef __MMG_SHOW_TEXT_DLG_H 15 | #define __MMG_SHOW_TEXT_DLG_H 16 | 17 | #include "common/os.h" 18 | 19 | #include 20 | #include 21 | 22 | #include "mmg/mmg.h" 23 | #include "common/wx.h" 24 | 25 | class show_text_dlg: public wxDialog { 26 | DECLARE_CLASS(show_text_dlg); 27 | DECLARE_EVENT_TABLE(); 28 | public: 29 | show_text_dlg(wxWindow *parent, const wxString &title, const wxString &text); 30 | }; 31 | 32 | #endif // __MMG_SHOW_TEXT_DLG_H 33 | -------------------------------------------------------------------------------- /src/mmg/tabs/Rakefile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env rake 2 | # -*- mode: ruby; -*- 3 | 4 | import ['..', '../..', '../../..'].collect { |subdir| FileList[File.dirname(__FILE__) + "/#{subdir}/build-config.in"].to_a }.flatten.compact.first.gsub(/build-config.in/, 'Rakefile') 5 | -------------------------------------------------------------------------------- /src/mpegparser/Rakefile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env rake 2 | # -*- mode: ruby; -*- 3 | 4 | import ['..', '../..', '../../..'].collect { |subdir| FileList[File.dirname(__FILE__) + "/#{subdir}/build-config.in"].to_a }.flatten.compact.first.gsub(/build-config.in/, 'Rakefile') 5 | -------------------------------------------------------------------------------- /src/mpegparser/Types.h: -------------------------------------------------------------------------------- 1 | #ifndef __TYPES_H__ 2 | #define __TYPES_H__ 3 | 4 | #include "common/os.h" 5 | 6 | typedef int64_t MediaTime; 7 | typedef uint8_t binary; 8 | 9 | #endif // __TYPES_H__ 10 | -------------------------------------------------------------------------------- /src/mpegparser/mpegparser.proj: -------------------------------------------------------------------------------- 1 | LIB mpegparser 2 | { 3 | USE mktcommon 4 | 5 | SOURCE CircBuffer.cpp 6 | SOURCE M2VParser.cpp 7 | SOURCE MPEGVideoBuffer.cpp 8 | 9 | HEADER CircBuffer.h 10 | HEADER M2VParser.h 11 | HEADER MPEGVideoBuffer.h 12 | HEADER Types.h 13 | } 14 | -------------------------------------------------------------------------------- /src/output/Rakefile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env rake 2 | # -*- mode: ruby; -*- 3 | 4 | import ['..', '../..', '../../..'].collect { |subdir| FileList[File.dirname(__FILE__) + "/#{subdir}/build-config.in"].to_a }.flatten.compact.first.gsub(/build-config.in/, 'Rakefile') 5 | -------------------------------------------------------------------------------- /src/propedit/Rakefile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env rake 2 | # -*- mode: ruby; -*- 3 | 4 | import ['..', '../..', '../../..'].collect { |subdir| FileList[File.dirname(__FILE__) + "/#{subdir}/build-config.in"].to_a }.flatten.compact.first.gsub(/build-config.in/, 'Rakefile') 5 | -------------------------------------------------------------------------------- /src/propedit/manifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | WindowsExecutable 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/propedit/propedit.h: -------------------------------------------------------------------------------- 1 | /* 2 | mkvpropedit -- utility for editing properties of existing Matroska files 3 | 4 | Distributed under the GPL 5 | see the file COPYING for details 6 | or visit http://www.gnu.org/copyleft/gpl.html 7 | 8 | Written by Moritz Bunkus . 9 | */ 10 | 11 | #ifndef __PROPEDIT_PROPEDIT_H 12 | #define __PROPEDIT_PROPEDIT_H 13 | 14 | #include "common/os.h" 15 | 16 | #include "common/common_pch.h" 17 | 18 | #define FILE_NOT_MODIFIED Y("The file has not been modified.") 19 | 20 | #endif // __PROPEDIT_PROPEDIT_H 21 | -------------------------------------------------------------------------------- /src/propedit/resources.rc: -------------------------------------------------------------------------------- 1 | MATROSKAICON ICON "../../share/icons/windows/mkvmergeGUI.ico" 2 | 3 | 1 VERSIONINFO 4 | FILEVERSION 5, 1, 0, 0 5 | PRODUCTVERSION 5, 1, 0, 0 6 | FILEFLAGSMASK 0x3f 7 | FILEOS 0x4 8 | BEGIN 9 | BLOCK "StringFileInfo" 10 | BEGIN 11 | BLOCK "040904B0" 12 | BEGIN 13 | VALUE "CompanyName", "Moritz Bunkus" 14 | VALUE "FileDescription", "mkvpropedit" 15 | VALUE "FileVersion", "5.1.0" 16 | VALUE "InternalName", "mkvpropedit" 17 | VALUE "LegalCopyright", "Released under the GNU Pulic License http://www.gnu.org/licenses/gpl-2.0.html" 18 | VALUE "OriginalFilename", "mkvpropedit" 19 | VALUE "ProductName", "MKVToolNix" 20 | VALUE "ProductVersion", "5.1.0" 21 | END 22 | END 23 | BLOCK "VarFileInfo" 24 | BEGIN 25 | VALUE "Translation", 0x0409, 1252 // Englisch (USA) 26 | END 27 | END 28 | 29 | 1 RT_MANIFEST "manifest.xml" 30 | -------------------------------------------------------------------------------- /src/scripts/README: -------------------------------------------------------------------------------- 1 | The scripts in this folder are development tools and not meant for end users. 2 | -------------------------------------------------------------------------------- /src/scripts/mkvinfo2quickplot.pl: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl -w 2 | 3 | use strict 'vars'; 4 | 5 | use Getopt::Long; 6 | use IO::File; 7 | 8 | if (!scalar @ARGV) { 9 | print "File name missing.\n"; 10 | exit 1; 11 | } 12 | 13 | my $filename = shift @ARGV; 14 | 15 | my $in = IO::File->new("mkvinfo -s \"${filename}\" |"); 16 | if (!$in) { 17 | print "Could not spawn mkvinfo: !$\n"; 18 | exit 1; 19 | } 20 | 21 | my %datapoints = (); 22 | my $pos = 0; 23 | 24 | while (my $line = <$in>) { 25 | next unless ($line =~ m/frame,\s+track\s+(\d+),\s+timecode\s+(\d+).*,\s+size\s+(\d+)/i); 26 | 27 | $datapoints{$1} ||= []; 28 | push @{ $datapoints{$1} }, [$2, $pos]; 29 | $pos += $3; 30 | } 31 | 32 | $in->close(); 33 | 34 | foreach my $track (keys %datapoints) { 35 | my $out = IO::File->new("pl${track}.txt", "w") || next; 36 | foreach my $data (@{ $datapoints{$track} }) { 37 | print $out $data->[1], " ", $data->[0], "\n"; 38 | } 39 | $out->close(); 40 | } 41 | -------------------------------------------------------------------------------- /src/scripts/mpegtimecode.pl: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl -w 2 | 3 | use strict 'vars'; 4 | 5 | use Data::Dumper; 6 | 7 | # pts = 8 | # ((int64_t)((buf[0] & 0x0e) << 29 | buf[1] << 22 | 9 | # (buf[2] & 0xfe) << 14 | buf[3] << 7 | 10 | # (buf[4] >> 1))) * 100000 / 9; 11 | 12 | if (!@ARGV) { 13 | print "need arg\n"; 14 | exit 1; 15 | } 16 | 17 | my $str = shift; 18 | $str =~ s/[^0-9a-zA-Z]//g; 19 | my @values = map { ord } split(m//, pack("H*", $str)); 20 | 21 | if (scalar(@values) != 5) { 22 | print "need 5 numbers\n"; 23 | exit 1; 24 | } 25 | 26 | print Dumper(\@values); 27 | 28 | my $pts = ((($values[0] & 0x0e) << 29) | ($values[1] << 22) | (($values[2] & 0xfe) << 14) | ($values[3] << 7) | ($values[4] >> 1)) / 9; 29 | 30 | print "pts ${pts}\n"; 31 | -------------------------------------------------------------------------------- /src/tools/Rakefile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env rake 2 | # -*- mode: ruby; -*- 3 | 4 | $build_tools = true 5 | 6 | import File.dirname(__FILE__) + "/../../Rakefile" 7 | -------------------------------------------------------------------------------- /src/tools/element_info.h: -------------------------------------------------------------------------------- 1 | #ifndef __ELEMENT_INFO 2 | #define __ELEMENT_INFO 3 | 4 | #include "common/os.h" 5 | 6 | #include 7 | #include 8 | 9 | extern std::map g_element_names; 10 | extern std::map g_master_information; 11 | 12 | void init_element_names(); 13 | void init_master_information(); 14 | uint32_t element_name_to_id(const std::string &name); 15 | 16 | #endif // __ELEMENT_INFO 17 | -------------------------------------------------------------------------------- /src/tools/validator_to_kax_analyzer_dump.awk: -------------------------------------------------------------------------------- 1 | # This script converts the output of ebml_validator to match the 2 | # debugging output of the kax_analyzer_c::debug_dump_elements() 3 | # function. 4 | 5 | # Usage: ebml_validator -M file.mkv | awk -f validator_to_kax_analyzer_dump.awk > output.txt 6 | 7 | # Format of kax_analyzer_c::dump_elements(): 8 | # 10: Cluster size 358802 at 1489318 9 | 10 | # Format of ebml_validator: 11 | # pos 5719 id 0x1f43b675 size 395532 header size 7 (Cluster) 12 | 13 | BEGIN { 14 | idx = 0; 15 | } 16 | 17 | /^ [a-zA-Z]/ { 18 | pos = $2; 19 | size = $6 + $9; 20 | name = $10; 21 | 22 | gsub(/[\(\)]/, "", name); 23 | 24 | if (name == "EBML::Void") { 25 | name = "EBMLVoid"; 26 | } else if (name == "SeekHead") { 27 | name = "SeekHeader"; 28 | } 29 | 30 | print idx ": " name " size " size " at " pos; 31 | idx = idx + 1; 32 | } 33 | -------------------------------------------------------------------------------- /tests/new_test: -------------------------------------------------------------------------------- 1 | #!/bin/zsh 2 | 3 | if [ "$1" = "" ]; then 4 | echo 'Name?' 5 | exit 1 6 | fi 7 | 8 | name="${1%.rb}" 9 | max_num=$(ls | grep test- | sort -r | head -n 1 | cut -c 6-8) 10 | let next_num=$max_num+1 11 | 12 | new_file="test-${next_num}${name}.rb" 13 | 14 | cat > "$new_file" < #{tmp} 2>/dev/null") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-047X_tags.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_047X_tags < Test 4 | def description 5 | return "mkvextract / tags / out(XML)" 6 | end 7 | 8 | def run 9 | sys("../src/mkvextract tags data/mkv/complex.mkv > #{tmp} 2>/dev/null") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-048X_chapters_ogmstyle.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_048X_chapters_ogmstyle < Test 4 | def description 5 | return "mkvextract / chapters (OGM style) / out(TXT)" 6 | end 7 | 8 | def run 9 | sys("../src/mkvextract chapters data/mkv/complex.mkv -s > #{tmp} 2>/dev/null") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-049ass.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_049ass < Test 4 | def description 5 | return "mkvmerge / ASS subtitles / in(ASS)" 6 | end 7 | 8 | def run 9 | merge("--sub-charset 0:ISO-8859-1 data/textsubs/11.Magyar.ass") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-050X_ass.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_050X_ass < Test 4 | def description 5 | return "mkvextract / ASS subtitles / out(ASS)" 6 | end 7 | 8 | def run 9 | my_hash = hash_file("data/textsubs/11.Magyar.ass") 10 | my_tmp = tmp 11 | merge("--sub-charset 0:ISO-8859-1 data/textsubs/11.Magyar.ass") 12 | @tmp = nil 13 | xtr_tracks(my_tmp, "-c ISO-8859-1 1:#{tmp}") 14 | File.unlink(my_tmp) 15 | return my_hash + "-" + hash_tmp 16 | end 17 | end 18 | 19 | -------------------------------------------------------------------------------- /tests/test-051ogm.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_051ogm < Test 4 | def description 5 | return "mkvmerge / OGM audio & video / in(OGM)" 6 | end 7 | 8 | def run 9 | merge "--subtitle-charset -1:ISO-8859-15 data/ogg/v.ogm" 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-200mp2_from_mp4.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_200mp2_from_mp4 < Test 4 | def description 5 | return "mkvmerge / MPEG1 layer 2 audio from MP4 container / in(MP4)" 6 | end 7 | 8 | def run 9 | merge("data/mp4/test_mp2.mp4") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-201avc_from_mp4_with_par.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_201avc_from_mp4_with_par < Test 4 | def description 5 | return "mkvmerge / AVC from MP4 with aspect ratio / in(MP4)" 6 | end 7 | 8 | def run 9 | merge("data/mp4/rain_800.mp4") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-202avc_from_mp4_with_par_bframes.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_202avc_from_mp4_with_par_bframes < Test 4 | def description 5 | return "mkvmerge / AVC from MP4 with aspect ratio & B frames / in(MP4)" 6 | end 7 | 8 | def run 9 | merge("data/mp4/test_2000_inloop.mp4") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-203wavpack_with_correctiondata.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_203wavpack_with_correctiondata < Test 4 | def description 5 | return "mkvmerge / audio only / WavPack with correction data (*.wv)" 6 | end 7 | 8 | def run 9 | merge("data/wp/with-correction.wv") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-204wavpack_without_correctiondata.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_204wavpack_without_correctiondata < Test 4 | def description 5 | return "mkvmerge / audio only / WavPack without correction data (*.wv)" 6 | end 7 | 8 | def run 9 | merge("data/wp/without-correction.wv") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-205X_cuesheets.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_205X_cuesheets < Test 4 | def description 5 | return "mkvextract / cue sheets / in(MKV)" 6 | end 7 | 8 | def run 9 | merge("#{tmp}-src", "data/simple/v.mp3 --chapters data/text/cuewithtags2.cue") 10 | sys("../src/mkvextract cuesheet #{tmp}-src --no-variable-data > #{tmp} 2>/dev/null") 11 | hash = hash_tmp(false) 12 | sys("../src/mkvextract tracks #{tmp}-src --no-variable-data --cuesheet 1:#{tmp} > /dev/null 2>/dev/null") 13 | hash += "-" + hash_tmp("#{tmp}.cue") 14 | return hash 15 | end 16 | end 17 | 18 | -------------------------------------------------------------------------------- /tests/test-206X_vobsub.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_206X_vobsub < Test 4 | def description 5 | return "mkvextract / VobSubs / in(MKV)" 6 | end 7 | 8 | def run 9 | xtr_tracks("data/mkv/vobsubs.mks", "4:#{tmp}") 10 | hash = hash_file("#{tmp}.idx") + "-" + hash_file("#{tmp}.sub") 11 | arg = "" 12 | 1.upto(7) { |i| arg += "#{i}:#{tmp} " } 13 | xtr_tracks("data/mkv/vobsubs.mks", arg) 14 | hash += "-" + hash_file("#{tmp}.idx") + "-" + hash_file("#{tmp}.sub") 15 | merge("#{tmp}.idx") 16 | hash += "-" + hash_tmp 17 | return hash 18 | end 19 | end 20 | 21 | -------------------------------------------------------------------------------- /tests/test-207segmentinfo.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_207segmentinfo < Test 4 | def description 5 | return "mkvmerge / segment info XML file / in(XML)" 6 | end 7 | 8 | def run 9 | merge("data/simple/v.mp3 --segmentinfo data/text/seginfo.xml") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-208cat_and_splitting.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_208cat_and_splitting < Test 4 | def description 5 | return "mkvmerge / concatenation and splitting at the same time" 6 | end 7 | 8 | def run 9 | merge(tmp + "-%03d ", "--split-max-files 2 --split 4m data/avi/v.avi " + 10 | "+data/avi/v.avi") 11 | if (!FileTest.exist?(tmp + "-001")) 12 | error("First split file does not exist.") 13 | end 14 | if (!FileTest.exist?(tmp + "-002")) 15 | File.unlink(tmp + "-001") 16 | error("Second split file does not exist.") 17 | end 18 | hash = hash_file(tmp + "-001") + "-" + hash_file(tmp + "-002") 19 | File.unlink(tmp + "-001") 20 | File.unlink(tmp + "-002") 21 | 22 | return hash 23 | end 24 | end 25 | 26 | -------------------------------------------------------------------------------- /tests/test-209ac3misdeetected_as_mpeges.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_209ac3misdeetected_as_mpeges < Test 4 | def description 5 | return "mkvmerge / AC3 misdetected as MPEG-ES / in(AC3)" 6 | end 7 | 8 | def run 9 | merge("data/simple/misdetected_as_mpeges.ac3") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-211bug_segfault_reading_mp4.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_211bug_segfault_reading_mp4 < Test 4 | def description 5 | return "mkvmerge / segfault reading a MP4 created with Nero / in(MP4)" 6 | end 7 | 8 | def run 9 | merge("data/bugs/From_Nero_AVC_Muxer.mp4") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-212ssa_attachments.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_212ssa_attachments < Test 4 | def description 5 | return "mkvmerge / attachments in SSA / in(SSA)" 6 | end 7 | 8 | def run 9 | merge("data/textsubs/Embedded.ssa") 10 | sys("../src/mkvextract attachments #{tmp} 1:#{tmp}-1 2:#{tmp}-2 " + 11 | "3:#{tmp}-3") 12 | hashes = Array.new 13 | for i in 1..3 14 | hashes << hash_file("#{tmp}-#{i}") 15 | File.unlink("#{tmp}-#{i}") 16 | end 17 | 18 | h = hash_tmp + "-" + hashes.join("-") 19 | 20 | merge("--no-attachments data/textsubs/Embedded.ssa") 21 | 22 | return h + "-" + hash_tmp 23 | end 24 | end 25 | 26 | -------------------------------------------------------------------------------- /tests/test-213mp4_broken_pixel_dimensions.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_213mp4_broken_pixel_dimensions < Test 4 | def description 5 | return "mkvmerge / MP4 with wrong pixel dimensions / in(MP4)" 6 | end 7 | 8 | def run 9 | merge("data/mp4/P4230041.MP4") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-214one_frame_avi.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_214one_frame_avi < Test 4 | def description 5 | return "mkvmerge / AVI with only one frame / in(AVI)" 6 | end 7 | 8 | def run 9 | merge("data/avi/1-frame.avi") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-215X_codec_extradata_avi.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_215X_codec_extradata_avi < Test 4 | def description 5 | return "mkvextract / codec extradata after BITMAPINFOHEADER" 6 | end 7 | 8 | def run 9 | merge("data/avi/extradata.avi") 10 | hash = hash_file(tmp) + "-" 11 | xtr_tracks(tmp, "1:#{tmp}-x.avi") 12 | hash += hash_file("#{tmp}-x.avi") 13 | return hash 14 | end 15 | end 16 | 17 | -------------------------------------------------------------------------------- /tests/test-216mp4_editlists.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_216mp4_editlists < Test 4 | def description 5 | return "mkvmerge / edit lists in MP4 and 'colr' before 'avcC' / in(MP4)" 6 | end 7 | 8 | def run 9 | merge("-A -S data/mp4/oops.mov") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-218theora.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_218theora < Test 4 | def description 5 | return "mkvmerge / Theora from Ogg / in(OGG)" 6 | end 7 | 8 | def run 9 | merge("data/ogg/qt4dance_medium.ogg") 10 | h = hash_tmp 11 | merge("data/ogg/small-theora.ogg") 12 | return h + "-" + hash_tmp 13 | end 14 | end 15 | 16 | -------------------------------------------------------------------------------- /tests/test-219srt_short_timecodes.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_219srt_short_timecodes < Test 4 | def description 5 | return "mkvmerge / SRT subs with short timecodes / in(SRT)" 6 | end 7 | 8 | def run 9 | merge "--subtitle-charset -1:ISO-8859-15 'data/textsubs/Marchen Awakens Romance - 40.srt' --subtitle-charset -1:ISO-8859-15 'data/textsubs/Marchen Awakens Romance - 41.srt'" 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-220ass_with_comments_at_start.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_220ass_with_comments_at_start < Test 4 | def description 5 | return "mkvmerge / ASS with comments at the start / in(ASS)" 6 | end 7 | 8 | def run 9 | merge("\"data/textsubs/You're Under Arrest Movie 1.ass\"") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-221aac_lc_misdetected_as_sbr.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_221aac_lc_misdetected_as_sbr < Test 4 | def description 5 | return "mkvmerge / AAC in MP4 with LC profile misdetected as SBR / in(MP4)" 6 | end 7 | 8 | def run 9 | merge("data/mp4/blood_ed3_sample_audio.mp4") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-223ra_cook_keyframes.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_223ra_cook_keyframes < Test 4 | def description 5 | return "mkvmerge / RealAudio COOK with invalid key frame flags / in(RA)" 6 | end 7 | 8 | def run 9 | merge("data/rm/R2_petshopboys.ra") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-224dts.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_224dts < Test 4 | def description 5 | return "mkvmerge / DTS audio / in(DTS)" 6 | end 7 | 8 | def run 9 | merge("'data/dts/Mega Audio 2ch DTS 1234 kbps.dts'") 10 | h = hash_tmp 11 | merge("'data/dts/Mega Audio 6ch DTS 1234 kbps.dts'") 12 | return h + "-" + hash_tmp 13 | end 14 | end 15 | 16 | -------------------------------------------------------------------------------- /tests/test-225dts_in_wav.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_225dts_in_wav < Test 4 | def description 5 | return "mkvmerge / DTS audio from WAV / in(WAV)" 6 | end 7 | 8 | def run 9 | merge("'data/dts/Norrlanda.wav'") 10 | h = hash_tmp 11 | merge("'data/dts/SURROUNDTEST_011212.wav'") 12 | return h + "-" + hash_tmp 13 | end 14 | end 15 | 16 | -------------------------------------------------------------------------------- /tests/test-226h264.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_226h264 < Test 4 | def description 5 | return "mkvmerge / h264 raw / in(h264)" 6 | end 7 | 8 | def run 9 | merge("data/h264/IcePrincess.h264") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-227h264_with_garbage.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_227h264_with_garbage < Test 4 | def description 5 | return "mkvmerge / h264 raw with garbage / in(h264)" 6 | end 7 | 8 | def run 9 | merge("data/h264/garbage-test.h264") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-228h264_no_idr_slices.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_228h264_no_idr_slices < Test 4 | def description 5 | return "mkvmerge / h264 raw without IDR slices / in(h264)" 6 | end 7 | 8 | def run 9 | merge("data/h264/no-idr-slices.h264") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-229rav3_in_rm.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_229rav3_in_rm < Test 4 | def description 5 | return "mkvmerge / RealAudio v3 in RealMedia / in(RM)" 6 | end 7 | 8 | def run 9 | merge("data/rm/ra3_in_rm_file.rm", 1) 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-230h264_nalu_size_len_change.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_230h264_nalu_size_len_change < Test 4 | def description 5 | return "mkvmerge / NALU size length changes / in(MP4)" 6 | end 7 | 8 | def run 9 | merge("--nalu-size-length 3:2 data/mp4/test_2000_inloop.mp4") 10 | hash = hash_file(tmp) + "-" 11 | merge("#{tmp}.1", "--nalu-size-length 1:4 #{tmp}") 12 | hash += hash_file("#{tmp}.1") 13 | return hash 14 | end 15 | end 16 | 17 | -------------------------------------------------------------------------------- /tests/test-231X_ac3_header_removal.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_231X_ac3_header_removal < Test 4 | def description 5 | return "mkvextract / raw AC3 with header removal / out(AC3)" 6 | end 7 | 8 | def run 9 | xtr_tracks("data/simple/ac3_header_removal.mka", "1:#{tmp}") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-232h264_changing_sps_pps.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_232h264_changing_sps_pps < Test 4 | def description 5 | return "mkvmerge / h.264 with changing SPS/PPS NALUs / in(h264)" 6 | end 7 | 8 | def run 9 | merge("data/h264/changing-sps-pps.h264") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-233srt_with_coordinates.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_233srt_with_coordinates < Test 4 | def description 5 | return "mkvmerge / SRT subtitles with coordinates on the timecode line / in(SRT)" 6 | end 7 | 8 | def run 9 | merge(1, "data/textsubs/season2_us_disc1_episode01.srt") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-234avi_aac_codecid_0x706d.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_234avi_aac_codecid_0x706d < Test 4 | def description 5 | return "mkvmerge / AVI with AAC audio CodecID 0x706d / in(AVI)" 6 | end 7 | 8 | def run 9 | merge("data/avi/AVI_WITH_AAC_SOUND.avi") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-235wav_fmt_chunk_length.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_235wav_fmt_chunk_length < Test 4 | def description 5 | return "mkvmerge / WAV files with unusual 'fmt' chunk length / in(WAV)" 6 | end 7 | 8 | def run 9 | merge("data/simple/dts-sample.dts.wav") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-236ac3_in_mov.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_236ac3_in_mov < Test 4 | def description 5 | return "mkvmerge / AC3 in MOV and constant sample size > 1 audio tracks / in(MOV)" 6 | end 7 | 8 | def run 9 | merge("-D data/mp4/swordfish-explosion.mov") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-237ac3_in_wav_iec61937_mode.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_237ac3_in_wav_iec61937_mode < Test 4 | def description 5 | return "mkvmerge / AC3 in WAV in IEC 61937 mode / in(WAV)" 6 | end 7 | 8 | def run 9 | merge("data/simple/shortsample.ac3.wav") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-238ac3_in_wav_acm_mode.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_238ac3_in_wav_acm_mode < Test 4 | def description 5 | return "mkvmerge / AC3 in WAV in ACM mode / in(WAV)" 6 | end 7 | 8 | def run 9 | merge(1, "data/simple/Pirates.Of.The.Caribbean.At.Worlds.End_30secssample.wav") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-239aac_with_id3_tags.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_239aac_with_id3_tags < Test 4 | def description 5 | return "mkvmerge / AAC with ID3v1 and v2 tags / in(AAC)" 6 | end 7 | 8 | def run 9 | merge(1, "data/simple/aac-with-id3-tags.aac") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-240dts_hd.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_240dts_hd < Test 4 | def description 5 | return "mkvmerge / DTS-HD / in(*)" 6 | end 7 | 8 | def run 9 | hashes = Array.new 10 | 11 | merge("data/simple/dts-hd.dts") 12 | hashes << hash_tmp 13 | 14 | merge("-D data/vob/VC1WithDTSHD.EVO") 15 | hashes << hash_tmp 16 | 17 | return hashes.join("-") 18 | end 19 | end 20 | 21 | -------------------------------------------------------------------------------- /tests/test-241ac3_with_id3_tags.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_241ac3_with_id3_tags < Test 4 | def description 5 | return "mkvmerge / AC3 with ID3 tags / in(AC3)" 6 | end 7 | 8 | def run 9 | merge("data/simple/ac3-with-id3-tags.ac3") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-242ogm_with_chapters.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_242ogm_with_chapters < Test 4 | def description 5 | return "mkvmerge / OGM files with chapters / in(OGM)" 6 | end 7 | 8 | def run 9 | merge("--chapter-charset ISO-8859-15 data/ogg/with_chapters.ogm") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-243avi_with_audio_garbage.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_243avi_with_audio_garbage < Test 4 | def description 5 | return "mkvmerge / AVI with garbage at the beginning of audio tracks / in(AVI)" 6 | end 7 | 8 | def run 9 | merge("data/avi/bug300.avi") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-244iconv_missing_character.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_244iconv_missing_character < Test 4 | def description 5 | return "mkvmerge / iconv cuts the last character (e.g. Hebrew) / in(SRT)" 6 | end 7 | 8 | def run 9 | merge("--sub-charset -1:CP1255 data/textsubs/Madagascar.Hebrew.Encoding.srt") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-245srt_timecode_formats.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_245srt_timecode_formats < Test 4 | def description 5 | return "mkvmerge / SRT files with various timecode formats (shortened, spaces etc) / in(SRT)" 6 | end 7 | 8 | def run 9 | hashes = Array.new 10 | 11 | merge "--subtitle-charset -1:ISO-8859-5 data/textsubs/shortened_timecodes.srt" 12 | hashes << hash_tmp 13 | 14 | merge "--subtitle-charset -1:ISO-8859-5 data/textsubs/timecodes_with_spaces.srt" 15 | hashes << hash_tmp 16 | 17 | return hashes.join('-') 18 | end 19 | end 20 | 21 | -------------------------------------------------------------------------------- /tests/test-246theora_pixel_aspect_ratio.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_246theora_pixel_aspect_ratio < Test 4 | def description 5 | return "mkvmerge / Theora's pixel aspect ratio header fields / in(OGG)" 6 | end 7 | 8 | def run 9 | merge("data/ogg/pixel_aspect_ratio.ogg") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-247attachment_selection.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_247attachment_selection < Test 4 | def description 5 | return "mkvmerge / --attachments option" 6 | end 7 | 8 | def run 9 | src = "data/mkv/attachments.mkv" 10 | merge(src) 11 | result = hash_tmp 12 | 13 | merge("--attachments 1,3,5 #{src}") 14 | result += "-" + hash_tmp 15 | 16 | merge("--attachments 2,4 #{src}") 17 | result += "-" + hash_tmp 18 | 19 | merge("--split 40s --split-max-files 2 --attachments 1:all,2:first,3:first,4:first,5:all #{src}") 20 | result += "-" + hash_file("#{tmp}-001") + "+" + hash_file("#{tmp}-002") 21 | 22 | return result 23 | end 24 | end 25 | -------------------------------------------------------------------------------- /tests/test-248mpeg2.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_248mpeg2 < Test 4 | def description 5 | return "mkvmerge / MPEG-1/2 video files / in(M2V)" 6 | end 7 | 8 | def run 9 | merge("data/mpeg12/1080i60.m2v", 1) 10 | hash = hash_tmp 11 | merge("data/mpeg12/changing_sequence_headers.m2v", 1) 12 | return hash + "-" + hash_tmp 13 | end 14 | end 15 | 16 | -------------------------------------------------------------------------------- /tests/test-249mpeg2_no_codecprivate.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_249mpeg2_no_codecprivate < Test 4 | def description 5 | return "mkvmerge / MPEG-1/2 video sequence header extraction for missing CodecPrivate / in(MKV)" 6 | end 7 | 8 | def run 9 | merge("data/mpeg12/mpeg2_no_codecprivate.mkv") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-250tag_selection.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_250tag_selection < Test 4 | def description 5 | return "mkvmerge / options for tag copying / in(MKV)" 6 | end 7 | 8 | def run 9 | merge("data/mkv/tags.mkv") 10 | hash = hash_tmp 11 | merge("--no-global-tags data/mkv/tags.mkv") 12 | hash += "-" + hash_tmp 13 | merge("--track-tags 1 data/mkv/tags.mkv") 14 | hash += "-" + hash_tmp 15 | merge("--track-tags 2 data/mkv/tags.mkv") 16 | hash += "-" + hash_tmp 17 | merge("--no-track-tags data/mkv/tags.mkv") 18 | hash += "-" + hash_tmp 19 | merge("-T data/mkv/tags.mkv") 20 | hash += "-" + hash_tmp 21 | merge("--no-global-tags -T data/mkv/tags.mkv") 22 | return hash + "-" + hash_tmp 23 | end 24 | end 25 | 26 | -------------------------------------------------------------------------------- /tests/test-251vc1_truehd_eac3_from_evo.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_251vc1_truehd_eac3_from_evo < Test 4 | def description 5 | return "mkvmerge / VC-1, TrueHD, EAC3 from EVO / in(EVO)" 6 | end 7 | 8 | def run 9 | merge("data/vob/vc1_truehd_eac3.evo") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-252native_mpeg4.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_252native_mpeg4 < Test 4 | def description 5 | return "mkvmerge / Native MPEG4 part 2 / in(AVI)" 6 | end 7 | 8 | def run 9 | merge("--engage native_mpeg4 data/avi/vielfrass_xvid_test.avi") 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-254avi_with_subs.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_254avi_with_subs < Test 4 | def description 5 | return "mkvmerge / AVI with SRT & SSA subtitles / in(AVI)" 6 | end 7 | 8 | def run 9 | file = "data/avi/with-subs.avi" 10 | merge(file) 11 | hash = hash_tmp 12 | merge("-s 2,3,4 #{file}") 13 | hash += "-" + hash_tmp 14 | merge("-s 2,4 #{file}") 15 | hash += "-" + hash_tmp 16 | merge("-s 4 #{file}") 17 | hash += "-" + hash_tmp 18 | merge("-S #{file}") 19 | hash += "-" + hash_tmp 20 | 21 | return hash 22 | end 23 | end 24 | 25 | -------------------------------------------------------------------------------- /tests/test-256cropping_stereo_mode.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_256cropping_stereo_mode < Test 4 | def description 5 | return "mkvmerge / Handling of cropping & stereo mode" 6 | end 7 | 8 | def get_info(file_name) 9 | command = "mkvinfo --ui-language en_US \"#{file_name}\" | " + 10 | "grep -E -i 'crop|stereo' | " + 11 | "sed -e 's/Stereo mode: /: S/' -e 's/.*: //' -e 's/ .*//' | " + 12 | "sort -n | " + 13 | "tr '\n' '-' | " + 14 | "sed -e 's/-$//'" 15 | return `#{command}`.chomp 16 | end 17 | 18 | def run 19 | result = "" 20 | 21 | merge "--cropping 3:1,2,3,4 --stereo-mode 3:top_bottom_right_first -A data/mp4/rain_800.mp4" 22 | [ "", "--cropping 1:5,6,7,8 --stereo-mode 1:side_by_side_left_first" ].each_with_index do |args, idx| 23 | merge "#{tmp}#{idx}", "#{args} #{tmp}" 24 | result += "#{idx}[" + get_info("#{tmp}#{idx}") + "]" 25 | end 26 | 27 | return result 28 | end 29 | end 30 | 31 | -------------------------------------------------------------------------------- /tests/test-257theora_v1_1.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_257theora_v1_1 < Test 4 | def description 5 | return "mkvmerge / Theora from Ogg created with libtheora v1.1 / in(OGG)" 6 | end 7 | 8 | def run 9 | merge("data/ogg/video-1.0.ogv") 10 | h = hash_tmp 11 | merge("data/ogg/video-1.1.ogv") 12 | return h + "-" + hash_tmp 13 | end 14 | end 15 | 16 | -------------------------------------------------------------------------------- /tests/test-258srt_negative_timecodes.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_258srt_negative_timecodes < Test 4 | def description 5 | return "mkvmerge / SRT files with negative timecodes / in(SRT)" 6 | end 7 | 8 | def run 9 | merge 1, "--subtitle-charset -1:ISO-8859-1 data/textsubs/negative_timecodes.srt" 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-259mp4_chapters_text_trak.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_259mp4_chapters_text_trak < Test 4 | def description 5 | return "mkvmerge / chapters in 'text' tracks / in(MP4)" 6 | end 7 | 8 | def run 9 | merge "data/mp4/o12-short.m4v" 10 | hash = [ hash_tmp ] 11 | merge "--no-chapters data/mp4/o12-short.m4v" 12 | hash << hash_tmp 13 | 14 | return hash.join "-" 15 | end 16 | end 17 | 18 | -------------------------------------------------------------------------------- /tests/test-260version_numbers.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_260version_numbers < Test 4 | def description 5 | return "version number of CLI tools" 6 | end 7 | 8 | def run 9 | %w{merge info extract propedit}.each do |name| 10 | sys "../src/mkv#{name} --version | grep -E 'v([0-9]\\.){2}[0-9].*built on'" 11 | end 12 | 13 | return 'ok' 14 | end 15 | end 16 | 17 | -------------------------------------------------------------------------------- /tests/test-261line_endings_in_text_files.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_261line_endings_in_text_files < Test 4 | def description 5 | return "mkvmerge / different line endings in text files" 6 | end 7 | 8 | def run 9 | checksums = %w{unix dos mac}.collect do |style| 10 | merge "data/textsubs/line-endings/subs-#{style}.srt" 11 | hash_tmp 12 | end 13 | 14 | return checksums.join "-" 15 | end 16 | end 17 | 18 | -------------------------------------------------------------------------------- /tests/test-262level1_with_size_0.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_262level1_with_size_0 < Test 4 | def description 5 | return "mkvmerge / level 1 elements with size 0" 6 | end 7 | 8 | def run 9 | merge "data/mkv/pcm_u8-audio-stored-as-wavpack.mkv" 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-263ass_missing_text_in_format.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_263ass_missing_text_in_format < Test 4 | def description 5 | return "mkvextract / ASS: missing column 'text' in format line" 6 | end 7 | 8 | def run 9 | xtr_tracks "data/mkv/ass_missing_text_in_format.mkv", "3:#{tmp}3 4:#{tmp}4" 10 | result = hash_file(tmp + "3") + "-" + hash_file(tmp + "4") 11 | File.unlink(tmp + "3") 12 | File.unlink(tmp + "4") 13 | 14 | return result 15 | end 16 | end 17 | 18 | -------------------------------------------------------------------------------- /tests/test-264avc_es_from_lavf_with_native_codecid.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_264avc_es_from_lavf_with_native_codecid < Test 4 | def description 5 | return "mkvmerge / AVC elementary stream from lavf with native CodecID (bug 486)" 6 | end 7 | 8 | def run 9 | merge "data/mkv/avc_es_from_lavf_with_native_codecid.mkv" 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-265mkvinfo_clusters_with_unknown_size.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_265mkvinfo_clusters_with_unknown_size < Test 4 | def description 5 | return "mkvinfo / Clusters with an unknown size" 6 | end 7 | 8 | def run 9 | sys "../src/mkvinfo -v -v -z --ui-language en_US data/webm/live-stream.webm > #{tmp}" 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-266mkvmerge_clusters_with_unknown_size.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_266mkvmerge_clusters_with_unknown_size < Test 4 | def description 5 | return "mkvmerge / Clusters with an unknown size" 6 | end 7 | 8 | def run 9 | merge "data/webm/live-stream.webm" 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-267mkvextract_clusters_with_unknown_size.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_267mkvextract_clusters_with_unknown_size < Test 4 | def description 5 | return "mkvextract / Clusters with an unknown size" 6 | end 7 | 8 | def run 9 | xtr_tracks "data/webm/live-stream.webm", "2:#{tmp}" 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-268X_vp8.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_268X_vp8 < Test 4 | def description 5 | return "mkvextract / VP8 from Matroska and WebM" 6 | end 7 | 8 | def run 9 | xtr_tracks "data/webm/live-stream.webm", "1:#{tmp}" 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-269X_vp8_without_default_duration.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_269X_vp8_without_default_duration < Test 4 | def description 5 | return "mkvextract / VP8 from Matroska and WebM missing the default duration element" 6 | end 7 | 8 | def run 9 | xtr_tracks "data/webm/yt3.webm", "1:#{tmp}" 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-270ivf.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_270ivf < Test 4 | def description 5 | return "mkvmerge / IVF with VP8" 6 | end 7 | 8 | def run 9 | checksums = [] 10 | %w{live-stream sample yt3}.each do |file| 11 | merge "data/webm/#{file}.ivf" 12 | checksums << hash_tmp 13 | end 14 | 15 | return checksums.join '-' 16 | end 17 | end 18 | 19 | -------------------------------------------------------------------------------- /tests/test-271ogg_flac_1_1_1.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_271ogg_flac_1_1_1 < Test 4 | def description 5 | return "mkvmerge / FLAC in Ogg spec version v1.1.1" 6 | end 7 | 8 | def run 9 | merge "data/ogg/oggflac-post-1-1-1.ogg" 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-272dirac.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_272dirac < Test 4 | def description 5 | return "mkvmerge / Dirac elementary stream" 6 | end 7 | 8 | def run 9 | merge "data/dirac/v.drc" 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-273pgssup.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_273pgssup < Test 4 | def description 5 | return "mkvmerge & mkvextract / PGS SUP files" 6 | end 7 | 8 | def run 9 | hashes = Array.new 10 | merge "data/subtitles/pgs/x.sup" 11 | hashes << hash_tmp 12 | 13 | merge "#{tmp}-1", "data/subtitles/pgs/x.sup" 14 | merge "#{tmp}-2", "#{tmp}-1" 15 | hashes << hash_file("#{tmp}-2") 16 | 17 | xtr_tracks "#{tmp}-1", "1:#{tmp}-3" 18 | hashes << hash_file("#{tmp}-3") 19 | 20 | return hashes.join "-" 21 | end 22 | end 23 | 24 | -------------------------------------------------------------------------------- /tests/test-274h264_in_nalus_in_avi.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_274h264_in_nalus_in_avi < Test 4 | def description 5 | return "mkvmerge / h264 in NALUs inside AVI" 6 | end 7 | 8 | def run 9 | merge "data/avi/h264-in-nalus.avi" 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-275srt_mixed_eol_styles.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_275srt_mixed_eol_styles < Test 4 | def description 5 | return "mkvmerge / SRT files with mixed end-of-line markings" 6 | end 7 | 8 | def run 9 | merge "'data/textsubs/Space Buddies (2009) AVCHD 1080p DTS.srt'" 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-276h264_without_nalus_in_avi.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_276h264_without_nalus_in_avi < Test 4 | def description 5 | return "mkvmerge / h.264 without NALUs in AVI" 6 | end 7 | 8 | def run 9 | merge "data/avi/h264-without-nalus.avi" 10 | return hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-277display_dimensions_fixing_aspect_ratio_usage.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_277display_dimensions_fixing_aspect_ratio_usage < Test 4 | def description 5 | return "mkvmerge / fixing DisplayWidth/Height containing aspect ratio only" 6 | end 7 | 8 | def run 9 | %w{ac3.mkv ar.mkv Handbrake-3441.mkv}.collect { |file| merge "data/mkv/aspect_ratio/#{file}" ; hash_tmp }.join "-" 10 | end 11 | end 12 | 13 | -------------------------------------------------------------------------------- /tests/test-278turning_off_compression.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_278turning_off_compression < Test 4 | def description 5 | return "mkvmerge / Matroska with compression, turning off compression" 6 | end 7 | 8 | def run 9 | merge "--compression -1:none data/mkv/compression/16.nocomp.mkv + --compression -1:none data/mkv/compression/17.comp.mkv" 10 | result = hash_tmp 11 | merge "--compression -1:none data/mkv/compression/16.comp.mkv + --compression -1:none data/mkv/compression/17.nocomp.mkv" 12 | result + "-" + hash_tmp 13 | end 14 | end 15 | 16 | -------------------------------------------------------------------------------- /tests/test-279packet_queue_not_empty_ivf.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_279packet_queue_not_empty_ivf < Test 4 | def description 5 | "mkvmerge / 'packet queue not empty' with IVF files" 6 | end 7 | 8 | def run 9 | merge "--default-duration 0:25fps data/webm/packet-queue-not-empty.ivf" 10 | hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-280replace_one_byte_with_ebmlvoid.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_280replace_one_byte_with_ebmlvoid < Test 4 | def description 5 | return "mkvpropedit / Replace one byte with en EbmlVoid" 6 | end 7 | 8 | def run 9 | sys "cp data/mkv/sample-bug536.mkv #{tmp}" 10 | sys "../src/mkvpropedit #{tmp} --edit track:v1 --set display-width=1600 --set display-height=768" 11 | hash_tmp 12 | end 13 | end 14 | 15 | -------------------------------------------------------------------------------- /tests/test-281idr_after_non_idr_not_recognized.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_281idr_after_non_idr_not_recognized < Test 4 | def description 5 | return "mkvmerge / h264: IDR slice after non-IDR slice not recognized as key frame" 6 | end 7 | 8 | def run 9 | merge "data/h264/test_frameloss_track1.h264" 10 | hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-282mkvextract_error_on_non_existing_file.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_282mkvextract_error_on_non_existing_file < Test 4 | def description 5 | "mkvextract / exit code 2 for non existing files" 6 | end 7 | 8 | def run 9 | sys "../src/mkvextract tracks thisfiledoesnotexist982734981q27 1:x.avi", 2 10 | (($? >> 8) == 2).to_s 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-283no_video_on_avi.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_283no_video_on_avi < Test 4 | def description 5 | "mkvmerge / --no-video for AVI files / in(AVI)" 6 | end 7 | 8 | def run 9 | merge "--no-video data/avi/v.avi" 10 | hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-284merging_chapter_editions_when_appending.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_284merging_chapter_editions_when_appending < Test 4 | def description 5 | "mkvmerge / merging chapter editions when appending files" 6 | end 7 | 8 | def run 9 | merge "#{tmp}-1", "data/avi/v.avi --chapters data/text/chap1.txt" 10 | merge "#{tmp}-2", "data/avi/v.avi --chapters data/text/chap2.txt" 11 | merge "#{tmp}-1 + #{tmp}-2" 12 | hash_tmp 13 | end 14 | end 15 | 16 | -------------------------------------------------------------------------------- /tests/test-285h264_misdetected_as_mp3.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_285h264_misdetected_as_mp3 < Test 4 | def description 5 | "mkvmerge / h264 ES mis-detected as MP3" 6 | end 7 | 8 | def run 9 | sys "../src/mkvmerge --identify-verbose data/h264/bug574.h264 > #{tmp}", 0 10 | hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-286vp8_in_ogg.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_286vp8_in_ogg < Test 4 | def description 5 | "mkvmerge / VP8 video tracks in Ogg files / in(Ogg)" 6 | end 7 | 8 | def run 9 | merge "data/ogg/vp8.ogg" 10 | hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-287mkvextract_exit_codes.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_287mkvextract_exit_codes < Test 4 | def description 5 | "mkvextract / exit codes in various situations" 6 | end 7 | 8 | def run 9 | result = [] 10 | 11 | [ "", # Show help if no mode given 12 | "gnufudel", # Unknown mode 13 | "tracks data/mkv/complex.mkv", # No track ID given 14 | "tracks data/mkv/complex.mkv 12345:doesnotexist", # Non-existing track ID 15 | "attachments data/mkv/complex.mkv", # No attachment ID given 16 | "attachments data/mkv/complex.mkv 12345:doesnotexist", # Non-existing attachment ID 17 | ].each do |args| 18 | sys "../src/mkvextract #{args}", 2 19 | result << ($? >> 8) 20 | end 21 | 22 | result.collect(&:to_s).join('-') 23 | end 24 | end 25 | 26 | -------------------------------------------------------------------------------- /tests/test-288identify_files_by_amg.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_288identify_files_by_amg < Test 4 | def description 5 | "mkvmerge / identify on files created by AMG" 6 | end 7 | 8 | def run 9 | sys "../src/mkvmerge --identify-verbose data/mkv/amg_sample.mkv | grep '^Track' | wc -l > #{tmp}", 0 10 | hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-289wav_unsupported_formattag.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_289wav_unsupported_formattag < Test 4 | def description 5 | "mkvmerge / unsupported format tags in WAV files" 6 | end 7 | 8 | def run 9 | sys "../src/mkvmerge --identify data/simple/wmav2.wav", 3 10 | ($? >> 8).to_s 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-290seven_bytes_aac_codec_data.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_290seven_bytes_aac_codec_data < Test 4 | def description 5 | "mkvmerge / AAC with 7 bytes codec data in AVI" 6 | end 7 | 8 | def run 9 | merge "data/avi/7_bytes_aac_codec_data.avi" 10 | hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-291waveformatextensible.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_291waveformatextensible < Test 4 | def description 5 | "mkvmerge / WAVs & AVIs using WAVEFORMATEXTENSIBLE structs with format tag 0xfffe" 6 | end 7 | 8 | def run 9 | %w{wav avi}.each { |ext| merge "data/avi/8point1.#{ext}" ; hash_tmp }.join('-') 10 | end 11 | end 12 | 13 | -------------------------------------------------------------------------------- /tests/test-292avi_aac_706d_privsize_huge.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_292avi_aac_706d_privsize_huge < Test 4 | def description 5 | "mkvmerge / AVI with AAC audio codec 706d and bogus private data size" 6 | end 7 | 8 | def run 9 | merge "data/avi/divxFaac51.avi" 10 | hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-293aac_adif_misdetected_as_video.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_293aac_adif_misdetected_as_video < Test 4 | def description 5 | "mkvmerge / AAC with ADIF headers misdetected as video" 6 | end 7 | 8 | def run 9 | sys "../src/mkvmerge --identify data/simple/aac_adif.aac", 3 10 | ($? >> 8).to_s 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-294vobsub_negative_delay.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_294vobsub_negative_delay < Test 4 | def description 5 | "mkvmerge / VobSub with negative \"delay\" fields" 6 | end 7 | 8 | def run 9 | merge "data/vobsub/House.S07E22.idx" 10 | hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-295vc1_rederiving_frame_types.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_295vc1_rederiving_frame_types < Test 4 | def description 5 | "mkvmerge / Rederiving frame types in VC1 video tracks" 6 | end 7 | 8 | def run 9 | [ "data/mkv/vc1-from-makemkv.mkv", "data/mkv/vc1-bug-636.mkv" ].collect do |file| 10 | merge "-A -S #{file}" 11 | hash_tmp 12 | end.join('-') 13 | end 14 | end 15 | 16 | -------------------------------------------------------------------------------- /tests/test-296video_frames_duration_0.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_296video_frames_duration_0 < Test 4 | def description 5 | "mkvmerge / Matroska files, block group with explicit duration 0" 6 | end 7 | 8 | def run 9 | merge "data/webm/out_video.webm" 10 | hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-297mpeg_transport_streams.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_297mpeg_transport_streams < Test 4 | def description 5 | "mkvmerge / MPEG transport streams" 6 | end 7 | 8 | def run 9 | %w{hd_distributor_regency.m2ts hd_other_sony_the_incredible_game.m2ts}. 10 | map { |file| merge "data/ts/#{file}", 1 ; hash_tmp }. 11 | join('-') 12 | end 13 | end 14 | 15 | -------------------------------------------------------------------------------- /tests/test-298ts_language.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_298ts_language < Test 4 | def description 5 | "mkvmerge / MPEG transport streams: language tags" 6 | end 7 | 8 | def run 9 | merge "data/ts/blue_planet.ts" 10 | hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-299ts_ghost_entries_in_pmt.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_299ts_ghost_entries_in_pmt < Test 4 | def description 5 | "mkvmerge / MPEG ts: ghost entries in PMT" 6 | end 7 | 8 | def run 9 | merge "data/ts/mp3_listed_in_pmt_but_no_data.ts" 10 | hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-300ts_dts_duplicate_timestamps.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_300ts_dts_duplicate_timestamps < Test 4 | def description 5 | "mkvmerge / MPEG TS with DTS-HD MA" 6 | end 7 | 8 | def run 9 | merge "-D -S -a 1,2 data/ts/h264_dts_hd_ma_pgsub.m2ts" 10 | hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-301ts_pgssub.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_301ts_pgssub < Test 4 | def description 5 | "mkvmerge / MPEG TS with HDMV PGS subtitles" 6 | end 7 | 8 | def run 9 | merge "-A -D data/ts/h264_dts_hd_ma_pgsub.m2ts" 10 | hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-302pat_pmt_only_once.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_302pat_pmt_only_once < Test 4 | def description 5 | "mkvmerge / TS with only one copy of PAT & PMT" 6 | end 7 | 8 | def run 9 | merge "data/ts/pat_pmt_only_once.ts" 10 | hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-303mpeg_ts_eac3_pmt_descriptor_tag_0x7a.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_303mpeg_ts_eac3_pmt_descriptor_tag_0x7a < Test 4 | def description 5 | "mkvmerge / MPEG TS with EAC3 stored with PMT descriptor tag 0x7a" 6 | end 7 | 8 | def run 9 | merge "data/ts/eac3_pmt_descriptor_tag_0x7a.ts" 10 | hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-304eac3_pes_private_but_no_pmt_descriptor_tag.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_304eac3_pes_private_but_no_pmt_descriptor_tag < Test 4 | def description 5 | "mkvmerge / MPEG TS with EAC3 in PES private missing its PMT descriptor tag" 6 | end 7 | 8 | def run 9 | merge "data/ts/eac3_pes_private_but_no_pmt_descriptor_tag.ts" 10 | hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-305ui_locale_en_US.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_305ui_locale_en_US < Test 4 | def description 5 | "mkvmerge / UI locale: en_US" 6 | end 7 | 8 | def run 9 | hashes = Array.new 10 | 11 | merge "/dev/null", "--ui-language en_US data/avi/v.avi | head -n 2 | tail -n 1 > #{tmp}-en_US" 12 | hashes << hash_file("#{tmp}-en_US") 13 | 14 | sys "../src/mkvinfo --ui-language en_US data/mkv/complex.mkv | head -n 2 > #{tmp}-en_US" 15 | hashes << hash_file("#{tmp}-en_US") 16 | 17 | return hashes.join "-" 18 | end 19 | end 20 | -------------------------------------------------------------------------------- /tests/test-306ui_locale_de_DE.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_306ui_locale_de_DE < Test 4 | def description 5 | "mkvmerge / UI locale: de_DE" 6 | end 7 | 8 | def run 9 | hashes = Array.new 10 | 11 | merge "/dev/null", "--ui-language de_DE data/avi/v.avi | head -n 2 | tail -n 1 > #{tmp}-de_DE" 12 | hashes << hash_file("#{tmp}-de_DE") 13 | 14 | sys "../src/mkvinfo --ui-language de_DE data/mkv/complex.mkv | head -n 2 > #{tmp}-de_DE" 15 | hashes << hash_file("#{tmp}-de_DE") 16 | 17 | return hashes.join "-" 18 | end 19 | end 20 | -------------------------------------------------------------------------------- /tests/test-307ui_locale_es_ES.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_307ui_locale_es_ES < Test 4 | def description 5 | "mkvmerge / UI locale: es_ES" 6 | end 7 | 8 | def run 9 | hashes = Array.new 10 | 11 | merge "/dev/null", "--ui-language es_ES data/avi/v.avi | head -n 2 | tail -n 1 > #{tmp}-es_ES" 12 | hashes << hash_file("#{tmp}-es_ES") 13 | 14 | sys "../src/mkvinfo --ui-language es_ES data/mkv/complex.mkv | head -n 2 > #{tmp}-es_ES" 15 | hashes << hash_file("#{tmp}-es_ES") 16 | 17 | return hashes.join "-" 18 | end 19 | end 20 | -------------------------------------------------------------------------------- /tests/test-308ui_locale_fr_FR.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_308ui_locale_fr_FR < Test 4 | def description 5 | "mkvmerge / UI locale: fr_FR" 6 | end 7 | 8 | def run 9 | hashes = Array.new 10 | 11 | merge "/dev/null", "--ui-language fr_FR data/avi/v.avi | head -n 2 | tail -n 1 > #{tmp}-fr_FR" 12 | hashes << hash_file("#{tmp}-fr_FR") 13 | 14 | sys "../src/mkvinfo --ui-language fr_FR data/mkv/complex.mkv | head -n 2 > #{tmp}-fr_FR" 15 | hashes << hash_file("#{tmp}-fr_FR") 16 | 17 | return hashes.join "-" 18 | end 19 | end 20 | -------------------------------------------------------------------------------- /tests/test-309ui_locale_it_IT.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_309ui_locale_it_IT < Test 4 | def description 5 | "mkvmerge / UI locale: it_IT" 6 | end 7 | 8 | def run 9 | hashes = Array.new 10 | 11 | merge "/dev/null", "--ui-language it_IT data/avi/v.avi | head -n 2 | tail -n 1 > #{tmp}-it_IT" 12 | hashes << hash_file("#{tmp}-it_IT") 13 | 14 | sys "../src/mkvinfo --ui-language it_IT data/mkv/complex.mkv | head -n 2 > #{tmp}-it_IT" 15 | hashes << hash_file("#{tmp}-it_IT") 16 | 17 | return hashes.join "-" 18 | end 19 | end 20 | -------------------------------------------------------------------------------- /tests/test-310ui_locale_ja_JP.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_310ui_locale_ja_JP < Test 4 | def description 5 | "mkvmerge / UI locale: ja_JP" 6 | end 7 | 8 | def run 9 | hashes = Array.new 10 | 11 | merge "/dev/null", "--ui-language ja_JP data/avi/v.avi | head -n 2 | tail -n 1 > #{tmp}-ja_JP" 12 | hashes << hash_file("#{tmp}-ja_JP") 13 | 14 | sys "../src/mkvinfo --ui-language ja_JP data/mkv/complex.mkv | head -n 2 > #{tmp}-ja_JP" 15 | hashes << hash_file("#{tmp}-ja_JP") 16 | 17 | return hashes.join "-" 18 | end 19 | end 20 | -------------------------------------------------------------------------------- /tests/test-311ui_locale_lt_LT.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_311ui_locale_lt_LT < Test 4 | def description 5 | "mkvmerge / UI locale: lt_LT" 6 | end 7 | 8 | def run 9 | hashes = Array.new 10 | 11 | merge "/dev/null", "--ui-language lt_LT data/avi/v.avi | head -n 2 | tail -n 1 > #{tmp}-lt_LT" 12 | hashes << hash_file("#{tmp}-lt_LT") 13 | 14 | sys "../src/mkvinfo --ui-language lt_LT data/mkv/complex.mkv | head -n 2 > #{tmp}-lt_LT" 15 | hashes << hash_file("#{tmp}-lt_LT") 16 | 17 | return hashes.join "-" 18 | end 19 | end 20 | -------------------------------------------------------------------------------- /tests/test-312ui_locale_nl_NL.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_312ui_locale_nl_NL < Test 4 | def description 5 | "mkvmerge / UI locale: nl_NL" 6 | end 7 | 8 | def run 9 | hashes = Array.new 10 | 11 | merge "/dev/null", "--ui-language nl_NL data/avi/v.avi | head -n 2 | tail -n 1 > #{tmp}-nl_NL" 12 | hashes << hash_file("#{tmp}-nl_NL") 13 | 14 | sys "../src/mkvinfo --ui-language nl_NL data/mkv/complex.mkv | head -n 2 > #{tmp}-nl_NL" 15 | hashes << hash_file("#{tmp}-nl_NL") 16 | 17 | return hashes.join "-" 18 | end 19 | end 20 | -------------------------------------------------------------------------------- /tests/test-313ui_locale_ru_RU.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_313ui_locale_ru_RU < Test 4 | def description 5 | "mkvmerge / UI locale: ru_RU" 6 | end 7 | 8 | def run 9 | hashes = Array.new 10 | 11 | merge "/dev/null", "--ui-language ru_RU data/avi/v.avi | head -n 2 | tail -n 1 > #{tmp}-ru_RU" 12 | hashes << hash_file("#{tmp}-ru_RU") 13 | 14 | sys "../src/mkvinfo --ui-language ru_RU data/mkv/complex.mkv | head -n 2 > #{tmp}-ru_RU" 15 | hashes << hash_file("#{tmp}-ru_RU") 16 | 17 | return hashes.join "-" 18 | end 19 | end 20 | -------------------------------------------------------------------------------- /tests/test-314ui_locale_tr_TR.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_314ui_locale_tr_TR < Test 4 | def description 5 | "mkvmerge / UI locale: tr_TR" 6 | end 7 | 8 | def run 9 | hashes = Array.new 10 | 11 | merge "/dev/null", "--ui-language tr_TR data/avi/v.avi | head -n 2 | tail -n 1 > #{tmp}-tr_TR" 12 | hashes << hash_file("#{tmp}-tr_TR") 13 | 14 | sys "../src/mkvinfo --ui-language tr_TR data/mkv/complex.mkv | head -n 2 > #{tmp}-tr_TR" 15 | hashes << hash_file("#{tmp}-tr_TR") 16 | 17 | return hashes.join "-" 18 | end 19 | end 20 | -------------------------------------------------------------------------------- /tests/test-315ui_locale_uk_UA.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_315ui_locale_uk_UA < Test 4 | def description 5 | "mkvmerge / UI locale: uk_UA" 6 | end 7 | 8 | def run 9 | hashes = Array.new 10 | 11 | merge "/dev/null", "--ui-language uk_UA data/avi/v.avi | head -n 2 | tail -n 1 > #{tmp}-uk_UA" 12 | hashes << hash_file("#{tmp}-uk_UA") 13 | 14 | sys "../src/mkvinfo --ui-language uk_UA data/mkv/complex.mkv | head -n 2 > #{tmp}-uk_UA" 15 | hashes << hash_file("#{tmp}-uk_UA") 16 | 17 | return hashes.join "-" 18 | end 19 | end 20 | -------------------------------------------------------------------------------- /tests/test-316ui_locale_zh_CN.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_316ui_locale_zh_CN < Test 4 | def description 5 | "mkvmerge / UI locale: zh_CN" 6 | end 7 | 8 | def run 9 | hashes = Array.new 10 | 11 | merge "/dev/null", "--ui-language zh_CN data/avi/v.avi | head -n 2 | tail -n 1 > #{tmp}-zh_CN" 12 | hashes << hash_file("#{tmp}-zh_CN") 13 | 14 | sys "../src/mkvinfo --ui-language zh_CN data/mkv/complex.mkv | head -n 2 > #{tmp}-zh_CN" 15 | hashes << hash_file("#{tmp}-zh_CN") 16 | 17 | return hashes.join "-" 18 | end 19 | end 20 | -------------------------------------------------------------------------------- /tests/test-317ui_locale_zh_TW.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_317ui_locale_zh_TW < Test 4 | def description 5 | "mkvmerge / UI locale: zh_TW" 6 | end 7 | 8 | def run 9 | hashes = Array.new 10 | 11 | merge "/dev/null", "--ui-language zh_TW data/avi/v.avi | head -n 2 | tail -n 1 > #{tmp}-zh_TW" 12 | hashes << hash_file("#{tmp}-zh_TW") 13 | 14 | sys "../src/mkvinfo --ui-language zh_TW data/mkv/complex.mkv | head -n 2 > #{tmp}-zh_TW" 15 | hashes << hash_file("#{tmp}-zh_TW") 16 | 17 | return hashes.join "-" 18 | end 19 | end 20 | -------------------------------------------------------------------------------- /tests/test-318ui_locale_invalid.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_318ui_locale_invalid < Test 4 | def description 5 | "mkvmerge / UI locale: invalid" 6 | end 7 | 8 | def run 9 | sys "../src/mkvmerge --ui-language gnufudel", 2 10 | 11 | return "ok" 12 | end 13 | end 14 | -------------------------------------------------------------------------------- /tests/test-319wav_with_pcm_detected_as_dts.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_319wav_with_pcm_detected_as_dts < Test 4 | def description 5 | "mkvmerge / WAV with PCM detected as DTS" 6 | end 7 | 8 | def run 9 | merge "data/simple/wav_with_pcm_detected_as_dts.wav" 10 | hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-320ts_aac.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_320ts_aac < Test 4 | def description 5 | "mkvmerge / MPEG transport streams with AAC" 6 | end 7 | 8 | def run 9 | merge "data/ts/avc_aac.ts", 1 10 | hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /tests/test-321vc1_without_markers.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | class T_321vc1_without_markers < Test 4 | def description 5 | "mkvmerge / VC1 without start markers (0x00 0x00 0x01)" 6 | end 7 | 8 | def run 9 | merge "-A data/mkv/vc1-without-markers.mkv" 10 | hash_tmp 11 | end 12 | end 13 | 14 | -------------------------------------------------------------------------------- /winbuild/bh.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | if not exist %1* goto notfound 3 | cd %1* 4 | if exist %1-* goto subdir 5 | cd .. 6 | if exist %1-* goto rename 7 | 8 | goto done 9 | :rename 10 | if exist %1 goto done 11 | move %1-* %1 >NUL 12 | goto done 13 | :subdir 14 | move %1-* ..\%1 >NUL 15 | cd .. 16 | goto done 17 | :notfound 18 | echo %1 not found! 19 | :done 20 | 21 | -------------------------------------------------------------------------------- /winbuild/bh2.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | if not exist %1* goto notfound 3 | cd %1* 4 | if exist %1_* goto subdir 5 | cd .. 6 | if exist %1_* goto rename 7 | 8 | goto done 9 | :rename 10 | if exist %1 goto done 11 | move %1_* %1 >NUL 12 | goto done 13 | :subdir 14 | move %1_* ..\%1 >NUL 15 | cd .. 16 | goto done 17 | :notfound 18 | echo %1 not found! 19 | :done 20 | 21 | -------------------------------------------------------------------------------- /winbuild/zlib.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 10.00 3 | # Visual Studio 2008 4 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "zlib.vcproj", "{6D926938-870E-4BB3-9038-EE486D18C726}" 5 | EndProject 6 | Global 7 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 8 | LIB Debug|Win32 = LIB Debug|Win32 9 | LIB Release|Win32 = LIB Release|Win32 10 | EndGlobalSection 11 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 12 | {6D926938-870E-4BB3-9038-EE486D18C726}.LIB Debug|Win32.ActiveCfg = LIB Debug|Win32 13 | {6D926938-870E-4BB3-9038-EE486D18C726}.LIB Debug|Win32.Build.0 = LIB Debug|Win32 14 | {6D926938-870E-4BB3-9038-EE486D18C726}.LIB Release|Win32.ActiveCfg = LIB Release|Win32 15 | {6D926938-870E-4BB3-9038-EE486D18C726}.LIB Release|Win32.Build.0 = LIB Release|Win32 16 | EndGlobalSection 17 | GlobalSection(SolutionProperties) = preSolution 18 | HideSolutionNode = FALSE 19 | EndGlobalSection 20 | EndGlobal 21 | --------------------------------------------------------------------------------