From 526da5f0d67a608a5ac7b100b426115e8a370da7 Mon Sep 17 00:00:00 2001 From: MuldeR Date: Sun, 19 May 2013 22:32:58 +0200 Subject: [PATCH] Initial commit. --- .gitignore | 10 + Copying.txt | 5 + MediaInfoXP.ico | Bin 0 -> 28086 bytes MediaInfoXP.png | Bin 0 -> 615 bytes MediaInfoXP.qrc | 16 + MediaInfoXP.rcx | 60 ++ MediaInfoXP.vcxproj | 152 ++++ MediaInfoXP.vcxproj.filters | 59 ++ ReadMe.txt | 21 + doc/Changelog.txt | 1632 +++++++++++++++++++++++++++++++++++ doc/License.MediaInfo.html | 75 ++ doc/License.Qt.html | 150 ++++ doc/License.html | 481 +++++++++++ doc/Readme.txt | 38 + gui/Dialog.ui | 301 +++++++ res/ico_clear.png | Bin 0 -> 793 bytes res/ico_discard.png | Bin 0 -> 655 bytes res/ico_folder.png | Bin 0 -> 686 bytes res/ico_info.png | Bin 0 -> 778 bytes res/ico_link.png | Bin 0 -> 957 bytes res/ico_qt.png | Bin 0 -> 1076 bytes res/ico_quit.png | Bin 0 -> 693 bytes res/logo.png | Bin 0 -> 17788 bytes src/Config.h | 47 + src/Main.cpp | 446 ++++++++++ src/MainWindow.cpp | 475 ++++++++++ src/MainWindow.h | 75 ++ 27 files changed, 4043 insertions(+) create mode 100644 .gitignore create mode 100644 Copying.txt create mode 100644 MediaInfoXP.ico create mode 100644 MediaInfoXP.png create mode 100644 MediaInfoXP.qrc create mode 100644 MediaInfoXP.rcx create mode 100644 MediaInfoXP.vcxproj create mode 100644 MediaInfoXP.vcxproj.filters create mode 100644 ReadMe.txt create mode 100644 doc/Changelog.txt create mode 100644 doc/License.MediaInfo.html create mode 100644 doc/License.Qt.html create mode 100644 doc/License.html create mode 100644 doc/Readme.txt create mode 100644 gui/Dialog.ui create mode 100644 res/ico_clear.png create mode 100644 res/ico_discard.png create mode 100644 res/ico_folder.png create mode 100644 res/ico_info.png create mode 100644 res/ico_link.png create mode 100644 res/ico_qt.png create mode 100644 res/ico_quit.png create mode 100644 res/logo.png create mode 100644 src/Config.h create mode 100644 src/Main.cpp create mode 100644 src/MainWindow.cpp create mode 100644 src/MainWindow.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7565e14 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +/tmp/ +/obj/ +/bin/ +/ipch/ +/res/toolset/ +/src/*.h.bak +/*.sdf +/*.suo +/*.user +/*.opensdf diff --git a/Copying.txt b/Copying.txt new file mode 100644 index 0000000..2c3228e --- /dev/null +++ b/Copying.txt @@ -0,0 +1,5 @@ +MediaInfoXP (GUI for MediaInfo) was created from the scratch by LoRd_MuldeR and is distributed under the terms of the GNU General Public License ('License.html'). + +The Qt GUI Toolkit is Copyright (C) 2012 Digia Finland Ltd and/or its subsidiary(-ies). You may use, distribute and copy the Qt GUI Toolkit under the terms of GNU General Public License version 3. + +MediaInfo(Lib) is Copyright (C) 2002-2013 MediaArea.net SARL. Redistribution and use in source and binary forms, with or without modification, are permitted according to the BSD-2-Clause license. diff --git a/MediaInfoXP.ico b/MediaInfoXP.ico new file mode 100644 index 0000000000000000000000000000000000000000..a6b4c969bcf2f2edcc76b5c0d8f94f6f84b67c86 GIT binary patch literal 28086 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 i!a%{G5YQ5kuvRL>iy+aTPLNVj1gNuvOO$0ks zMIj=HnnBRUR?tKXG11rxCU4&7dG4NbuvR2_mEvc)n?Cow;~Wve|KR^>9@p5l)|QB+ z$jmun3q#x>;ss-PW_mnr2MHVzLAl1RW&0?VkixF*4t!St0YVb2wnKdU(kmOHiL;aW zK8Xte%(k>MVGG$E4no6dcNnb>BhVHHGD&1pv4YZ68kE2V03t5#PCEFm7=ad$6)+3B zTCmn*?A?=u(o~ET7~-7g0)ZB=6|lumi4}B}MLgy~Ysy6)Q5%Al7|05&1z3Jpu>cF8 z3?VXs*3<}%h3`5Wld)N2zJnk%Agw<~3k)sPTLFd=F5;d8-bj-09SkQuynfflNcZLN z!^_37fdZvzrq=9~mp*($%mcDRKC&qvaaZuX+C=AT6O*~tHl>0mcP<_q>-z%$xO(@! zYluq5a8VQI$S@4?r*v;gPo!QQ%pX3A#>xx4t=w-L6COWx?aj&`f+!YePsFtj=hOQR zP3=E2j@9L7s8;T^&s?u(Hdpu?CubjMrGn{t_37>9$|AD)QE08weJlKn8|OyjL~7oP zC8mPT`jzuH*Dh^I0048RGafUIT)4H~*m8m>egI0iH=(LB%b@@O002ovPDHLkV1lw0 B3 + + + MediaInfoXP.ico + MediaInfoXP.png + res/ico_clear.png + res/ico_discard.png + res/ico_folder.png + res/ico_info.png + res/ico_link.png + res/ico_qt.png + res/ico_quit.png + res/logo.png + res/MediaInfo.i386.exe + + diff --git a/MediaInfoXP.rcx b/MediaInfoXP.rcx new file mode 100644 index 0000000..7970d5e --- /dev/null +++ b/MediaInfoXP.rcx @@ -0,0 +1,60 @@ +// Microsoft Visual C++ generated resource script. +// +#include "afxres.h" + + +///////////////////////////////////////////////////////////////////////////// +// +// Neutral resources +// +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +IDI_ICON1 ICON "MediaInfoXP.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,0 + PRODUCTVERSION 1,0,0,0 + FILEFLAGSMASK 0x17L +#ifdef _DEBUG + FILEFLAGS 0x3L +#else + FILEFLAGS 0x2L +#endif + FILEOS 0x40004L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000004b0" + BEGIN + VALUE "Author", "LoRd_MuldeR " + VALUE "Comments", "This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY" + VALUE "CompanyName", "Free Software Foundation" + VALUE "FileDescription", "MediaInfoXP - GUI for MediaInfo" + VALUE "FileVersion", "1.00" + VALUE "InternalName", "MediaInfoXP_Qt" + VALUE "LegalCopyright", "Copyright (C) 2004-2013 LoRd_MuldeR " + VALUE "LegalTrademarks", "This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License " + VALUE "OriginalFilename", "MediaInfoXP.exe" + VALUE "ProductName", "MediaInfoXP - GUI for MediaInfo" + VALUE "ProductVersion", "1.00" + VALUE "Website" "http://muldersoft.com/" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0, 1200 + END +END diff --git a/MediaInfoXP.vcxproj b/MediaInfoXP.vcxproj new file mode 100644 index 0000000..33ca773 --- /dev/null +++ b/MediaInfoXP.vcxproj @@ -0,0 +1,152 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {DCDCCABB-970A-4337-B5BB-7838EE72FE80} + Win32Proj + QtTestApp + + + + Application + true + v110 + Unicode + + + Application + false + v110_xp + true + Unicode + + + + + + + + + + + + + true + $(SolutionDir)\bin\$(PlatformName)\$(Configuration)\ + $(SolutionDir)\tmp\$(PlatformName)\$(Configuration)\obj\ + + + false + $(SolutionDir)\bin\$(PlatformName)\$(Configuration)\ + $(SolutionDir)\tmp\$(PlatformName)\$(Configuration)\obj\ + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;QT_LARGEFILE_SUPPORT;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT;QT_DLL;QT_DEBUG;%(PreprocessorDefinitions) + $(QTDIR)\include\QtCore;%(AdditionalIncludeDirectories) + + + Console + true + $(SolutionDir)..\LameXP_Qt\LameXP\etc\Prerequisites\qt4_static\lib;%(AdditionalLibraryDirectories) + + + + + Level3 + NotUsing + Full + true + true + WIN32;NDEBUG;_CONSOLE;QT_LARGEFILE_SUPPORT;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT;QT_NO_DEBUG;QT_NODLL;%(PreprocessorDefinitions) + $(QTDIR)\include;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;%(AdditionalIncludeDirectories) + MultiThreaded + NoExtensions + AnySuitable + Speed + true + Fast + false + false + false + true + true + false + + + Windows + true + true + true + $(SolutionDir)..\LameXP_Qt\etc\Prerequisites\qt4_static\lib;$(SolutionDir)..\LameXP_Qt\etc\Prerequisites\qt4_static\plugins\imageformats;$(SolutionDir)..\LameXP_Qt\etc\Prerequisites\EncodePointer\lib\;%(AdditionalLibraryDirectories) + QtCore.lib;QtGui.lib;QtSvg.lib;qtmain.lib;qsvg.lib;qico.lib;qtga.lib;Winmm.lib;imm32.lib;ws2_32.lib;Shlwapi.lib;Wininet.lib;PowrProf.lib;psapi.lib;EncodePointer.lib;%(AdditionalDependencies) + false + LinkVerboseLib + true + true + "/MANIFESTDEPENDENCY:type=%27win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27 processorArchitecture=%27*%27" %(AdditionalOptions) + + + + + Document + "$(QTDIR)\bin\uic.exe" -o "$(SolutionDir)\tmp\Common\uic\%(Filename).h" "%(FullPath)" + UIC "$(SolutionDir)\tmp\Common\uic\%(Filename).h" + $(SolutionDir)\tmp\Common\uic\%(Filename).h;%(Outputs) + "$(QTDIR)\bin\uic.exe" -o "$(SolutionDir)\tmp\Common\uic\%(Filename).h" "%(FullPath)" + UIC "$(SolutionDir)\tmp\Common\uic\%(Filename).h" + $(SolutionDir)\tmp\Common\uic\%(Filename).h;%(Outputs) + + + + + Document + "$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)\tmp\Common\rcc\RCC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)" + "$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)\tmp\Common\rcc\RCC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)" + RCC "$(SolutionDir)\tmp\Common\rcc\RCC_%(Filename).cpp" + RCC "$(SolutionDir)\tmp\Common\rcc\RCC_%(Filename).cpp" + $(SolutionDir)\tmp\Common\rcc\RCC_%(Filename).cpp;%(Outputs) + $(SolutionDir)\tmp\Common\rcc\RCC_%(Filename).cpp;%(Outputs) + + + + + + + + + + + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)\tmp\Common\moc\MOC_%(Filename).cpp" "%(FullPath)" + "$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)\tmp\Common\moc\MOC_%(Filename).cpp" "%(FullPath)" + MOC "$(SolutionDir)\tmp\Common\moc\MOC_%(Filename).cpp" + MOC "$(SolutionDir)\tmp\Common\moc\MOC_%(Filename).cpp" + $(SolutionDir)\tmp\Common\moc\MOC_%(Filename).cpp;%(Outputs) + $(SolutionDir)\tmp\Common\moc\MOC_%(Filename).cpp;%(Outputs) + + + + + + + + Document + + + + + + \ No newline at end of file diff --git a/MediaInfoXP.vcxproj.filters b/MediaInfoXP.vcxproj.filters new file mode 100644 index 0000000..a4ee03d --- /dev/null +++ b/MediaInfoXP.vcxproj.filters @@ -0,0 +1,59 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {662311f2-44ab-48a8-8b5b-640453b3422f} + + + {4cc9136e-0434-4027-ae2c-d4c148dd8ed9} + + + {e066a4c2-fc34-4e1b-948e-1a3eea8e277f} + + + + + Dialogs + + + + + + + + Source Files + + + Source Files + + + Source Files\Generated + + + Source Files\Generated + + + + + Header Files + + + Header Files + + + + + + \ No newline at end of file diff --git a/ReadMe.txt b/ReadMe.txt new file mode 100644 index 0000000..3d20f1a --- /dev/null +++ b/ReadMe.txt @@ -0,0 +1,21 @@ + + MediaInfoXP - Simple GUI for MediaInfo + Copyright (C) 2004-2013 LoRd_MuldeR + http://www.muldersoft.com/ + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + http://www.gnu.org/licenses/gpl-2.0.txt + diff --git a/doc/Changelog.txt b/doc/Changelog.txt new file mode 100644 index 0000000..98bbef1 --- /dev/null +++ b/doc/Changelog.txt @@ -0,0 +1,1632 @@ +Notes : +------- ++ Added +- Deleted +x Correction +#number is the identifier of bug report (B), requested feature (F) or patch (P) +bug reports and feature request are here : +http://sourceforge.net/tracker/?group_id=86862 + + +Version 0.7.63, 2013-05-13 +-------------- ++ Switched to a BSD-2-Clause license ++ LXF: AFD (from ancillary stream) support ++ Detection of some side car files and showing them as a single package (optional) ++ MOV: more channel positions information ++ TTML: detection ++ SAMI: detection ++ ID3: updated list of genres, thanks to Mats ++ .so: search a local copy of the library before trying default path ++ AVI: Support of Adobe PARf (Aspect Ratio) chunk ++ VC-3: Scan order ++ #P65, Flac/Ogg DISCTOTAL metadata support, thanks to Kurtnoise ++ #P67, MOV, add Hap Video to the database, thanks to Kurtnoise ++ #P67, Matroska, add VP9 to the database, thanks to Kurtnoise ++ #P68, FLV, add HEVC detection in the FLV parser ++ #P66, MOV, tref/chap handling, with chapters information, thanks to Kurtnoise ++ #P72, MOV, HEVC/H265 detection and basic support, thanks to Kurtnoise ++ #F382/P75, PMP format detection ++ MPEG-TS, HEVC/H265 support ++ 16:10 DAR known value +x #B742, MPEG-4/MOV, crash with some truncated/invalid files +x #B746, MPEG-4/MOV: crash with files having moof atom and no moov atom +x #B747, Inconsistent hang with buffer API +x #B757, MediaInfoDLL.py MediaInfoList was not working, thanks to Elbenfreund +x #B740, XML: dt:dt is replaced by dt (for binary data) +x MXF: Dolby E streams starting only at the second or third frame were not well detected +x MPEG-4/MOV: reducing analysis time for I-frame only video streams +x CEA-708: weird behavior phantom streams are displayed) in case of buggy CEA-708 +x AVI: crash with audio delay and AvgBytesPerSec of 0 +x Wrong demuxing of the caption stream in the case of AVC streams without frame_mbs_only_flag but having 2 fields in one slice. +x DPX: parsing was very slow with a sequence of files. +x MXF: Pre-charge duration was not read, time code of the first frame was wrong if "Origin" is not 0 +x FLV: file was sometimes (e.g. most of the file padded with zeroes) fully parsed +x VC-3: Using values from specifications (based on compression ID) instead of SBD/SST/SPL/APLF from bitstream + +Version 0.7.62, 2012-02-22 +-------------- ++ ARIB STD B24/B37 caption detection (both Japanese and Brazilian versions) ++ LXF: support of AVC, VC-3, MPEG audio, AC-3, Dolby E, and AAC detection and analysis ++ AC-3: support of 22.05 kHz streams (out of specs but they exist) ++ MOV: AIC (Apple Intermediate Codec) scan type detection ++ MOV: support of AVID metadata (interlacement information) ++ Time code dedicated tracks (MOV, MXF, GXF) ++ Time code track (MPEG-4/MOV, GXF, MXF) ++ Time code in SDTI (MXF) ++ Time code in System scheme 1 (MXF) ++ Time code in SMPTE RP 188 (aka SMPTE ST 12-2 aka ATC aka VANC) (GXF, LXF, MXF) ++ Time code in SMPTE RP 196 (aka HANC) ++ MPEG Video Time code ++ MPEG-TS: format_identifier, pointer_field, section_length (hidden by default) ++ CEA-608/708: caption detection duration is increased to 15 seconds (or 64 MB) in order to miss less caption content ++ Image files as a video stream: file name of the last file +x #727, MOV: crash with some malformed files (Time scale set to 0) +x #728, AAC: crash with some malformed streams +x #681, AVI: was not analyzing VBR streams without bit rate info in header +x #736: Division by 0 with 0-byte files +x Id3v2: crash with some malformed tags +x Bit rate display was "0 bps" if the real bit rate is more than 4 Gbps +x Division by 0 in case of 0 byte long file +x MPEG-4: wrong muxing mode information in case of A/53 captions in MPEG Video in MOV +x P2 Clip: wrong uppercase/lowercase in the file name of source files. +x MOV: PCM endianness was sometimes wrong +x MPEG-4: JPEG interlacement was sometimes wrong +x MPEG Video: wrong DAR information in case of DAR change between begin and end of the file + +Version 0.7.61, 2012-10-22 +-------------- ++ MPEG-TS: SCTE 35 and KLV streams are better displayed (in Menu part) ++ MPEG-TS: Menu part contains the list of PID with unknown format ++ MPEG-TS: Menu part lists PID in the PMT order instead of increasing order ++ Display of both container and stream scan type and scan order ++ DV100: scan order ++ MXF: scan order ++ MPEG-TS: Maximum and minimum overal bit rate (only if parse speed is set to 1) ++ MPEG-TS, MPEG-S, MXF, AVI, WM: StreamOrder field added ++ MXF: better support of malformed VANC streams ++ MPEG Video: improved detection of the GOP (more frames are used), "Variable" value ++ MPEG-PS: FirstPacketOrder info added ++ SkipBinaryData option +x #3564456, Matroska: some (other) streams were wrongly detected sa VFR +x #3570092, Id3v2: support of old COM and ULT fields +x CEA-708: crash with some malformed streams +x MPEG-TS: crash when PCR is corrupted (same value at different offsets) +x QuickTIme: wrong channel count report in case of buggy chan atom. Now the stream description has priority over chan atom +x E-AC-3: duration was wrong in some cases +x Matroska: random wrong analysis in case of SimpleBlock mode +x #3574436, MOV: hang on files having buggy "alis" atom +x MPEG-TS: bit rate mode detection was sometimes too much strict about CBR +x DV: wrong detection in case of buggy audio header (if present and set to 0xFF) +x MPEG-4: crash in case of buggy aperture size atom +x MediaInfo_Const.h was missing in the DLL package for Mac +x MPEG-PS: detection of phantom streams +x WAV: detection of malformed >4GB WAV files was no more working +x DTS: computing bit rate from frame size instead of targeted transmission rate +x DTS: setting the bit rate to "unknown" for Master Audio instead of instantaneous bit rate +x DTS: Display of endianess and word size was not coherent + +Version 0.7.60, 2012-09-02 +-------------- ++ MPEG-TS/PS: improved detection of buggy time stamps ++ DPX: color primaries and transfer characteristics ++ MPEG-TS: Added support of scrambled streams without transport_scrambling_control bit set (e.g. PlayReady) ++ MPEG-TS: Name of some scrambling algorithms ++ MPEG-TS: detection of CBR/VBR at container level ++ MPEG Video: better detection of variable GOP +x Matroska: some streams were wrongly detected sa VFR +x #3538378, XML output: invalid characters, now if there is an invalid character, data is transported in base64 +x LXF: wrong video bit rate with some files +x AC-3/E-AC-3: hang up with some Little Endian streams +x AAC: wrong min and max bit rate in case of partial (default) parsing, disabling it +x AVC: crash or hang up with some malformed/scrambled streams +x Opus: wrong duration in case of non-48kHz stream +x MOV: 25 fps + drop frame time codes were not handled correctly + +Version 0.7.59, 2012-08-08 +-------------- ++ License: Switched back to LGPLv2+Exceptions ++ #3555183, PCX support, thanks to Lionel Duchateau ++ #3555182, PSD support, thanks to Lionel Duchateau ++ #3555181, Matroska: ALAC detection, thanks to Lionel Duchateau ++ #3540425, OGG/MKV: Opus speech format support, thanks to Lionel Duchateau ++ #3531808, AVI: detecting more inconsistencies in stream durations ++ GXF: crash with Time code tracks without frame rate info ++ MPEG-4: stream order (hidden by default), in order to provide the same numbers as mkvtoolnix 5.2+ Track ID ++ QuickTime: default channel map is "L R" for stereo streams (as it seems to be in QuickTime player) ++ MPEG-4: support of WMA (version 1, version 2, Pro, Lossless) in MPEG-4 ++ FLV: handling of metadata with an underscore before the real metadata name ++ MXF: support of files with header missing TrackNumber in the descriptor (if it is present only in footer) ++ MXF: Language from DMS-1 ++ ProRes: analysis of the ProRes raw stream (including scan order for interlaced content) ++ colour_primaries, transfer_characteristics, matrix_coefficients: canonicalization of results ++ MPEG-4 Visual: colour_primaries, transfer_characteristics, matrix_coefficients ++ ProRes: colour_primaries, transfer_characteristics, matrix_coefficients ++ GIF: Display Aspect Ratio +x #3533984, different behavior depending of compilation options (so Linux version was missing some info) +x MPEG-4: audio/video delay was wrong in case of negative delay +x CEA-608: Memory leaks removed +x AVC: crash in case of analyzing some invalid SEI +x MPEG Audio: crash with some files having Lyrics 2 tags +x MPEG Audio: crash with some files having APE tags +x AVI: secondary genre comes after primary genres in the "Genre" field +x FLV: better handling of files containing more than 1 meta chunk +x MPEG-TS/MPEG-PS: was aborting during full parsing in the case of very damaged streams +x Vorbis: infinite loop if codebook_entries>=256 +x Id3v2: crash with some unsynchronized frames, especially with UTF-16 comments +x Id3v2: Wrong mime type of covers +x MPEG-PS: crash in case of language info in descriptors +x Java binding: crash with MediaInfo::Inform() (Windows 32-bit only) +x MPEG-TS: false-positive in case of some MPEG-4 files with wrong extension +x FLV: crash in some specific cases (malformed files) +x 3548314, MVC: Scan type was wrong with MVC-only (without the underlying AVC stream) stream +x 3553588, MPLS: stream duration was wrong with standalone (without the referenced M2TS) files +x 3553588, MPLS: incoherent behavior with MPLS having more than one PlayListItem +x 3554154, MPEG-TS: crash with some corrupted streams +x MOV: all EIA/CEA-608 captions were not well detected +x Matroska: Trying to better detect VFR streams, frame rate was wrong in case of interlaced content + +Version 0.7.58, 2012-05-28 +-------------- ++ AC-3: Little Endian streams support ++ LXF: AVC streams support ++ ISM: better support ++ File referencing other files (HLS, ISM...): menu in case there is more than 1 stream per referenced file ++ MPEG-TS: option for keeping streams detected at the beginning then disabled in a an update of the PMT (activated by default) ++ MPEG-PS: program_map_section support for uncommon streams embedded in MPEG-PS +x Referenced files (MXF, HLS, MOV, P2, XDCAM...): issues with source name, track order, files size +x MPEG-TS/MPEG-PS: regression, some files with AC-3/DTS/DVD subtitles were not well analyzed anymore +x MPEG-4 channel mapping: Lt and Rt (matrix-encoded) channel mapping were missing +x GXF: handling of buggy files having non-PCM AES3 codec identifier but actually having PCM +x MPEG-4: better support of MPEG-4 files having corrupted metadata atom +x 3529510, EIA/CEA-708: was not detected if the stream was not present at the beginning, thanks to Pete Chapman + +Version 0.7.57, 2012-05-02 +-------------- ++ #3513490, Vorbis comment (Flac, Ogg): more tags are supported ++ XML-based formats (P2, XDCAM, DCP, ISM, HLS...): support of UTF-16 encoding ++ MPEG-4: for buggy PCM, prioritizing the codec ID "in24" = 24-bit against the bit depth field +x #3516900, Vorbis comment (Flac, Ogg): trying to do better mapping of PERFORMER and ARTIST tags +x MXF: wrong video frame count in some cases +x #3517374, GCC 4.7: compilation issues removal, thanks to SpepS +x MPEG-PS: some files were not well demuxed so analysis was sometimes wrong (especially macroblock parsing) + +Version 0.7.56, 2012-04-08 +-------------- ++ Better support of machines lacking of std::stringstream ++ Better support of machines requesting explicit stdc++ library link option (e.g. some ARM embedded devices) +x #3515515, MPEG-4: crash with MPEG-4 container + H264/AVC video stream +x #3515393, MPEG Audio: infinite loop (freeze) with some files +x #3514677, Video: Well known 1.85:1 display aspect ratio was incorrectly displayed as 16:9 +x #3513908, File interface: No output if filename contain a colon +x #3515893, MPEG-4: some specific files were not detected +x AVI: infinite loop (freeze) with some files (having index containing 0-sized chunk) +x AVC: memory leaks +x libcurl support: libcurl config from MediaInfo is compatible with libcurl+gnutls +x #3515857, CLI only: --LogFile carriage return format was not the one of the OS + +Version 0.7.55, 2012-04-05 +-------------- ++ AC-3: support of little endian streams ++ LXF: support of format version 0 ++ HLS: support of .m3u8 index and sequence referencing a bunch of MPEG-TS files ++ MPEG-4: Added support of glbl atom and corresponding 4CC (ai12, ai15, ai1q, ai5q) ++ MPEG-4: Added detection of files with mx5p files wrongly filled with raw MPEG Video instead of MXF ++ MPEG-TS: Detection of 20-bit Dolby E even if the SMPTE 302 M header is set to 24-bit +x #3513490, Id3v2: mapping of "Encoded by" and "Encoding library" is conform to the specs now +x MXF: hang up with some clip-wrapped files +x MPEG-4: AVC-100 bit rate was not coherent depending of the container (MPEG-4 or MXF) +x reVTMD output is disabled due to its non-free (point of view of FSF and DFSG) licensing. + +Version 0.7.54, 2012-03-13 +-------------- ++ #3480111, Matroska: parsing of WebM-style frame rate info ++ #3499859, ALAC: parsing of the alac atom, for real bit depth / sample rate ++ #3487601, DV: fields order (TFF/BFF) ++ MPEG-4: more video 4CCs binded to MPEG Video ++ H.263: raw stream parsing (width, height, aspect ratio), comparison with container data ++ Speed improvements ++ MPEG-PS: supporting parsing of some non-conform files ++ Full support of CEA-608 (separation of CC1-CC4, T1-T4) ++ #3494722, MPEG-4: trying to detect wrong duration in track header ++ MPEG-4 with embedded MXF track (XDCAM...): separation of video bitrate and padding bitrate ++ Compound streams (e.g. DV): separation of video bitrate and audio bitrate ++ Blu-ray: LPCM mono real bit rate is separated from the encoded (stereo) bit rate ++ Support of https, sftp scp protocols (custom builds only) ++ AVI: vprp (OpenDML) display aspect ratio support +x #3480111, Matroska: some frame rates are incorrect in the file, trying to detect this kind of malformed file +x #3479494, AVC: segmentation fault +x #3440638, AAC: wrong detection for some malformed AAC streams +x #3440638, MPEG-4: wrong analysis of some files having track header after media information +x #3480111, MXF: Height was wrong for MXF with FrameLayout = Mixed fields +x #3468235, Blu-ray: displaying PGS in all cases (even if PES is not detected, they are too much rare) +x #3498846, MPEG-4: delay between audio and video was no more detected +x #3495573, MPEG-4: crash with some files having fragments +x MPEG-4: channel position in case of channel atom is configured with ChannelBitmap +x MPEG-TS: crash with some buggy files (a PID indicated as PSI and PES at the same time) +x AES3: not detecting Dolby E stream if there is guard band before the Dolby E frame, in MPEG-TS +x DPX: some files with some invalid fields were not detected +x DTVCC Captions: crash with some buggy streams + +Version 0.7.53, 2012-01-24 +-------------- ++ DV: option for ignoring transmitting flags (TF1/TF2/TF3) (DLL and CLI only) ++ Matroska: ProRes detection ++ MPEG-4: official DTS CodecIDs (dtsc/dtsh/dtsl/dtse) support, thanks to Lionel Duchateau ++ Matroska: stream order (hidden by default), in order to provide the same numbers as mkvtoolnix 5.2+ Track ID ++ #3471516, BLu-ray: wrong channel count for mono/3-channel/5-channel/7-channel PCM streams ++ AVI: ISMP (SMPTE Time code), Tdat tc_o/tc_a (Adobe Premier time code) support ++ reVTMD output ++ --Output is synonym of --Inform option +x QuickTime: crash and sometimes wrong info with some files having compressed header +x MPEG-4: commercial format typo error (EX422 instead of HD422) +x MXF: handling wrong MXF header having frame height instead of field height +x #3471053, Tags: Id3v1 tag was used instead of Id3v2 if the file is short +x #3463117, MPEG-TS: crash if Conditioal Access PID is same as the PES +x Custom output: better handling of cases with special character strings (\n...) in the file content +x #3440664: Audio only AVI file is missing duration +x #3453476: detection so incorrect duration information in tkhd atom +x Detailled XML output was producing duplicate xml-tags + +Version 0.7.52, 2011-12-19 +-------------- ++ MXF with referenced files: if the referenced file is not available, trying to open local files ++ MPEG Video: GOP size for I-Frame only streams ++ MXF: support of CEA-608 in ancillary data for some other formats than MPEG Video, if there is no B-frame ++ LXF: support of SMPTE ST291/CDP/CEA-608/CEA-708 in ancillary data ++ WAV: better handling of files not having word alignment +x DV: crash (division by zero) in some cases +x DV: DVCPRO HD was sometimes not detected (low bitrate) +x MXF: Crash if AFD field has an invalid value +x MXF: Wrong endianess for some big endian PCM streams +x MXF: some MXF referencing files have wrong duration +x MXF: duration was wrong with some specific files +x DVD-Video: detection of 20-bit and 24-bit PCM +x XML output: it was sometimes containing some invalid characters +x MPEG-4: considering default char set as ISO-8859-1 +x MXF: better handling of referencing files having the same ID for all tracks +x MXF: Handling of MXF files with wrong FooterPartition field +x MXF: Some captions (not starting at the beginning of the file) were not detected +x WAV: duration was missing is some cases +x RMP3 support was broken + +Version 0.7.51, 2011-11-11 +-------------- ++ #2872918, MKV: add support for default and forced track flags ++ #3418881, RK Audio format support, thanks to Lionel Duchateau ++ #3418883, LA: version field, thanks to Lionel Duchateau ++ MPEG-4: basic support of Aigo .3dv files ++ MPEG-2 Video: color display info (colour_primaries, transfer_characteristics, matrix_coefficients) ++ QuickTime: color display info (colour_primaries, transfer_characteristics, matrix_coefficients) ++ QuickTime: ProRes LT, Proxy, 4:4:4 profiles detection ++ QuickTime: mpeg CodecID support ++ Template inputs are now insensitive to carriage return kind (Windows \r\n, Mac \r, Linux \n) ++ MPEG-TS: Support of ISO 8859-2 in EPG ++ MPEG-4: more CodedIDs supported ++ GXF: more info about DV streams ++ GXF: Handling of files with more than 1 Time code +x #3414326, GXF: using only the first map chunk for duration calculation +x #3414513, Id3v2: was not able to extract covers with UTF-16 description +x #3417908, video from several files: crash if there is not enough place for the frame number +x #3433602, DVD-Video (IFO): Crash when scanning some malformed IFO files +x Matroska: parser hanging in case of huge zero-padded files +x MPEG-4: was not providing some info about tracks with sample table before media header +x MXF: better support of corrupted indexes +x #3429831, MediaInfo library: unload wrong DLL, thanks to McSpecky +x MPEG-TS: Better handling of EPG running_status flag +x MXF: Handling of "file:///" in Network loacators +x FLV: audio delay was sometimes wrong +x H264: Buffer size was in bytes instead of bits like with other formats +x #3429196: no output if absolute file name, on Linux +x #3187050, FLV: wrong detection when FLV header is corrupt +x BLu-ray: crash if MPLS files are on the root of a disk +x Blu-ray: parsing was very slow if MPLS was pointing thousands of times on the same file +x #3292830, Matroska: crash if AAC sample rate is not provided by the container + +Version 0.7.50, 2011-09-23 +-------------- ++ DVB Subtitle: region_width / region_height / region_depth (hidden by default) ++ MPEG-4: hdv6 and mx4p CodecID support (MPEG Video) ++ AVI: v210 CodecID (YUV) detect ++ #3411596, CDDA support, thanks to Lionel Duchateau ++ MXF: support of AC-3 ++ #3411999, AVi: detection of GeoVision MPEG-4, thanks to Lionel Duchateau ++ #3411999, MPEG-4: detection of VC-1 (WMV3), Nellymoser and WMA2, thanks to Lionel Duchateau +x AVI: Better support of 2 video streams (e.g. "3D AVI") in a file +x MPEG-TS: Duration was not provided in some cases +x FLV: Delay and duration for AAC was wrong if delay was not 0, thanks to Justin Greer http://zencoder.com +x #3408005, IFO: crash with some files +x MPEG-4: some bitrates where wrong if smooth streaming is used + +Version 0.7.49, 2011-09-09 +-------------- ++ AES3: analyzing AAC, AC-3, MPEG Audio embedded in AES3 stream ++ GXF: detection of DolbyE in AES3 in GXF ++ WAV: detecting AES3 non-PCM audio inside WAV ++ MPEG Video: more precise duration for 29.97 fps material having time code without drop frame flag set ++ MPEG-4/MOV: delay from time code track conforming to Final cut (using integral frame rate value if frame drop flag is not set) ++ Overall bit rate mode (CBR or VBR) ++ DVB Subtitle: region_horizontal_address / region_vertical_address (hidden by default) ++ MPEG-TS: option (--ParseSpeed=0.8) for testing the stream until all advertised streams are detected +x MXF: some files with SDTI were not well demuxed (frame number) or were crashing +x Some files where wrongly detected as MPEG-PS without streams +x AC-3: non-48 KHz streams were not analyzed +x 3164893, JPEG: issue with some JPEG files with no/incorrect extention +x 3403338, crash with four character filenames + +Version 0.7.48, 2011-08-16 +-------------- ++ ISM (ISM/ISMV/ISMA/PIFF...): more attributes (frame rate, frame count, duration) ++ MP3: support of VBRI header in a corrupted frame ++ Active Format Description: muxing mode (A/35 or SMPTE ST 2016-3) ++ MP4/MOV: Displaying info about first description atom of a track (instead of all of them) +x MP4/MOV: scan order (Top/Bottom) from container, thanks to Peter Chapman +x MP4: Channel layout was not filled in some cases +x libmms: default behavior is using official libmms API only +x Vorbis comment: album performer data was in performer field +x Captions in AVC: some captions were not detected and decoded +x AVC: GOP structure info was often wrong +x MXF: IndexTable search was buggy (parsing the whole file) for some rare files (index present twice) + +Version 0.7.47, 2011-07-14 +-------------- ++ ISM (ISM/ISMV/ISMA/PIFF...) support ++ SCC (Scenarist Closed Captioning) support ++ #3201768, BMP: BitmapV4Header support, thanks to Lionel Duchateau ++ MP4: enda atom support (Endianess) ++ MXF: expliciting PCM endianess +x #3354384, Vorbis in AVI, version 3+ was displayed as 2+ +x MPEG-4/MOV: files with big "free" atom were not parsed + +Version 0.7.46, 2011-07-04 +-------------- ++ MXF: TrackName ++ DCP: Basic support (video and audio streams), both Interop and SMPTE versions ++ P2 Clip: Supporting directories with wrong letter case ++ MXF: detection of AES3/Dolby E in mono PCM streams without compression scheme ++ MP4: first frame duration difference if first frame has not the same duration than all other frames ++ MP4: frame rate set as CFR if only the first frame has a different duration ++ MP4: Handling of track duration smaller than media duration (track duration and stream size have priority) ++ #3348936, MXF: OP-Atom profile ++ Matroska, Stereo Layout support, thanks to Lionel Duchateau +x libcurl (FTP/HTTP): seek request was buggy, invalid data was read +x MPEG Video in MPEG-TS or MP4: streams were wrongly detected as VBR or CBR, any bit rate mode is removed until a working solution is found +x AES (S302M): was no more detected if the packet was split in several PES +x #3325235, Vorbis: streams were wrongly reported as CBR +x EXR: Width/Height were 1 less than real value +x #3344635, MP4/MOV: Delay missing if timecode track found before audio/video, thanks to Peter Chapman + +Version 0.7.44, 2011-06-15 +-------------- ++ QuickTime: Support of EIA-608 streams created by Final Cut ++ Matroska: Support of Matroska tags ++ Matroska: parsing of tags at the end of the file (previously: only tags at the beginning) ++ MP4/MOV with uncompressed streams: scan type (interlaced/progressive) ++ YUV4MPEG2 (Y4M) support ++ GXF: more information about AES3 audio streams ++ EXR: Basic support ++ E-AC-3: dialnorm/dynrng (first frame / first block) information ++ LXF: support of DV PAL ++ DPX: Support of Cineon old format ++ DPX: Support of file with Little Endian configuration ++ MPEG-4: better support of file with more than one mdat or moov atom ++ WAV: more details from bext chunk ++ MXF: AFD (in both descriptor or ANC) support ++ MXF: Support of AES3 / Dolby E in 2 mono channels ++ MPEG-4: support of some malformed (without mdat atom) files ++ MXF: Better detection of streams without Essence Compression descriptor +x MPEG Video: Custom matrix detection was broken +x DPX: Industry specific header was not well decoded +x JPEG-2000: Chroma subsampling 4:2:0 was recognized as 4:4:4. +x Matroska: Handling default values for TrackVideoDisplayWidth and TrackVideoDisplayHeight +x MPEG-TS: private audio streams with 0xCO stream_id were not correctly detected +x FLV and RIFF: Changing Sorenson H.263 to Sorenson Spark because this stream format is too much incompatible with H.263 +x MXF: Some specific files (including AFD in descriptor) were not well parsed + +Version 0.7.44, 2011-04-19 +-------------- ++ Russian translation updated ++ AVI: support of some corrupted files (RIFF size set to 0) ++ AC-3: support of streams with 16-byte time stamp between frames ++ MPEG-TS: detecting wrong stream registration information and skipping it ++ NTSC: accepting 483-line streams as NTSC ++ MXF: Parsing speed improvement, especially for high bitrate (>300 Mbps) streams ++ TGA file basic support ++ libmms: MMSH support (Linux/Mac only), thanks to RGB Networks ++ libcurl: HTTP header option and Time to live, thanks to RGB Networks ++ Id3v2 and MPEG-4: possibility to customize tag mapping ++ TIFF: more details +x MXF: some specific files were not analyzed, fix sponsored by http://maxnine.com +x LXF: random crashes + +Version 0.7.43, 2011-03-19 +-------------- ++ MPEG-TS: detection and display of real time PAT/PMT change improved +x EIA-708: crash with some specific files +x MP4: crash with wiles including mix of PCM and other audio formats +x AAC: crash with some malformed streams +x FLV: crash with some specific files (longer audio than video at the end of the file) +x MP4: wrong framerate information with some specific files (track header after media information) + +Version 0.7.42, 2011-03-03 +-------------- ++ AES3: bit depth of AES3, bit depth of compressed audio stream, endianess ++ Id3v2 and MP4 tags: better mapping with iTunes fields ++ Tags: removal of technical only fields ++ MPEG Video: intra_dc_precision information (in advanced mode) ++ MXF: detection of raw pictures ++ MXF: support of URL encoded locators ++ MXF: color subsampling ++ DXW format support +x #3171468, ADIF: crash in some cases +x #3169916, IFO: crash in some cases +x #3173391, Id3v2: was using local encoding instead of ISO-8859-1 +x MPEG Video, discarding bad (always 0) group_start +x AVC: crash with file having big log2_max_pic_order_cnt_lsb_minus4 value +x AVC: wrong GOP information in some cases +x Ut Video: Color space information was wrong +x MPEG-4 Visual: Advanced Simple@L0 was detected as Advanced Simple@L1 +x AVI: Crash with some AVC streams (not sized blocks) +x MPEG Audio: crash with some files +x AAC: crash, infinite loop or wrong result with some files +x Trying to quicker reject a junk file +x AVI: OpenDML indexes were no more parsed + +Version 0.7.41, 2011-01-24 +-------------- ++ MPEG-TS: random cases with full parsing of the file + +Version 0.7.40, 2011-01-24 +-------------- ++ QuickTime: detection of AES3 and Dolby E ++ QuickTime: Apple CEA-608 and CEA-708 (in CDP) support ++ JPEG 2000: Chroma subsampling ++ JPEG 2000 in MXF: Color space ++ JPEG 2000 in MPEG-4 and MJ2: Color space ++ MPEG-4: mx5p CodecID support ++ ISO 9660 (CD/DVD/Blu-ray dump) detection +x MPEG-TS: wrong detection (as encrypted) of some streams with a lot of transmission errors +x MPEG-TS: wrong management of some PAT/PMT updates (real time parsing) +x MPEG Video: wrong duration with some raw streams +x FLV: wrong duration with some files +x libcurl: crash if requesting a libcurl URL but libcurl library not present +x MPEG Audio: crash with some malformed files +x MPEG-4: error between recorded date and encoded date + +Version 0.7.39, 2011-01-03 +-------------- ++ OGG: more CELT attributes, thanks to Lionel Duchateau ++ DV: better detection of display aspect ratio for specific (non standard?) streams ++ MPEG-7: support of ISO-IEC 13818-2 / H.262 (MPEG Video) version 2000 (multi-view / 4:2:2) ++ MXF: Clean aperture size support ++ D-10 (AES3) in MXF: real channel count ++ MPEG-TS: detection and analysis of ADTS in stream_id_extension ++ #2943900, MPEG-4 Visual: count of maximum consecutive B-frames ++ MP4: Handling of Nero library information atom ++ Id3: TAG+ support +x #3140453, MKV with AAC: support of HE-AAC v1/v2 detection even if AudioSpecificConfig is missing +x #3138883, ID3v2: crash in some cases if Data length indicator is used +x #3139417, MPEG-PS: duration for caption detection was shorter than expected +x #3139276, H.263: more precision about the different flavors of H.263 +x AVI and MPEG-2 Audio Layer 3: error if audio stream duration estimation +x FLV: better handling of weird bitrate metadata +x D-10 (AES3) in MXF: Bit rate was wrong +x AC-3: crash if false-positive detection of AC-3 and CRC is valid and bsid is wrongly set +x #3141059, FLV: trying to detect partial files (so metadata are wrong) and using timestamps instead +x #3141052, AVI: wrong duration, no detection of rec chunks, with some files +x #3145968, RealMedia: not integer frame rate handling + HE-AAC filling +x Id3v2: bad handling of some tags +x MPEG-TS/PS: Frame count / duration accuracy of some very specific files +x MPEG-TS/PS: Not counting non-decodable frames (without the corresponding I-Frame) + +Version 0.7.38, 2010-12-16 +-------------- ++ uClibc compatibility, thanks to Metin KAYA ++ MPEG-TS: ID in all streams if a TS streams contains several substreams ++ JPEG in MOV: Scan type ++ AAC: implicit SBR and implicit PS detection (complete HE-AAC and HE-AACv2 detection) ++ AAC/LATM: more details (channels, profile...) ++ AAC/SL: more details (channels, profile...) ++ MPEG-TS and MPEG-PS with trace feature activated (Linux/Mac by default): speed improvement ++ DTS: indication of HD and Core configurations if there is an HD part ++ #3118446, MXF: VC-3 (DNxHD) detection ++ VC-3 (DNxHD) raw stream support ++ VC-3 (DNxHD): Bit depth ++ MPEG-TS: option for ignoring ATSC transport_stream_id indication ++ Windows only, forcing output to UTF-8 +x MPEG-TS: some teletext and DVB subtitles were not detected +x #3111584, MXF: phantom track with weird result if an unknown track is found +x #3116952, DTS and AC-3: was set as lossy in all cases (DTS Master Audio and AC-3 TrueHD are lossless) +x #3137160, ADTS: some files with wrong extension were not correctly detected + +Version 0.7.37, 2010-11-22 +-------------- ++ DPX format support ++ Compression mode (Lossy / Lossless) information (note: JPEG 2000 "profile" is moved to this new field) ++ #3095129, AVI: MLC Lossless codec support ++ #3095136, AVI: AMV Video Codec support ++ IFO: chapter information (thanks to Bastian Wegener) ++ MPEG-4: header size / data size / footer size information (in advanced mode) ++ MPEG-4: AVmp CodecID (.mov referencing .mxf) support +x MXF: avoiding infinite loop due to circular reference + +Version 0.7.36, 2010-10-24 +-------------- ++ HDV 720p/1080i/1080p commercial names support, sponsored by http://www.chyro.fr/ ++ Raw TrueHD support ++ MP4: "lpcm" (PCM from DVD) Support (with channel positions) ++ MKV: compression mode (zlib...) display ++ WAV: support of AAC (ADTS) with CodecID 0x8180 ++ WMV: Handling of weird Aspect Ratio information in Extended Content Description ++ #3087674, Ut Video Lossless support ++ #3087677, WebP: basic support (detection only) ++ #3072929, MP4: DTS Express support ++ MPEG-4: Handling of external files referenced by "code" atom ++ M-JPEG and M-JPEG 2000 are renamed JPEG and JPEG 2000 ++ MP4 and HDV 1080i: detecting containers lying about width (saying 1920 but it is 1440) ++ DTVCC Transport and SCTE20: Option for displaying empty streams ++ DPX format detection +x #3034092, MPEG-TS: hang up if program is modified (zapping) in the file +x AAC: removal of empirical detection of SBR and PS (too many problems) +x AVI: trusting in priority frame count from index of indexes with broken files +x MKV: AVC "unknown profile" removal +x AVC: some frame rates were reported as twice the real frame rate +x #3029308, Id3v2: support of frames with Unsynchronisation bit set +x #3065114, MPEG-Video: duration calculation issues with raw streams and open GOPs +x AFD: crash with malformed streams +x MPEG-7 output: missing references for MPEG-4 Visual and RF64 +x #3086701, ID3: freeze/crash with ID3 tag at the end of the the file +x LXF: some files were not completely analyzed (missing video) +x JPEG: Chroma subsampling value was always set to 4:2:0, wrong +x MP4 with MPEG Video: do not trust anymore raw stream timecode + +Version 0.7.35, 2010-09-05 +-------------- ++ Arabic language added ++ Teletext subtitle support ++ DVB subtitle support ++ CEA-608/708: language ++ Library: "Per frame" interface, like ffmpeg ++ AFD: AFD (Active Format Description) value and detail ++ MPEG-TS: SCTE35 detection and parsing ++ MXF: Ancillary data (S436M) support ++ MPEG-TS: Codec ID (stream_type) ++ MXF parser improvements +x #3036119, MKV: default language value is eng +x DV: weird display with some DV with synch problems. +x AVC: wrong detection of bitrate mode for AVC in MP4 +x MPEG-TS: crash and wrong detection of some non MPEG-TS files + +Version 0.7.34, 2010-07-09 +-------------- ++ New icons set, thanks to Kevin Redon, based on Gnome themes: Neu, Experience, Gnome 2.18 ++ WebM support, sponsored by http://digi-metrics.com/ ++ LXF (Harris/Leitch) support ++ #3008704, IVF (Indeo Video Format) support ++ #3002376, Blu-ray: Source (.m2ts) for the .mpls parser ++ DV: handling of unsynched streams ++ Basic view, Bit Depth is added to the audio part ++ FLV: Framerate info for some not yet supported weird files ++ Demux (library only): demuxed packets can be forced to contain 1 complete frame ++ XML output: MediaInfo version ++ Parsing speed (Library only): option for a quicker analyzing, but with some missing features ++ AVI and Huffman (HFYU): Colorspace ++ AVI and Fraps: Colorspace ++ AVI and Lagarith: Colorspace ++ MPEG-4: Channel map basic support +x CEA-708: Skipping some malformed streams +x JPEG/M-JPEG: Resolution was in some random other field +x #3001707, AAC in MP4: mono aac file detected as stereo +x AVI: crash with some malformed files +x AVI: Stream identifier was not filled in some cases +x MPEG-PS: some files were not well detected +x WAV: Bit Depth is back +x WAV/PCM: Byte sign was wrong if Bit depth >8 +x Decimal point issues with some specific compilers/OS +x MPEG-4: removing support of btrt atom for average bitrate, too many wrong values +x AVI: crash with some specific files (avc1 CodecID) +x MPEG-4+AAC: Trying to better detect the (non)presence of PS if there is no PS header +x MPEG-TS/PS: more precision on duration + +Version 0.7.33, 2010-05-14 +-------------- ++ Slovak language added ++ Colorimetry field is replaced by Color space and Chroma subsampling +x Some word were not translatable +x Solaris port was broken + +Version 0.7.32, 2010-05-02 +-------------- ++ MPEG-7 output improvements ++ DV: Better detection of DVCPRO 50 and 100 (again), especially in MXF ++ P2: support of P2 XML files and P2 directory structure ++ XDCAM: support of XDCAM XML files and XDCAM directory structure ++ N19: More attributes ++ ISO-639-2 3-letter standard for language field (for third-party software) ++ Additional commercial name of a stream or container (XDCAM IMX, DVCPRO, AVC-Intra 50...) ++ MXF: support of detection of files without Track number in the headers ++ MXF: Operational Pattern ++ MPEG-4: Aperture size support +x AVC: some files were wrongly analyzed (frame rate...) +x AVI: better support of files with only one big data chunk (professional cameras) +x MPEG-4: Huge memory usage with some files (files with DV and PCM) +x DVR-MS: width/height was wrong in previous version + +Version 0.7.31, 2010-04-16 +-------------- ++ SCTE 20 closed caption support ++ Difference between width/height in the container and in the raw stream ++ AVC: GOP structure ++ MXF: more raw stream formats are detected (MPEG-4 Visual, A-law...) ++ DV: Better detection of DVCPRO 50 and 100 +x DV: less files without the right extension wrongly detected as DV + +Version 0.7.30, 2010-03-26 +-------------- ++ AVC: Multiview Video Coding (MVC) basic support ++ AVI: better handling of some RGB or RLE codecIDs ++ Solaris package creation files update (with relocation) ++ MSVB: better handling of C pointers ++ WAV: Skipping wrong sample count values ++ GXF: Caption in ancillary data detection +x #2970227, WAV: a file was wrongly detected as DTS +x CEA-608: some captions were wrongly detected as active +x MPEG-7: some corrections in order to be valid +x FLV: Duration for video not starting at Time 0 +x WMV and MPEG-TS/PS: some crashes are fixed +x MSVC2010 and MSVC2008 project files were missing some files + +Version 0.7.29, 2010-03-08 +-------------- ++ GXF (SMPTE 360M / RDD 14) support ++ GXF: support of CDP (SMPTE 334-2) in Ancillary data (SMPTE 334-1) (not complete) ++ AAC in MPEG-TS: Profile/Level ++ PCM in MKV: format name, channel positions ++ MPEG-7 and PBCore 1.2 output (pre-release) ++ MPEG-7: more metadata ++ Solaris package creation files ++ MPEG-TS overall bit rate is more precise +x Channel positions: more coherency in the naming +x DVD-Video (IFO): ID name was in hexadecimal only, now in Decimal+Hexa + +Version 0.7.28, 2010-02-19 +-------------- ++ AIFF: ID3v2 tags support ++ AutoIt3: MediaInfoList interface ++ RIFF: Handling of INFO chunk in hdlr chunk ++ VorbisCom-based comments (FLAC, OGG...): support of new fields ++ MPEG-4 Visual: Duration for raw streams ++ Display Aspect Ratio 3:2 instead of 1.500 ++ Detection of N19 (EBU Tech 3264) ++ MPEG-2 Video: new profiles (4:2:2, Multi-view) ++ MPEG-2 Video: GOP structure ++ MPEG-4: handling of video streams with a different last frame duration ++ RIFF: Skipping OpenDML frame count (not always valid), when index is available ++ AMR: more attributes (Sampling rate, duration...) +x MPEG-PS and MPEG-TS: crash with some files +x MPEG-4: some bitrates to zero with a null bitr or btrt atoms +x MPEG-4: managing different kinds of compressor name format +x AMR in MPEG-4: crash with some specific files +x #2952623, Id3v2: USLT with ISO-8859-1 charset was not well read +x #2952637, Id3v2.2: PIC tag was not well read +x #2952638, XML output: sometimes empty tags +x #2920138, XML output: invalid char in XML tags + +Version 0.7.27, 2010-01-03 +-------------- ++ MPEG Audio: Emphasis ++ MPEG-TS: PCR timestamp can be extracted in real time ++ Linux library: visibility is now limited to the official API ++ License changed to LGPLv3+ for license simplification (same license as the library) +x MPEG Audio, AAC, Vorbis: removal of irrelevant Resolution field even from containers +x MPEG Video: error in calculation of frame rate if sequence extension is used +x MPEG Audio: some VBR files without VBR header were wrongly detected as CBR +x #2921999, unexpected quotes in the text output + +Version 0.7.26, 2009-12-18 +-------------- ++ MXF: support of external files parsing ++ MLP support ++ TrueHD: more details (channels, sampling rate...) ++ TrueHD: display of both core and TrueHD details ++ #2905950, MPEG-4: Cover extraction ++ ADTS: better bitrate estimation ++ #2910579, MPEG-4 Visual: data_partitioned and reversible_vlc display ++ #2910572, MPEG Video: BVOP presence display ++ Internet Media Type (aka MIME-Type) display (but hidden by default) ++ ADTS: Id3v2 support +x #2897584, ID3v2: Crash with some malformed UTF-16 strings +x MXF: Better handling of interlaced content (height and frame rate) +x Homogenization of Video resolution (ie no more 24-bit resolution, but 8-bit) +x MPEG-TS: less false-positive detection of encrypted streams +x MXF: better management of complex files (with references) +x MOV: better management of complex files (with references) +x Digital Video: better management of DV50, more bitrate accuracy +x Digital Video: better management of DV100 (Width, Height, BitRate) +x Digital Video: Some Colorimetry (4:x:x) were wrong +x FLV: some files were not detected +x MPEG Audio, AAC, Vorbis: removal of irrelevant Resolution field +x MPEG formats: some Profile renaming, for more coherency + +Version 0.7.25, 2009-11-13 +-------------- ++ MediaInfo (customized) with HTTP input: User Agent setting ++ #2896693, MPEG-TS: skipping some malformed PMT (with elementary_PID=0) +x #2844911, AAC in 3GP: false detection of SBR and PS (again) +x #2894411, MPEG Audio: UserDefined Covers replace other covers types +x MPEG Audio: Some profiles were not displayed +x RealMedia: Some Titles were not displayed +x Matroska: Wrong detection of 6-channel Wavpack (detected as 2-channel) + +Version 0.7.24, 2009-10-30 +-------------- ++ MPEG-4: DVCPRO HD detection ++ WAV: better handling of Wave Extension codec IDs ++ MPEG Audio: profile and extension display ++ MPEG-TS: More information for ADTS in non-audio PES ID. ++ FLV: test of video bitrate info integrity ++ MPEG-4: "sbtl" subtitles support ++ MPEG-4: old-style Apple language codes support ++ MPEG-4: XDCAM support ++ MPEG Video: vbv_buffer_size info ++ AVC: cpb_size_value info ++ VC-1: hrd_buffer info +x #2882376, AVCHD: reports some incorrect AVCHD framerate +x MPEG-4: some Pixel Aspect Ratio settings were not handled +x Customized output: respect of carriage return from the platform +x MPEG-TS demuxer: more tolerance of bad blocks + +Version 0.7.23, 2009-10-16 +-------------- ++ OGG: more details for MPEG-4 Visual, MPEG Audio and AC-3 ++ MPEG-4: more information for MPEG Audio streams ++ MPEG-4: more information for ADTS streams ++ MPEG-TS: more information for ADTS streams ++ QCP (RFC 3625) format support ++ Refactoring of parsers, for more speed and less false-positives ++ WAV: INFO chunk parsing +x Blu-ray directory analyzing was broken +x VC-1: some streams were not detected +x AMR in MP4: Resolution set to 13 or 14 bits instead of default 16 bits +x Help, Known parameters was hanging up +x AVC: frame rate was wrong for progressive streams with frame doubling +x MPEG-TS: crash while parsing some streams with specific ATSC event_id + +Version 0.7.22, 2009-09-25 +-------------- ++ MPEG-TS: KLV data detection +x #2859504, 3GPP: some files were not detected +x Some corrections about AVI Display Aspect Ratio +x QuickTime: external files were completely parsed, too long +x DV: Support of 4 mono channel configuration + +Version 0.7.21, 2009-09-04 +-------------- ++ More permissive license for redistribution only + Redistribution license is intended for companies + with legal issues (if they can not deal with GPL) ++ AVC: Support of frame doubling/tripling ++ AVC: Colour description ++ QuickTime: support of external files parsing +x #2828430, Quicktime: 180 degrees rotation display was not displayed +x MPEG-TS: whole file was parsed (long) +x MPEG Video / MPEG-4 Visual: new algorithm for library name detection +x #2844911, AAC in 3GP: false detection of SBR and PS +x MKV: some chapters had timecode issues + +Version 0.7.20, 2009-07-31 +-------------- ++ TAK format support, thanks to Lionel Duchateau ++ #2822681, Quicktime: Rotation display (from iPhone...) ++ ASP.net web application example ++ Java/JNA, Linux: dynamic load of libzen if not in LD_PATH +x MPEG-PS: Some durations were a bit too long +x MPEG-PS: Better handling of PTS/DTS for private and extension streams +x ADTS: Handling of SBR and/or PS streams + +Version 0.7.19, 2009-07-17 +-------------- ++ ALS raw files support, thanks to Lionel Duchateau ++ LA (Lossless Audio, old) support, thanks to Lionel Duchateau ++ SLS detection, thanks to Lionel Duchateau ++ AAC: forcing SBR/PS when it is implicit (if <=24KHz, if 1 channel) ++ AVC: Closed captions detection ++ #2813919, APE: CompressionLevel ++ XML output: track names are changed, for a better usability by XML parsers +x MKV: Original display aspect ratio was not displayed +x #2817479, Blu-ray/M2Ts: crash with some specific file names +x MXF: the whole file was parsed, parsing now only the useful part + +Version 0.7.18, 2009-07-03 +-------------- ++ MXF support ++ Blu-ray: BDMV directory parsing ++ Blu-ray: clpi/mpls files support ++ M2TS: Language if the .clpi blu-ray file is found ++ OpenSolaris support ++ MPEG-4 Visual: support of Sony SMC (security video) tags ++ MPEG-4 Visual: ASP profile was wrongly displayed ++ Mac OS X: Creation of universal and 10.4 compatible binaries option +x Mac OS X: no more double-carriage return in Text view + +Version 0.7.17, 2009-06-19 +-------------- ++ #2790156, Folders context menu option ++ Python : adaptation for version 3 ++ XML output (thanks to Steen Jost Jensen) ++ MPEG-PS/TS: ATSC Closed captions (both EIA-608 and EIA-708) detection ++ MPEG-PS/TS: Language of closed caption (ATSC) ++ DV: camera settings ++ DV: Closed captions detection (raw DV, or in .mp4 and AVI container) ++ JPEG 2000 support ++ MPEG-4: support of JPEG 2000 embedded in a MPEG-4 container ++ MPEG-4: support of ProRes 422 / ProRes 422 HQ codecs ++ MPEG-4, AMR: Vendor and version ++ Blu-ray: support of PCM (Frequency, resolution, bitrate) ++ MPEG-TS: speed improvements +x #2803396, sometimes crash with tiny (40-79 bytes) files +x #2801211, MPEG-4/3GP: support of 3GP tags +x #2795345, MPEG-4 Visual: crash with some specific user_data +x #2793960, MKV: some MKV renamed as .ac3 were detected as AC-3 +x #2796417, MPEG-4: Some files with Camera user data were not detected +x #2785604, Build fails on newer GCC versions (>=4.4) +x #2664106, prefs overwritten after installing update +x so interface was not working since some releases on Linux +x MPEG Video: better detection of 2:3 Pulldown +x MPEG-4: Forcing AMR to 8KHz/Mono whatever the container says + +Version 0.7.16, 2009-05-20 +------------- ++ MPEG-4: More information for Avid DV streams ++ MPEG-4: more complete parsing (raw stream) of files with compressed headers ++ VC-1 and MPEG-Video: displaying the original framerate for streams with 2:3 pulldown ++ WMA: Handling of Mutual Excluded streams +x MPEG-4: some files with compressed headers were not parsed +x MPEG-4: Kodak files with EXIF data were not parsed +x MPEG-4 (Quicktime): some files with compressed header were not well parsed +x MPEG-4: Some files with a TimeCode track had wrong duration +x MPEG-PS: some files with wrong timestamp were not well parsed +x MPEG Audio with APE tags: crash with big tags + +Version 0.7.15, 2009-04-30 +------------- ++ Wave64 (.w64) support ++ MPEG-4: Better handling of 4GiB+ files ++ MPEG-4: audio parts from a DV stream are displayed ++ MPEG-4: better DV analyzing ++ DV: parser improvement (speed, accuracy) +x DTS: 768/1536 Kbps streams are corrected to the real bitrate (755/1510 Kbps) +x MPEG-TS: some stream durations were not well computed (few seconds only) +x AVC: freeze with some malformed encoder settings + +Version 0.7.13, 2009-04-03 +-------------- +x Returned value has changed, back to the normal behavior (0 if it is OK) ++ #2635230, MPEG audio: Lame encoder settings ++ #2706146, WMV: detection of container wanted aspect ratio ++ #2611726, MKV: Audio delay detection ++ #2721811, MKV: TrueHD detection ++ Java: JNA (Java Native Access) binding ++ Exported "stream" interface for analyzing streams in memory (beta) ++ SHN (Shorten) detection ++ TAK (Tom's lossless audio compressor) detection ++ MPEG-TS parser optimizations ++ SWF: better handling of videos ++ WAV: better handling of 4GiB+ files ++ WAV: Extensible Wave support ++ MKV: Handling of chapters in multiple languages ++ Stream size for all streams when 1 video and all audio streams are CBR ++ Chapters are moved to menu part for better coherency with MPEG-TS, developers see Changes.txt for more info +x #2712761, AVI: unsupported SalmonSoft text codec makes MediaInfo silently fail +x #2719534, MKV: handling "modified" headers (zero padding) +x #2720822, MPEG Audio: was freezing with 1 malformed file +x #2721949, IFO: some stream IDs were false +x #2725808, MPEG-PS: some "OTA" files were detected with TrueHD instead of normal AC-3 audio + +Version 0.7.12, 2009-03-20 +-------------- ++ Complete refactoring of the code for speed improvements and future features ++ #2686943, MPEG-4: ISMV (IIS Smooth Streaming Media Video) basic support ++ MPEG-4 Visual: distinction between MPEG and H.263 default matrices ++ MPEG-TS: ATSC and DVB EPG support +x MPEG-PS: duplicate stream infos with some AC-3 streams (with program map) + +Version 0.7.11, 2009-02-13 +-------------- ++ OGG: Better Kate and CMML codecs support ++ AVI: Detecting wrong aspect ratio from a broken AVI header ++ DTS: Handling of Little Endian and 14-bit streams ++ WAV: ID3v2 tags parsing ++ MPEG Video: frame order even for progressive sequence +x #2559346, MKV: Detection of framerate in MKV without framerate header +x #2474280, OGG: some streams had bad stream size +x MPEG-TS: some buggy file may corrupt memory +x MP3/Id3v2: crash with one malformed file + +Version 0.7.10, 2009-01-30 +------------- ++ Spanish translation updated ++ Mono (C#/Linux) binding ++ MPEG-4: Encoding library name ++ #2474280, OGG: Old version of Dirac identifier support ++ MPEG-TS: Encoded date for HDV ++ DVR-MS: Delay between two tracks ++ WAV: EBU Broadcast Wave format v1 support ++ CMP4: Basic support +x #2529963: Infinite loop on one file +x #2473140, DTS: error preventing 96/24 DTS detection +x MPEG-4: Better support of Aspect ratio +x Output was unstranslated and weird when $LANG is not set +x C++ binding error in 0.7.9 +x Python binding improved and corrected (no more crash with Linux) + +Version 0.7.9, 2009-01-19 +------------- ++ OGG: Dirac support ++ OGG: Speex support ++ OGG: other formats (JNG, Kate, MIDI, PCM...) detection ++ SWF: detection of more audio streams ++ MPEG-PS: Handling of PlayStation2 audio ++ #2474119, Minimal MZ (PE) and ELF detection ++ SMV (WAV/ADPCM+JPG files) file format support ++ DPG (Nintendo DS) file format support ++ QuickTime: TimeCode track analysis ++ MPEG-4 subtitles: difference between 'text' and 'tx3g' codecIDs +x Python binding update for more compatibilty +x #2474280, OGG: handling of files with Skeleton Metadata +x #2445654, OGG: better false-positives detection +x #2493685, AVI: Wrong video duration for some malformed 4GB+ AVI/DV files +x #2516007, "Language" raw tag was sometimes 3 letter long instead of 2-letter long +x Floating point overflow correction + +Version 0.7.8, 2008-12-09 +------------- ++ Changing version schema, only 3 numbers (next versions will 0.7.9, 0.7.10...) ++ Better Linux integration ++ rpm stuff (thanks to oc2pus http://packman.links2linux.org) ++ deb stuff ++ #2259421, FLAC and OGG: Encoding library name and version ++ FLV: version 10 support ++ FLV: duration of files without metatags ++ MPEG-4: Delay (useful when multiple videos are present) ++ Dirac: profiles updated from the latest specification ++ MPEG-4: more precise detection of OGG based codecs ++ MKV: better newest codecs handling ++ MKV: RealVideo/Audio support improvements ++ mipsel CPU support +x MPEG-PS: Trying to have a better precision for duration +x WMV: crash with some malformed files +x MPEG-TS: some channel names where not shown +x MPEG Video (version 2): some streams were misdetected as CBR + +Version 0.7.7.8, 2008-11-10 +--------------- ++ #2219839, return code is now the count of analyzed files ++ You can now use a language file (ie --Language=file://en.csv) +x Language=raw is without ugly artifacts ++ #2216498, LPCM in VOB: more attributes (channels count, sampling rate, bitrate) ++ #2182135, Wavpack: support of multichannel files ++ AVC: detection of the newest profiles ++ DTS: detection of DTS-HRA, DTS-MA, DTS-Express, thanks to http://madshi.net ++ AES3 PCM in MPEG-TS detection ++ Wavpack: Encoder settings ++ WMV with "WVC1" codec identifier: video interlacement ++ MPEG-4: E-AC-3 support +x #2186682, MPEG-2 Video: Wrong PAR and DAR for Panasonic MPEG2 Files +x MPEG-4: some AC-3 and AAC specific files reported wrong channels value + +Version 0.7.7.7, 2008-10-17 +--------------- ++ Support of VP5 file format ++ MPEG-4 Visual and MPEG Video: can now display the custom matrices data ++ WM: interlacement detection for VC-1 based codecs (WMV3...) ++ #2148321, PNG: more info ++ AVI: Better association of abcAVI tags to MediaInfo tags ++ PureBasic binding ++ Delphi binding: dynamic load (by default) of the library, thanks to Icebob +x #2142995, MPEG-4: handling the Display Aspect Ratio from the track Header (tkhd) +x #2141277, MPEG-PS/TS: Audio ID was hex for MPEG-PS but decimal for MPEG-TS streams +x #2109107, Tags in Flac or Ogg: modification of the tag types priorities +x #2120224, MPEG-4: some specific files were not parsed completely (missing info) +x MPEG-TS with Dirac: some specific files were not parsed completely (missing info) +x MPEG-4: Crash on MPEG-4 Visual format without DecDecoder stuff +x Command line: was not reading custom template in UTF-8 codepage +x DV: some files were not well detected +x MPEG Video: some files were badly detected with 3:2 pulldown +x AVS (Chinese): some corrections, thanks to Tom's translation of documents + +Version 0.7.7.6, 2008-09-12 +--------------- ++ A small doc for helping automatic parsing ++ [2088009] Flac: Picture tag support ++ Flac: Support of Id3v1&2 in a Flac file ++ WM (ASF/WMV/WMA): detection of wrong framerate in header, trusting now the timestamp instead of the header ++ WM (ASF/WMV/WMA): detection of framerate from the timestamp when the framerate info is not available in the header ++ MPEG-4 with AVC: Added information about buggy files readable by all players except iPods ++ OGG: OGG with FLAC (pre- and post-FLAC 1.1.1) support +x FLI/FLC: were not correctly detected +x Output=HTML was not working +x MPEG-TS without PAT/PMT: the complete stream was parsed, may be very long +x Wavpack: duration and bitrate were false +x #2071681, MPEG Audio: handling of truncated MPEG audio frames at the end of a file +x #2032760, MPEG Audio: handling of MPEG Audio files with junk at the end +x #2085149, Id3v2: was crashing with some malformed tags + +Version 0.7.7.5, 2008-08-22 +--------------- ++ Chinese Simplified, Italian, Korean, Russian, Albanian languages updated ++ #2044174, AVS (Chinese Audio Video Standard) support ++ #2030684, AVI: Support of malformed chunks ++ Matroska: delay between audio and video calculation (for AC-3, DTS, MPEG Audio) ++ Full Replay gain support (gain/peak, track/album) for Flac/Ogg/MP3 ++ MPEG-TS without PAT/PMT (example: stream captured by some satellite TV receivers) support ++ MPEG-TS: Service info (name, provider, channel number) for both DVB and ATSC tags ++ Dot and thousand separator localized ++ Matroska: Handling of audio Delay +x #2023872, DV: Crash with floating point exception on some files +x #2024706, BDAV: Some QuickTime files misidentified as BDAV +x #2033307, MPEG Video: Some raw files with high bitrate were not detected +x #2040411, Id3v2: Crash with some malformed Id3v2 fields +x #2036580, Id3v2: Problem when parsing big (>1M) Id3v2 tags, file was no more detected +x #1893830, WMA/WMV: there was textual info (Linux/Mac only) +x Video, Resolution/bits per pixel was sometimes per color entity, sometimes per pixel, now always per pixel +x MPEG Video, the "Component" video standard was not detected +x DLL only, the "by buffer" interface was broken + +Version 0.7.7.4, 2008-07-11 +--------------- ++ #1995653, AVI: Delay of interleaves (example: "64 ms (1.53 video frames)") ++ #1995574, AVI: Report if the audio frames are split across or aligned on ++ MPEG-Video (raw): handling of "not started at the beginning" time_code ++ MPEG-PS: Trying to prevent errors with time code reset in the stream ++ AVC: Trying to detect raw AVC streams without SPS/PPS ++ [2013746] AAC in MPEG-TS: complete parsing of ADTS stream for more info about AAC ++ AAC in MPEG-TS: complete parsing of IOD based stream for more info about AAC ++ MPEG-TS: better detection of PCR time code ++ AAC: specifying the muxing mode (ADIF, ADTS or LATM) ++ MediaInfo DLL: NetBeans java binding example + +Version 0.7.7.3, 2008-06-27 +--------------- ++ MPEG-TS: Detection of scrambled streams ++ #1995566: AVi, Identify ODML files ++ AC-3/DTS/AAC: Added another Channel configuration string (example: "3/2.1") in advanced mode ++ #1995569: Added proportion of each stream in the file (example: "500 MiB (90%)") +x MPEG-TS: Handling of multiple programs in one PMT PID +x MPEG-TS: Handling of streams in multiple programs + +Version 0.7.7.2, 2008-06-13 +--------------- ++ FLV: detection of AVC and AAC +x #1981032, Visual C++ 2008 binary is not compatible with Win9X, coming back to Visual C++ 2005 +x #1964299, Never-ending 100% CPU if input file doesn't exist + +Version 0.7.7.1, 2008-05-30 +--------------- ++ MPEG Video: Detection of 2:3 and 2:2:2:2:2:2:2:2:2:2:2:3 Pulldown ++ VC-1: Detection of 2:3 and 2:2:2:2:2:2:2:2:2:2:2:3 Pulldown ++ AVC: Detection of MBAFF ++ Translations: more words can be translated ++ MPEG-4 files: More info (profile, format settings, encoder name, x264 settings) for some well-known stream formats ++ MPEG-4 files: Better handling of not common formats (ALS, PNG, AC-3, DTS... in .mp4) ++ Bluray: detection of subtitles ++ Additional formats detected: Module, Extended module, Impulse Tracker, Scream Tracker 3 +x #1967663, mp4: some specific iTunes atoms were not correctly parsed + +Version 0.7.7.0, 2008-05-16 +--------------- ++ Python (Windows) binding ++ AC-3 TrueHD in bluray detection (even if the stream is splitted in 2 sub-streams) ++ Original framerate is shown if the framerate from the video stream and the one in the container are different ++ #1955061, Bluray: Duration ++ #1953908, FLV with audio delay detection +x Linux with UTF-8 locale was not accepting non-English characters in filenames +x #1954663, Some mono HE-AAC audio track detected as 2 channels with PS +x VC-1 in TS detection even if the stream_type is not declared +x xxxBSD compatibility + +Version 0.7.6.4, 2008-04-27 +--------------- ++ About the library : Java/Linux binding is available ++ DV (raw) files support ++ Better support of DV in AVI container (type 1 and 2) ++ AVC: Handling of SEI which is before a SPS ++ AVC in AVI: reading more info (Profile, Cabac...) from streams created by FFMpeg ++ Vorbis in AVI: reading more info (Max bitrate, tags...) from streams created by FFMpeg ++ Detection of VC-1 in MPEG-TS from MainConcept encoder ++ MediaInfoLib is now thread-safe +x -f option was not working in the last version +x #1943743, AVI with MPEG-Audio VBR and delay: delay was incorrect +x Pixel Aspect Ratio was sometimes inverted (1/x) +x XviD CodecID was redirected on Koepi website, no more available, changed to official XviD webpage +x #1946098, DV in AVI: DV aspect ratio errors + +Version 0.7.6.3, 2008-04-12 +--------------- ++ AVC: Count of reference frames ++ AU: Comments ++ Some global speed improvement +x #1931844, Id3v2: Unsynchronized frames support (v2.3 & v2.4) + +Version 0.7.6.2, 2008-03-28 +--------------- ++ Spanish translation updated ++ The ToolTip text is now a summary (instead of a complete list) ++ MKV: handling of files created for streaming ++ MPEG-4: Handling of corrupted stream size info with some PCM streams ++ DVD video: Hebrew patch ("iw" code is mapped to Hebrew) +x MPEG-4: better handling of bitrate mode (VBR or CBR) +x AVI: MediaInfo reads now the framerate value from the container rather than the stream value +x #1931844, Id3v2: Unsynchronized frames support (v2.3 & v2.4) + +Version 0.7.6.1, 2008-03-14 +--------------- ++ AC3: TrueHD detection ++ MPEG-TS (or Bluray): VC-1, AC3+ and AC3 TrueHD detection ++ AVC in MKV: all SEI userdata infos from x264/eavc in Writing library settings ++ EVO: Better detection of duration ++ Dirac: raw files parsing ++ MPEG-TS: Dirac management ++ MPEG-TS: DVB subtitles/Teletext management +x MPEG-4 Visual (DivX/XviD): writing library name was missing +x MPEG-Video: some DTS files with wrong extension were detected as MPEG-Video +x SWF: Compressed SWF files support is back +x "Inform" option with file as parameter was not well parsed + +Version 0.7.6.0, 2008-02-29 +--------------- ++ Id3v2.2 (yes, it is old...) support ++ Id3v2: TXXX tags support ++ RMP3 (japanese MP3 based format?) support ++ SAMR in .mp4: some files have wrong sampling rate, forcing it to 8000 Hz ++ File_Created_Date and File_Modified_Date tags added (in advanced mode only) ++ MP3 encoded by Lame: Minimal (VBR) or Nominal (ABR) bitrate +x Better detection of Lame encoder +x AVC Display Aspect Ratio was not well detected if AVC is in a .mp4 container +x Matroska Display Aspect Ratio was deleted if AVC aspect ratio was set, now Matroska has priority +x "Subwoofer" term has been replaced by "LFE", more relevant + +Version 0.7.5.9, 2008-02-08 +--------------- ++ AVC: CABAC detection ++ #1886241: AVC: all SEI userdata infos from x264/eavc in Writing library settings ++ ADPCM: compagny which created the stream is now shown in the codec section ++ PCM: precision about Little/Big endianess, Integer/Floating point method ++ #1882691: AC3+: raw files are now detected +x AVC: FPS were sometimes 2x the reality +x RealMedia parser was brocken +x FLV parser was crashing +x FLV: Better detection of Nellymoser audio +x FLV: Disabling Framerate estimation if a VFR file is detected (estimation was false in this case) +x Better false-positive MP3 detection (NSV files are no more detected as MP3) +x IFO: there was a mistake betwwen NTSC and PAL framerates +x Win9X support was (again) brocken in 0.7.5.8 + +Version 0.7.5.8, 2008-02-01 +--------------- ++ Matroska: Full parsing of DivX/XviD/H264/AVC settings (profile...) ++ AVI: Full parsing of AVC settings (profile...) ++ AVI: Added a tag "OpenDML" (for example, the PlayStation 3 doesn't support OpenDML files) ++ AVC: Framerate, Interlacement, writing library (only for eavc, x264 and MainConcept encoders) ++ TwinVQ : channels, bitrate and sampling rate ++ Musepack SV8 support ++ Musepack and Musepack SV8: tags support ++ AIFF and AIFC format support ++ MIDI format detection ++ FLV: FrameRate even if the tag is not in the header ++ AU/SND audio formats support ++ Vodei encrypted AVI files detection ++ Linux/MacOS: support of 2GiB+ files ++ FLV: Video parsing even if the container says there is no video +x APE Tags v1 are detected again +x MPEG-PS: some malformed files were not well parsed, fixed +x AVC: Cropping was not well handled (example: height was 1088 instead of 1080) + +Version 0.7.5.7, 2008-01-09 +--------------- ++ SWF: Tags version 9 support ++ MPEG-TS: DegiCipher 2 (DCII) support ++ DVR-MS format support (with MPEG Audio or AC3) ++ WMV: language tag ++ MPEG-2 Video: Nominal bitrate +x AVI: some speed improvments +x Output was bad with some files + +Version 0.7.5.6, 2007-12-10 +--------------- ++ AVI, Interlacement for M-JPEG codec ++ AVI, Interleaved tag ++ Better showing of well know values ("44.1 KHz", "22.05 KHz"...) +x AVI, was parsing the whole file in case of non-interleaved files +x MP3, was freezing on specific files +x #1838202: Flac, Resolution was 1 less the the real value (15 bits instead of 16...) + +Version 0.7.5.5, 2007-11-09 +--------------- ++ #1799859: Flac, tags are case insensitive ++ Matroska format parsing improvements ++ .mp4 speed improvement +x BDAV (Bluray) parser compilation was forgotten in the previous version +x AVI, Bitrate and stream size were false +x #1825218: IFO parser was brocken +x #1825521: .mp4 chapters times were wrong +x #1801549: DLL was crashing during Delphi/C# debugging sessions + +Version 0.7.5.4, 2007-11-02 +--------------- ++ Aspect Ratio is renamed Display Aspect Ratio ++ Pixel Aspect Ratio added (in advanced mode) ++ More attributes for AC3+ ++ More attributes for VC-1 ++ Profile and level for MPEG-4 Visual based formats (DivX...), AVC and VC1 ++ Speed improvement for MPEG-TS, MPEG-PS, DVD-Video (.vob), HD-DVD, BluRay ++ MPEG-4 AAC, Channels position ++ AAC (ADIF), More info ++ AAC (ADTS), More info +x FLV, there was bad dates on some specific metatags. +x #1818404: WAV with "float" PCM, bad detection +x CDXA (.dat) files parsing is back + +Version 0.7.5.3, 2007-10-08 +--------------- ++ Better handling of non-Latin characters in the command line ++ Better OGG/OGM parsing ++ Better .ifo (DVD-Video) parsing ++ .rmvb files are now detected in Windows Explorer ++ Win9X/98/Me support does not request Microsoft unicows.lib anymore +x Win95/98/Me support was brocken since 0.7.4.6. It works again. +x #1798997: MPEG-4, some Apple codecs were wrongly reported +x Lot of memory leak correction, you can now parse 1000+ files without problems + +Version 0.7.5.2, 2007-08-16 +--------------- +x Some crashes on Linux PPC with specific files +x #1770477: Video info for some low-bitrate MPEG files were not shown +x #1770509: MPEG 2 Audio Layer 2 was not well detected +x #1763282: FLV, wrong playtime on PPC based machine +x #1734113: IFO, crash with some specific files + +Version 0.7.5.1, 2007-07-23 +--------------- ++ AVI: 24/30 fps (aka 120 fps hack or dual frame rate video) detection ++ TruAudio (.tta) support ++ Wavpack (.wv) support ++ MPEG-4 based containers: Codec/CC tag support ++ #1754143: AC3 & DTS detection in a .mp4 container made with the Haali's gdsmux tool ++ #1754140: AC3 detection in a .mp4 container from Nero Digital ++ #1754905: iPhone files support +x #1750275: HD-DTS was no more detected in a .m2ts (bluray) file +x AVI: AAC profile name was no more detected + +Version 0.7.5.0, 2007-07-09 +--------------- ++ Licence changed from GPLv2 to GPLv3 ++ More information about mpeg-4 based (Nero...) files ++ MediaInfo analyses longer a .vob file to be able to find hidden tracks (subtitles...) ++ #1747633: Encrypted WMV detection ++ FLV: more attributes +x Memory leaks correction +x #1720404: MPEG, rare crashes with some files +x #1721846: AAC ADTS were no more detected +x MPEG Audio: No detection if there is some specific junk before the real audio data +x #1728059: Delphi DLL overflow with big files +x Crash with Youtube FLV files +x AVI: Delay for AC3, DTS and MP3 is back + +Version 0.7.4.7, 2007-05-14 +--------------- ++ OGG Vorbis, "Floor" value (useful for some players which don't support Floor 0) ++ MPEG-Audio, Lyrics3v1/v2, ApeTagv1/v2 parsing ++ MPEG-TS, handling of complex files (multiple programs, 8+ channels...) ++ #1704008: handling of AVC or MPEG-4 Video in a MPEG-TS file without program map ++ VC-1 basic parsing ++ DTS True HD detection ++ AC3+ detection ++ HD-DVD (decyphered) support ++ BluRay (decyphered) support +x MPEG-TS, Duration calculation problem on very rare files +x MPEG-4/iTunes, Tags where not well parsed in 0.7.4.6 +x FLV, freezes or crashes with some files +x #1718269: MPEG-4 Video, Framerate of 65535/2733 is transformed to 23.976 +x Windows Media (ASF/WMA/WMV) with file size more than 4GB were not well handled +x MP4 with file size more than 4GB were not well handled + +Version 0.7.4.6, 2007-04-28 +--------------- ++ Windows 64-bit version of the command line tool and DLL (separately) ++ Linux 64-bit version of the command line tool (separately) ++ More Musepack properties ++ Detection of Musepack v8 files ++ Complete parsing of Real Media files (all tags) ++ Improved Windows Media (ASF/WMA/WMV) parsing ++ MonkeyAudio tags (APETagv1/v2, Id3v1) parsing ++ Ogg/Theora : Video bitrate ++ MPEG audio : More encoder detection (bitstream parsing) ++ SWF (Flash) parsing +x #1665981: Mov - PCM audio (digital camera) was detected as RGB +x #1672896: Wave file with .mp3 extension was detected as MP3 +x #1689570 and #1633237: Better JPEG parsing +x Some other minor bugs + +Version 0.7.4.5, 2007-02-23 +--------------- ++ Program file size reduction ++ WAV : Support of some special tags at the end of the file ++ AVC : Display Aspect Ratio +x 1653325: Wrong Resolution with AVC High Profile +x 1662890: Problem with tag adaptation parser (mainly for ID3v1 genre) +x Better support of corrupted MOV files + +Version 0.7.4.4 2007-02-05 +--------------- ++ You can now use your own templates (take a look on /plugins/custom/ directory) ++ FLV format support ++ Basic support of multiple programs in a MPEG Transport Stream (Satellite broadcast) ++ Basic detection of TwinVQ (.vqf) files (+tag parsing) ++ Better handling of corrupted .mp4 files ++ Better handling of corrupted .avi files +x Crash with corrupted "COMM" Id3v2 tags +x Crash with some audio files +x 1633524: MOV, Crash on files with corrupted Descriptors +x 1630907: MP3, Crash on files with corrupted (empty) Id3v2 tag +x 1637838, 1634549, 1635131: Crash with some audio-only files +x AVI, Better detection of writing application found in a "JUNK" chunk +x AVI, sometimes wrong playtime +x 1637191: AC3 delay in AVIs is back +x 1635134: some freezes with MPEG-7 files (but this format is not yet supported) +x 1635087: some files were wrongly detected as AC3 +x Russian (or other non-latin language) AVI tag parsing is back. + +Version 0.7.4.3 2006-12-22 +--------------- ++ Using of templates for output ++ MPEG-TS : Detect encrypted stream, and show the codec ++ id3v2 with UTF-16 frames ++ AVC in MPEG-TS AVC parsing ++ AVC : Width and Height ++ MacIntel version +x Matroska, some crashing files (with chapters) + +Version 0.7.4.2 2006-12-09 +--------------- ++ Czech language ++ Encoders database updated with 20 new encoder versions ++ Codecs database updated with 100 new codecs (video or audio) +x Matroska, sometimes wrong Playtime +x MPEG-4 : some Titles were not well parsed +x MPEG PS : some video stream were missing +x Crash with some malformed files +x Some debug files were created + +Version 0.7.4.1 2006-12-08 +--------------- ++ MPEG Transport Stream : Video info (Standard, Chroma, Interlacement...) and PlayTime ++ CDXA : PlayTime ++ MPEG-4 Video embedded in MPEG Program Stream support ++ MPEG-1 stream embedded in a Quictime file ++ MPEG-4 AAC Parametric Stereo (SBR-PS) detection ++ Detection of encrypted MPEG-4 (like iTunes) ++ Support of MPEG TS with lot of synchro errors ++ AVI : Exact Stream size calculation (but currently OpenDML files are not supported) ++ MPEG-4 : Exact Stream size calculation ++ Basic support of Korean mobilephone provider Sky (.skm) +x MPEG Program Stream : PlayTime, Delay are corrected +x #1601787 : MOV tracks issues (and crash) +x MOV : was stopping on too big "free" atoms +x MOV : Aspect Ration of DV is corrected +x MPEG : Handling of negative Delays between Audio and Video +x Musepack parser was doing too much "false positives" with some MPEG files + +Version 0.7.4.0 2006-11-24 +--------------- ++ Linux i386 version ++ AVI with AAC-SBR : detection of real SamplingRate (not the sampling rate in header) ++ AVI with DV : basic information about audio ++ AVI with DV : detection of duplicated audio stream ++ Google Video : metadatas ++ AVI : now able to read metadatas at the end of the file ++ AVI : Bitrate computed is based on filesize in header instead of real filesize (for broked files) ++ AVI (DivX) : Menu detection (yes or no) ++ AVI : detection of VBR MP3 (useful for DVD players, sometimes they don't accept it) ++ AVI : detection of Delay between Audio and Video (for MPEG Audio, AC3 and DTS) ++ PlayStationPortable MPEG-4 files support ++ 3GPP5 files support ++ MPEG-4 : Detection of MP3, Vorbis streams embeded in a 'mp4a' atom ++ MPEG-4 : Detection of AVC streams embeded in a 'mp4v' atom ++ MPEG-2TS with MPEG-4 and AC3 detection ++ Speed improvements +x #1551482 "\n" in filename get replaced by newline in "Text" output +x AVI : infinite loop on one example file +x AVI : some bad detections corrected +x MPEG-PS : infinite loop in intra Matrix on one example file +x MPEG TS : better detection of streams + +Version 0.7.3.1 2006-07-30 +--------------- ++ MPEG-1/2 PS : more files have a duration ++ AVI with MPEG-4 Video based codecs (DivX, XviD...), more encoder string detections +x Matroska, crash with big (>4GB) files + +Version 0.7.3.0 2006-07-19 +--------------- ++ MPEG-1 and 2 Transport Stream support ++ MPEG-1 and 2 Video : Custom Matrix detection ++ MPEG-4 Video : Custom Matrix detection ++ Google Video (GVI) support ++ AMV/MTV (Chinese) detection (if you have specifications of theses formats, email me) ++ AVI/DivX/GoogleVideo and MPEG-4 Video : packed bistream detection. + Now you can know if your DVD player can read the file before burning. Next step: a database of DVD player capacities ;-) ++ MPEG-4 : Language ++ MPEG-4 : Text streams (subtitles) +x #1485003 : MP3, "Title" tag was sometimes forgotten +x #1485804 : Wrong bitrate and time in PCM files +x #1485810 : wrong playtime on CBR MP3 files with big id3v2 tags +x #1485803 : some WMA tags were forgotten +x #1488449 : crash on very rare buggy MP3 files +x #1482686 : ShellExtension, crash when moving a directory +x #1488770 : PlayTime, some "minutes" formating were forgotten +x #1485044 : some .ico files were detected as MPEG Audio +x AVI, handle some malformed timestamps in tags (carriage return at the end...) +x MPEG-1 and 2 : incoherancy of PlayTime + +Version 0.7.2.1 2005-05-08 +--------------- ++ MPEG-4 : Chroma ("4:2:0"...) ++ MPEG-4 : Interlacement mode ("Top field first", "bottom field first", or "Progressive") ++ MPEG-2 : Chroma ("4:2:0"...) ++ MPEG-2 : Interlacement mode ("Top field first", "bottom field first", or "Progressive") ++ MPEG-2 : Profile and Level ("Main@Main"...) ++ MPEG-2 : Standard (NTSC, PAL, SECAM, or MAC) +x #1482346 : Incorrect playback time in OGG files (was not enough precise). +x #1482602 : MPEG-4 video false positive files +x "lang=raw" option is back + +Version 0.7.2.0 2005-04-30 +--------------- ++ AVI with DivX or XviD : encoder name, GMC/QPel/B-frames indicator if present (beta) ++ AVI and WAV with MP3 : encoder name, precise version and layer number, VBR indication ++ Matroska: support of anamorphic videos (right Aspect Ration even if pixel aspect ratio is not 1:1) ++ AVI/WAV : support of extended wave files (20 bit per sample and more than 2 channels) and channel position ++ AVI : support of Exif tag format ++ AVI : more tags are supported ++ Real : detect RealAudio Lossless Format +x #1454010 : v0.7.1.2 was checking updates even if the user did not want +x #1454009 : AC3, sometimes wrong AC3 playtime +x #1469423 : MP3 with cyrilic filenames, Id3 tags can be read +x #1464066 : Hang ups with raw h264 streams +x x1462647 : Quicktime files with preview image, crash +x x1445150 : crash with some malformed MusePack files (workaround, this is a the Musepack bug, not yet corrected) + +Version 0.7.1.2 2005-03-10 +--------------- ++ #1441664: (for developpers using CLI) you can now have internal names of each tag ("-lang=raw") ++ #1438441: show TV format (PAL/NTSC) for DVD and DV ++ #1343147: Matroska, Show Chapter names ++ MPEG-1 and 2, more precise playtime ++ MPEG-1 and 2, Added Encoded_Application if it is in video user data ++ Quicktime: Support of Quicktime "wide" (header at the end of the file) ++ MPEG Audio: Detect small (examples, less than 200K) MPEG Audio files with Id3v1 tag ++ #1441661: AVI, Handling of DV Type 1 +x #1440480: No Audio Found in MPEG-2 after 0.7.0.4 +x #1438987: Infinite loop with some Matroska files +x Matroska, Recorded date is now in UTC format, rather than the number of seconds since 1970 +x AC3 noted 5 channels (because of 5.1) are now noted 6 channels (more realistic) +x Quicktime: "ima4" or "twos" codecs were detected as Video stream instead of Audio stream + +Version 0.7.1.1 2005-02-24 +--------------- ++ Now ~900 codec names (Audio/video/Text) are known (instead of 500) ++ Matroska : Framerate is now for all kinds of codec (and not only FourCC based ones) ++ MPEG-4 (m4V, Quicktime...) with unicode filename are now handled (before : crash on htis kind of file) ++ #1326802: MOV with 3GPP datas. ++ Meta-tags of Quickime HD files ++ #1244215: bit-rate details for MPEG-1 Video (VBR) (calculated with other CBR streams) ++ Detection of MXF files ++ #785338: Huge work on RealMedia parser (bitrate, channels, sampling rate, fps...) +x #1435086: Translation problems if the program is launched directly with a filename +x #1361647: Complete rewrite of MPEG-4 (newest Quicktime, 3GPP, iTunes...) parser to be more robust. +x Some minor (but crashing :( ) bug fixes +x AVI with DV was not well parsed + +Version 0.7.1.0 2006-02-02 +--------------- ++ Speed improvements ++ #1383832 : support of last version of Quicktime files ++ Support of Musepack files ++ Support of Flic (FLI/FLV) video files ++ Support of DTS-HD (DTS at 96 KHz / 24 bits) ++ Support of ID3 tags (v1 and v2) in .AAC files ++ Support of all Tags in AVI files ++ Detection of QuickTime image files and QuickTime compressed archives ++ Detection of AVC files (3GPP, 3GPP Mobile or JVT) ++ Detection of iTunes protected files ++ Detection of H264 files (Raw, 3GPP or JVT) ++ Detection of Dirac raw video files ++ Detection of TrueAudio files ++ Detection of WavePack files ++ Support of files with more than 8 audio streams or 32 text streams +x #1420672 : No WMV bitrate +x Crash with some corrupted MPEG files +x Crash with some MP3 files with corrupted ID3v2 tags +x Crash with some Quicktime files with corrupted tags +x #1257550 (again :) ) : with AVI, rounding of FPS had an impact of FrameCount, based on FPS. Now based on AVI file (better ;-) ) +x #1381652 : Reported some GIF files as Mpeg audio +x #1381619 : UPX compressor is no more used, to prevent Virus checker to use 100% CPU +x 2nd Video framerate forgotten +x Video languages were not parsed (example : "en" should be "English") +x FrameRate/String was forgeting measure (example : "at 25" should be "at 25 fps") +x Some case sensitive problems (example : "KBps" instead of "Kbps", 8 times more) +x DTS and AC3 channels position names were changed to be more human readable + +Version 0.7.0.3 2005-11-14 +--------------- +NOTE : this version is released with urgency, because of Kaspersky anti-virus false-positive detection. It should be compatible with MediaInfo 0.6.1.1 (mainly for AutoGK compatibility), but I don't promise all works! ++ Uses MediaInfoLib 0.7.0.3 ++ Text : URL for Text codecs ++ Support of ISO-639 language names (more than 200 language names can be translated) ++ Support of "multilanguage" language name (ISO-639 "mul") +x #1323208 : Video Bitrate for OGM files with VBR audio was incorrect ++ Better detection and handling of DivX container ++ #1327902 : More meta data properties for RIFF files +x #1327468 : RIFF (AVI) files with not-padded (INFO) sub chunks can't be parsed ++ More "generic" tags added +x Some other minor bugs +x #1257550 : rounding of FPS was 2 digit precise, not enougth, upgraded to 3 digits, and exact number is given (23.97 before, 23.970 or 23.976 now) +x Better false positive detection (mainly in MPEG1, MPEG2, MP3) +x some memory leaks if you use MediaInfo a long time +x MPEG Audio : VBR bitrate corrected for MPEG **1** streams +x MPEG Audio : VBR bitrate corrected for monochannel streams +x #1274999 : mp3Pro timing was wrong (2x the real timing) ++ "BitRate_Mode" with MP3 (VBR or CBR) ++ "PlayTime" with AC3 ++ "PlayTime" with WAV + +Version 0.6.1.1 2005-06-24 +--------------- +New +- Uses MediaInfoLib 0.6.1.1 + +Warning : +APE parser has some problem with ANSI compilation, I disabled it in this release. +Hope to have it again in the next release. + +Version 0.5.2. 2005- +--------------- +New +- Uses MediaInfoLib 0.5.2.0 +- Begin of compilation under Linux : Core, and OGG format + +Version 0.5.0.2 2005-01-11 +--------------- +New +- Uses MediaInfoLib 0.5.1.0 + +Bug fixes +- Some problems with CreateFile : if CreateFile doesn't work, I use WxFile instead +- MPEG Video and MPEG Audio : bug between version 0.4 and version 0.5 corrected +- PlayTime Calculation for OGM was false + +Version 0.5.0.1 2005-01-11 +--------------- +New +- Uses MediaInfoLib 0.5.0.1 + +Bug fixes +- Win95/Win98/WinMe support again! (problem with Unicode and AVI) +- AVI files were not well released (file locked) +- Better MPEG4 support +- Better coherency tests : no more file with 10 MP3 streams ;-) + +Version 0.5.0.0 2004-01-10 +--------------- +New : +- Using MediaInfoLib 0.5.0.0 + +Bug fixes : +- "-f" doesn't need to be in last position any more +- Can really analyse multiple files on command line + +Version 0.4.0.1 2003-08-01 +--------------- +Bug fixes +Using MediaInfoLib 0.4.0.1 \ No newline at end of file diff --git a/doc/License.MediaInfo.html b/doc/License.MediaInfo.html new file mode 100644 index 0000000..773df87 --- /dev/null +++ b/doc/License.MediaInfo.html @@ -0,0 +1,75 @@ + + + + +MediaInfo(Lib) License + + + +
+

MediaInfo(Lib) License

+ +

Copyright (c) 2002-2013 MediaArea.net SARL. All rights reserved.

+ +

Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met:

+ +
    +
  • Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer.
  • + +
  • Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution.
  • +
+ +

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +

+
+ +
+
+

Third party libraries

+

+The software relies on third party libraries. Such libraries have their own license: +

    +
  • C++ standard library: libstdc++, libc++, Visual C++ library or any other C++ standard library.
  • +
  • Base classes library: ZenLib, (c) MediaArea.net SARL, zlib license.
  • +
  • GUI (optional): Qt.
  • +
  • GUI (optional): WxWidgets.
  • +
  • XML parser (optional): TinyXML-2.
  • +
  • gzip decompression routine (optional): zlib.
  • +
  • FTP, FTPS, SFTP, HTTP, HTTPS (optional): libcurl.
  • +
  • MMS (optional): libmms.
  • +
+

+
+ +
+
+

Contributors

+

+

    +
  • Jérôme Martinez (main developper)
  • +
  • Lionel Duchateau (odd formats support)
  • +
  • MPC-HC team (tests)
  • +
  • FlylinkDC++ team (tests)
  • +
  • Max Pozdeev (former native Mac GUI developper)
  • +
+

+
+ + + diff --git a/doc/License.Qt.html b/doc/License.Qt.html new file mode 100644 index 0000000..ee022b1 --- /dev/null +++ b/doc/License.Qt.html @@ -0,0 +1,150 @@ + +Qt LICENSE AGREEMENT
+Qt LICENSE AGREEMENT
+Agreement version 3.9.2
+
+This  License Agreement for Qt ("Agreement") is a legal agreement between Digia Finland Ltd ("Digia"), with its registered office at Valimotie 21, FI-00380 Helsinki, Finland and you (either an individual or a legal entity) ("Licensee") for the Licensed Software (as defined below).
+
+1. DEFINITIONS
+"Affiliate" of a Party shall mean an entity (i) which is directly or indirectly controlling such Party; (ii) which is under the same direct or indirect ownership or control as such Party; or (iii) which is directly or indirectly owned or controlled by such Party.  For these purposes, an entity shall be treated as being controlled by another if that other entity has fifty percent (50 %) or more of the votes in such entity, is able to direct its affairs and/or to control the composition of its board of directors or equivalent body.  
+"Applications" shall mean Licensee's software products created using the Licensed Software which may include portions of the Licensed Software.
+"Designated User(s)" shall mean the employee(s) of Licensee acting within the scope of their employment or Licensee's consultant(s) or contractor(s) acting within the scope of their services for Licensee and on behalf of Licensee.
+"Initial Term" shall mean the period of time one (1) year from the later of (a) the Effective Date; or (b) the date the Licensed Software was initially delivered to Licensee by Digia.  If no specific Effective Date is set forth in the Agreement, the Effective Date shall be deemed to be the date the Licensed Software was initially delivered to Licensee.
+"License Certificate" shall mean the document accompanying the Licensed Software which specifies the modules which are licensed under the Agreement, Platforms and Designated Users.  
+"Licensed Software" shall mean the computer software, "online" or electronic documentation, associated media and printed materials, including the source code, example programs and the documentation delivered by Digia to Licensee in conjunction with this Agreement.  Licensed Software does not include Third Party Software (as defined in Section 7).
+"Modified Software" shall mean modifications made to the Licensed Software by Licensee.
+"Nokia" shall mean Digia Plc, a corporation incorporated under the laws of Finland, having its registered office at PO box 226, 00045 Nokia Group, Finland (visiting address Keilalahdentie 4, 02150 Espoo, Finland) and registered with the Finnish Trade Register under business ID 0112038-9 and acting on behalf of its respective Affiliates.
+"Party or Parties" shall mean Licensee and/or Digia.
+"Platforms" shall mean the operating systems listed in the License Certificate. 
+"Redistributables" shall mean the portions of the Licensed Software set forth in Appendix 1, Section 1 that may be distributed with or as part of Applications in object code form.
+"Support" shall mean standard developer support that is provided by Digia to assist eligible Designated Users in using the Licensed Software in accordance with its established standard support procedures listed at:  http://qt.digia.com/
+"Updates" shall mean a release or version of the Licensed Software containing enhancement, new features, bug fixes, error corrections and other changes that are generally made available to users of the Licensed Software that have contracted for maintenance and support.
+
+2. OWNERSHIP
+The Licensed Software is protected by copyright laws and international copyright treaties, as well as other intellectual property laws and treaties. The Licensed Software is licensed, not sold.  
+To the extent Licensee submits bug fixes or error corrections, including information related thereto, Licensee hereby grants to Digia a sublicensable, irrevocable, perpetual, worldwide, non-exclusive, royalty-free and fully paid-up copyright and trade secret license to reproduce, adapt, translate, modify, and prepare derivative works of, publicly display, publicly perform, sublicense, make available and distribute error corrections and bug fixes, including derivative works thereof.  All Digia's and/or its licensors' trademarks, service marks, trade names, logos or other words or symbols are and shall remain the exclusive property of Digia or its licensors respectively.
+
+3. MODULES
+Some of the files in the Licensed Software have been grouped into modules. These files contain specific notices defining the module of which they are a part. The modules licensed to Licensee are specified in the License Certificate. The terms of the License Certificate are considered part of the Agreement. In the event of inconsistency or conflict between the language of this Agreement and the License Certificate, the provisions of this Agreement shall govern.
+ 
+4. VALIDITY OF THE AGREEMENT
+By installing, copying, or otherwise using the Licensed Software, Licensee agrees to be bound by the terms of this Agreement. If Licensee does not agree to the terms of this Agreement, Licensee may not install, copy, or otherwise use the Licensed Software.  In addition, by installing, copying, or otherwise using any Updates or other components of the Licensed Software that Licensee receives separately as part of the Licensed Software, Licensee agrees to be bound by any additional license terms that accompany such Updates, if any. If Licensee does not agree to the additional license terms that accompany such Updates, Licensee may not install, copy, or otherwise use such Updates.
+Upon Licensee's acceptance of the terms and conditions of this Agreement, Digia grants Licensee the right to use the Licensed Software in the manner provided below.
+
+5. LICENSES
+5.1 Using, modifying and copying
+Digia grants to Licensee a non-exclusive, non-transferable, perpetual license to use, modify and copy the Licensed Software for the Designated User(s) specified in the License Certificate for the sole purposes of designing, developing, and testing Application(s). 
+Licensee may install copies of the Licensed Software on an unlimited number of computers provided that only the Designated Users use the Licensed Software. Licensee may at any time designate another Designated User to replace a then-current Designated User by notifying Digia, provided that a) the then-current Designated User has not been designated as a replacement during the last six (6) months; and b) there is no more than the specified number of Designated Users at any given time. 
+
+5.2	Redistribution
+a) Digia grants Licensee a non-exclusive, royalty-free right to reproduce and distribute the object code form of Redistributables for execution on the specified Platforms. Copies of Redistributables may only be distributed with and for the sole purpose of executing Applications permitted under this Agreement that Licensee has created using the Licensed Software. Under no circumstances may any copies of Redistributables be distributed separately. This Agreement does not give Licensee any rights to distribute any of the parts of the Licensed Software listed in Appendix 1, Section 2, neither as a whole nor as parts or snippets of code. 
+b) Licensee may not distribute, transfer, assign or otherwise dispose of Applications and/or Redistributables, in binary/compiled form, or in any other form, if such action is part of a joint software and hardware distribution, except as provided by a separate runtime distribution license with Digia or one of its authorized distributors.  A joint hardware and software distribution shall be defined as either:  
+(i) 	distribution of a hardware device where, in its final end user configuration, the main user interface of the device is provided by Application(s) created by Licensee or others, using the Licensed Software, and depends on the Licensed Software or any Qt or Qt-based software product; or 
+(ii) 	distribution of the Licensed Software with a device designed to facilitate the installation of the Licensed Software onto the same device where the main user interface of such device is provided by Application(s) created by Licensee or others, using the Licensed Software or any Qt or a Qt-based product, and depends on the Licensed Software.
+
+5.3	Further Requirements
+It is expressly acknowledged and understood by Licensee, that Licensee is strictly prohibited from using Licensed Software for creation of mobile phones or tablet computers targeted for consumer end users. 
+The aforementioned shall not prohibit Licensee from using Licensed Software for the purpose of creating of applications for any devices, including mobile phone and tablet computers.
+Notwithstanding anything contrary to this Agreement, it is expressly acknowledged and understood by Licensee, that Nokia shall hereby be named as a third party beneficiary under this Agreement with respect to this Section 5.3. Therefore, Nokia shall have the same rights as Digia under this Agreement with respect to this Section 5.3, and shall be entitled to exercise such rights independent from Digia. 
+The licenses granted in this Section 5 by Digia to Licensee and Licensee Affiliates are subject to Licensee and Licensee Affiliate's compliance with Section 8 of this Agreement.
+6. VERIFICATION
+Digia or a certified auditor on Digia's behalf, may, upon its reasonable request and at its expense, audit Licensee with respect to the use of the Licensed Software. Such audit may be conducted by mail, electronic means or through an in-person visit to Licensee's place of business.  Any such in-person audit shall be conducted during regular business hours at Licensee's facilities and shall not unreasonably interfere with Licensee's business activities. Digia shall not remove, copy, or redistribute any electronic material during the course of an audit. If an audit reveals that Licensee is using the Licensed Software in a way that is in material violation of the terms of the Agreement, then Licensee shall pay Digia's reasonable costs of conducting the audit. In the case of a material violation, Licensee agrees to pay Digia any amounts owing that are attributable to the unauthorized use. In the alternative, Digia reserves the right, at Digia's sole option, to terminate the licenses for the Licensed Software.
+
+7. THIRD PARTY SOFTWARE
+The Licensed Software may provide links to third party libraries or code (collectively "Third Party Software") to implement various functions.  Third Party Software does not comprise part of the Licensed Software. In some cases, access to Third Party Software may be included along with the Licensed Software delivery as a convenience for development and testing only. Such source code and libraries may be listed in the ".../src/3rdparty" source tree delivered with the Licensed Software or documented in the Licensed Software where the Third Party Software is used, as may be amended from time to time, do not comprise the Licensed Software.  Licensee acknowledges (1) that some part of Third Party Software may require additional licensing of copyright and patents from the owners of such, and (2) that distribution of any of the Licensed Software referencing any portion of a Third Party Software may require appropriate licensing from such third parties.  
+
+8. CONDITIONS FOR CREATING APPLICATIONS AND DISTRIBUTING REDISTRIBUTABLES
+The licenses granted in this Agreement for Licensee to create Applications and distribute them and the Redistributables (if any) to Licensee's customers is subject to all of the following conditions: (i) all copies of the Applications which Licensee creates must bear a valid copyright notice, either Licensee's own or the copyright notice that appears on the Licensed Software; (ii) Licensee may not remove or alter any copyright, trademark or other proprietary rights notice contained in any portion of the Licensed Software, including but not limited to the About Boxes in "Qt Assistant" and "Qt Linguist" as defined in Appendix 1; (iii) Redistributables, if any, shall be licensed to Licensee's customer "as is"; (iv) Licensee shall indemnify and hold Digia, its Affiliates, contractors, licensors, and  suppliers, harmless from and against any claims or liabilities arising out of the use, reproduction or distribution of Applications; (v) Applications must be developed using a licensed, registered copy of the Licensed Software; (vi) Applications must add primary and substantial functionality to the Licensed Software; (vii) Applications may not pass on functionality which in any way makes it possible for others to create software with the Licensed Software, however Licensee may use the Licensed Software's scripting and QML ("Qt Quick") functionality solely in order to enable scripting, themes and styles that augment the functionality and appearance of the Application(s) without adding primary and substantial functionality to the Application(s); (viii) Applications may not compete with the Licensed Software; (ix) Licensee may not use Digia's or any of its suppliers' names, logos, or trademarks to market Application(s), except to state that Application was developed using the Licensed Software.
+NOTE:  The Open Source Editions of Qt products and the Qt, Qtopia and Qt Extended versions licensed by Digia and previously licensed by Nokia and Trolltech (collectively referred to as "Open- source Qt Products") are licensed under the terms of the GNU Lesser General Public License version 2.1 ("LGPL") and/or the GNU General Public License versions 2.0 and 3.0 ("GPL") (as applicable) and not under this Agreement.  If Licensee, or another third party, has, at any time, developed all (or any portions of) the Application(s) using a version of one of these Open-source Qt Products licensed under the LGPL or the GPL, Licensee may not combine such development work with the Licensed Software and must license such Application(s) (or any portions derived there from) under the terms of the GNU Lesser General Public License version 2.1 (Qt only) or GNU General Public License version 2.0 (Qt, Qtopia and Qt Extended) or version 3 (Qt only) copies of which are located at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html, http://www.fsf.org/licensing/licenses/info/GPLv2.html, and http://www.gnu.org/copyleft/gpl.html.
+
+9. LIMITED WARRANTY AND WARRANTY DISCLAIMER
+Digia hereby represents and warrants with respect to the Licensed Software that it has the power and authority to grant the rights and licenses granted to Licensee under this Agreement. Except as set forth above, the Licensed Software is licensed to Licensee "as is". To the maximum extent permitted by applicable law, Digia on behalf of itself,  suppliers, and licensors disclaims all warranties and conditions, either express or implied, including, but not limited to, implied warranties of merchantability, fitness for a particular purpose, title and non-infringement with regard to the Licensed Software.
+
+10. LIMITATION OF LIABILITY 
+If, Digia's warranty disclaimer notwithstanding, Digia is held liable to Licensee, whether in contract, tort or any other legal theory, based on the Licensed Software, Digia's entire liability to Licensee and Licensee's exclusive remedy shall be, at Digia's option, either (A) return of the price Licensee paid for the Licensed Software, or (B) repair or replacement of the Licensed Software, provided Licensee returns to Digia all copies of the Licensed Software as originally delivered to Licensee. Digia shall not under any circumstances be liable to Licensee based on failure of the Licensed Software if the failure resulted from accident, abuse or misapplication, nor shall Digia under any circumstances be liable for special damages, punitive or exemplary damages, damages for loss of profits or interruption of business or for loss or corruption of data. Any award of damages from Digia to Licensee shall not exceed the total amount Licensee has paid to Digia in connection with this Agreement. 
+
+11. SUPPORT AND UPDATES 
+Licensee shall be eligible to receive Support and Updates during the Initial Term, in accordance with Digia's then current policies and procedures, if any. Such policies and procedures may be changed from time to time. Following the Initial Term, Digia shall no longer make the Licensed Software available to Licensee unless Licensee purchases additional Support and Updates according to this Section 11 below.
+Licensee may purchase additional Support and Updates following the Initial Term at Digia's terms and conditions applicable at the time of renewal. 
+
+12. CONFIDENTIALITY
+Each party acknowledges that during the Initial Term of this Agreement it shall have access to information about the other party's business, business methods, business plans, customers, business relations, technology, and other information, including the terms of this Agreement, that is confidential and of great value to the other party, and the value of which would be significantly reduced if disclosed to third parties (the "Confidential Information"). Accordingly, when a party (the "Receiving Party") receives Confidential Information from another party (the "Disclosing Party"), the Receiving Party shall, and shall obligate its employees and agents and employees and agents of its affiliates to: (i) maintain the Confidential Information in strict confidence; (ii) not disclose the Confidential Information to a third party without the Disclosing Party's prior written approval; and (iii) not, directly or indirectly, use the Confidential Information for any purpose other than for exercising its rights and fulfilling its responsibilities pursuant to this Agreement. Each party shall take reasonable measures to protect the Confidential Information of the other party, which measures shall not be less than the measures taken by such party to protect its own confidential and proprietary information. 
+"Confidential Information" shall not include information that (a) is or becomes generally known to the public through no act or omission of the Receiving Party; (b) was in the Receiving Party's lawful possession prior to the disclosure hereunder and was not subject to limitations on disclosure or use; (c) is developed by employees of the Receiving Party or other persons working for the Receiving Party who have not had access to the Confidential Information of the Disclosing Party, as proven by the written records of the Receiving Party or by persons who have not had access to the Confidential Information of the Disclosing Party as proven by the written records of the Receiving Party; (d) is lawfully disclosed to the Receiving Party without restrictions, by a third party not under an obligation of confidentiality; or (e) the Receiving Party is legally compelled to disclose the information, in which case the Receiving Party shall assert the privileged and confidential nature of the information and cooperate fully with the Disclosing Party to protect against and prevent disclosure of any Confidential Information and to limit the scope of disclosure and the dissemination of disclosed Confidential Information by all legally available means. 
+The obligations of the Receiving Party under this Section shall continue during the Initial Term and for a period of five (5) years after expiration or termination of this Agreement.  To the extent that the terms of the Non-Disclosure Agreement between Digia and Licensee conflict with the terms of this Section 12, this Section 12 shall be controlling over the terms of the Non-Disclosure Agreement.
+
+13. GENERAL PROVISIONS
+13.1	Marketing
+Digia may include Licensee's company name and logo in a publicly available list of Digia customers and in its public communications.
+
+13.2	No Assignment
+Licensee shall not be entitled to assign or transfer all or any of its rights, benefits and obligations under this Agreement without the prior written consent of Digia, which shall not be unreasonably withheld. Digia shall be entitled to assign or transfer any of its rights, benefits or obligations under this Agreement on an unrestricted basis.
+
+13.3 	Termination
+Digia may terminate the Agreement at any time immediately upon written notice by Digia to Licensee if Licensee breaches this Agreement.  
+Either party shall have the right to terminate this Agreement immediately upon written notice in the event that the other party becomes insolvent, files for any form of bankruptcy, makes any assignment for the benefit of creditors, has a receiver, administrative receiver or officer appointed over the whole or a substantial part of its assets, ceases to conduct business, or an act equivalent to any of the above occurs under the laws of the jurisdiction of the other party.
+Upon termination of this Agreement, Licensee shall return to Digia all copies of Licensed Software that were supplied by Digia. All other copies of Licensed Software in the possession or control of Licensee must be erased or destroyed. An officer of Licensee must promptly deliver to Digia a written confirmation that this has occurred.
+
+13.4	Surviving Sections 
+Any terms and conditions that by their nature or otherwise reasonably should survive a cancellation or termination of this Agreement shall also be deemed to survive.  Such terms and conditions include, but are not limited to the following Sections: 2, 5.1, 6, 7, 8(iv), 10, 12, 13.5, 13.6, 13.9, 13.10 and 13.11 of this Agreement.  Notwithstanding the foregoing, Section 5.1 shall not survive if the Agreement is terminated for material breach.
+
+13.5	Entire Agreement 
+This Agreement constitutes the complete agreement between the parties and supersedes all prior or contemporaneous discussions, representations, and proposals, written or oral, with respect to the subject matters discussed herein, with the exception of the non-disclosure agreement executed by the parties in connection with this Agreement ("Non-Disclosure Agreement"), if any, shall be subject to Section 12. No modification of this Agreement shall be effective unless contained in a writing executed by an authorized representative of each party. No term or condition contained in Licensee's purchase order shall apply unless expressly accepted by Digia in writing. If any provision of the Agreement is found void or unenforceable, the remainder shall remain valid and enforceable according to its terms. If any remedy provided is determined to have failed for its essential purpose, all limitations of liability and exclusions of damages set forth in this Agreement shall remain in effect.
+
+13.6	Payment and Taxes 
+If credit has been extended to Licensee by Digia, all payments under this Agreement are due within thirty (30) days of the date Digia mails its invoice to Licensee.  If Digia has not extended credit to Licensee, Licensee shall be required to make payment concurrent with the delivery of the Licensed Software by Digia.  All amounts payable are gross amounts but exclusive of any value added tax, use tax, sales tax or similar tax. Licensee shall be entitled to withhold from payments any applicable withholding taxes and comply with all applicable tax and employment legislation.  Each party shall pay all taxes (including, but not limited to, taxes based upon its income) or levies imposed on it under applicable laws, regulations and tax treaties as a result of this Agreement and any payments made hereunder (including those required to be withheld or deducted from payments).  Each party shall furnish evidence of such paid taxes as is sufficient to enable the other party to obtain any credits available to it, including original withholding tax certificates. 
+
+13.7	Force Majeure  
+Neither party shall be liable to the other for any delay or non-performance of its obligations hereunder other than the obligation of paying the license fees in the event and to the extent that such delay or non-performance is due to an event of Force Majeure (as defined below).  If any event of Force Majeure results in a delay or non-performance of a party for a period of three (3) months or longer, then either party shall have the right to terminate this Agreement with immediate effect without any liability (except for the obligations of payment arising prior to the event of Force Majeure) towards the other party.  A "Force Majeure" event shall mean an act of God, terrorist attack or other catastrophic event of nature that prevents either party for fulfilling its obligations under this Agreement.
+
+13.8	Notices
+Any notice given by one party to the other shall be deemed properly given and deemed received if specifically acknowledged by the receiving party in writing or when successfully delivered to the recipient by hand, fax, or special courier during normal business hours on a business day to the addresses specified below.  Each communication and document made or delivered by one party to the other party pursuant to this Agreement shall be in the English language or accompanied by a translation thereof.
+
+Notices to Digia shall be given to: 
+Digia Finland Ltd
+    Attn: Qt / Legal
+Valimotie 21
+FI-00380 Helsinki
+Finland
+Fax: +358 10 313 3700
+
+13.9	Export Control
+Licensee acknowledges that the Licensed Software may be subject to export control restrictions of various countries.  Licensee shall fully comply with all applicable export license restrictions and requirements as well as with all laws and regulations relating to the importation of the Licensed Software and/or Modified Software and/or Applications and shall procure all necessary governmental authorizations, including without limitation, all necessary licenses, approvals, permissions or consents, where necessary for the re-exportation of the Licensed Software, Modified Software or Applications.
+
+13.10	Governing Law and Legal Venue
+This Agreement shall be construed and interpreted in accordance with the laws of Finland, excluding its choice of law provisions. Any disputes, controversy or claim  arising out of or relating to this Agreement, or the breach, termination or validity thereof shall be shall be finally settled by arbitration in accordance with the Arbitration Rules of the Central Chamber of Commerce of Finland.   The arbitration tribunal shall consist of one (1), or if either Party so requires, of three (3), arbitrators. The award shall be final and binding and enforceable in any court of competent jurisdiction. The arbitration shall be held in Helsinki, Finland and the process shall be conducted in the English language.
+
+13.11 No Implied License
+There are no implied licenses or other implied rights granted under this Agreement, and all rights, save for those expressly granted hereunder, shall remain with Digia and its licensors.  In addition, no licenses or immunities are granted to the combination of the Licensed Software and/or Modified Software, as applicable, with any other software or hardware not delivered by Digia under this Agreement.
+
+
+ 
+Appendix 1
+
+1. Parts of the Licensed Software that are permitted for distribution ("Redistributables"):
+- The Licensed Software's main and plug-in libraries in object code form
+- The Licensed Software's configuration tool ("qtconfig")
+- The Licensed Software's help tool in object code/executable form ("Qt Assistant")
+- The Licensed Software's internationalization tools in object code/executable form ("Qt Linguist", "lupdate", "lrelease")
+- The Licensed Software's designer tool ("Qt Designer")
+- The Licensed Software's IDE tool ("Qt Creator")
+- The Licensed Software's QML ("Qt Quick") launcher tool in object code/executable form
+
+
+2. Parts of the Licensed Software that are not permitted for distribution include, but are not limited to: 
+- The Licensed Software's source code and header files
+- The Licensed Software's documentation
+- The Licensed Software's tool for writing makefiles ("qmake")
+- The Licensed Software's Meta Object Compiler ("moc")
+- The Licensed Software's User Interface Compiler ("uic" or in the case of Qt Jambi: "juic")
+- The Licensed Software's Resource Compiler ("rcc")
+- The Licensed Software's generator (only in the case of Qt Jambi if applicable)
+- The Licensed Software's Qt SDK and its components
+
+QT COMMERCIAL LICENSE AGREEMENT
+
+
+DIGIA FINLAND LTD | VALIMOTIE 21 | FI-00380 HELSINKI FINLAND | TEL +358 (0) 10
+313 3000 | FAX +358 (0) 10 313 3700
+PLACE OF REGISTERED OFFICE: HELSINKI | VAT REG. | BUSINESS ID 1091248-4 |
+WWW.DIGIA.COM
+
\ No newline at end of file diff --git a/doc/License.html b/doc/License.html new file mode 100644 index 0000000..92fa509 --- /dev/null +++ b/doc/License.html @@ -0,0 +1,481 @@ + + + + GNU General Public License v2.0 - GNU Project - Free Software Foundation (FSF) + + + +

GNU GENERAL PUBLIC LICENSE

+

+Version 2, June 1991 +

+ +
Copyright (C) 1989, 1991 Free Software Foundation, Inc.  
+51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+
+ +

Preamble

+ +

+ The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. +

+ +

+ When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. +

+ +

+ To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. +

+ +

+ For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. +

+ +

+ We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. +

+ +

+ Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. +

+ +

+ Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. +

+ +

+ The precise terms and conditions for copying, distribution and +modification follow. +

+ + +

TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

+ + +

+0. + This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". +

+ +

+Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. +

+ +

+1. + You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. +

+ +

+You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. +

+ +

+2. + You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: +

+ +
+
+
+ a) + You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. +
+
+
+ b) + You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. +
+
+
+ c) + If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) +
+
+ +

+These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. +

+ +

+Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. +

+ +

+In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. +

+ +

+3. + You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: +

+ + + + +
+
+
+ a) + Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, +
+
+
+ b) + Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, +
+
+
+ c) + Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) +
+
+ +

+The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. +

+ +

+If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. +

+ +

+4. + You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. +

+ +

+5. + You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. +

+ +

+6. + Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. +

+ +

+7. + If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. +

+ +

+If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. +

+ +

+It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. +

+ +

+This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. +

+ +

+8. + If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. +

+ +

+9. + The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. +

+ +

+Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. +

+ +

+10. + If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. +

+ +

NO WARRANTY

+ +

+11. + BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. +

+ +

+12. + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. +

+ +

END OF TERMS AND CONDITIONS

+ +

How to Apply These Terms to Your New Programs

+ +

+ If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. +

+ +

+ To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. +

+ +
one line to give the program's name and an idea of what it does.
+Copyright (C) yyyy  name of author
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+ +

+Also add information on how to contact you by electronic and paper mail. +

+ +

+If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: +

+ +
Gnomovision version 69, Copyright (C) year name of author
+Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
+type `show w'.  This is free software, and you are welcome
+to redistribute it under certain conditions; type `show c' 
+for details.
+
+ +

+The hypothetical commands `show w' and `show c' should show +the appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and +`show c'; they could even be mouse-clicks or menu items--whatever +suits your program. +

+ +

+You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: +

+ + +
Yoyodyne, Inc., hereby disclaims all copyright
+interest in the program `Gnomovision'
+(which makes passes at compilers) written 
+by James Hacker.
+
+signature of Ty Coon, 1 April 1989
+Ty Coon, President of Vice
+
+ +

+This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the +GNU Lesser General Public License +instead of this License. +

+ + + \ No newline at end of file diff --git a/doc/Readme.txt b/doc/Readme.txt new file mode 100644 index 0000000..aa56546 --- /dev/null +++ b/doc/Readme.txt @@ -0,0 +1,38 @@ +What is MediaInfo? + + MediaInfo is a convenient unified display of the most relevant technical and tag data for video and audio files. + + +The MediaInfo data display includes: + + Container: format, profile, commercial name of the format, duration, overall bit rate, writing application and library, title, author, director, album, track number, date, duration... + Video: format, codec id, aspect, frame rate, bit rate, color space, chroma subsampling, bit depth, scan type, scan order... + Audio: format, codec id, sample rate, channels, bit depth, language, bit rate... + Text: format, codec id, language of subtitle... + Chapters: count of chapters, list of chapters... + + +MediaInfo analyticals include: + + Container: MPEG-4, QuickTime, Matroska, AVI, MPEG-PS (including unprotected DVD), MPEG-TS (including unprotected Blu-ray), MXF, GXF, LXF, WMV, FLV, Real... + Tags: Id3v1, Id3v2, Vorbis comments, APE tags... + Video: MPEG-1/2 Video, H.263, MPEG-4 Visual (including DivX, XviD), H.264/AVC, Dirac... + Audio: MPEG Audio (including MP3), AC3, DTS, AAC, Dolby E, AES3, FLAC... + Subtitles: CEA-608, CEA-708, DTVCC, SCTE-20, SCTE-128, ATSC/53, CDP, DVB Subtitle, Teletext, SRT, SSA, ASS, SAMI... + + +MediaInfo features include: + + Read many video and audio file formats + View information in different formats (text, sheet, tree, HTML...) + Customise these viewing formats + Export information as text, CSV, HTML... + Graphical user interface, command line interface, or library (.dll/.so/.dylib) versions available + Integrate with the shell (drag 'n' drop, and Context menu) + Internationalisation: display any language on any operating system + Localisation capability (for which volunteers are needed - please contact me!) + + +License: + + It is open-source software - with one exception for Mac App Store GUI - which means that it is free of charge to the end user and developers have freedom to study, to improve and to redistribute the program (BSD license). diff --git a/gui/Dialog.ui b/gui/Dialog.ui new file mode 100644 index 0000000..5d368a9 --- /dev/null +++ b/gui/Dialog.ui @@ -0,0 +1,301 @@ + + + MainWindow + + + + 0 + 0 + 720 + 384 + + + + MediaInfoXP - Minimalist GUI for MediaInfo + + + + :/MediaInfoXP.png:/MediaInfoXP.png + + + + + + + + + + Lucida Console + + + + Qt::ScrollBarAlwaysOff + + + QTextEdit::NoWrap + + + + + + + + + + 150 + 25 + + + + Analyze File.... + + + + :/MediaInfoXP.png:/MediaInfoXP.png + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + + + + + + 91 + 70 + 70 + + + + + + + + + 91 + 70 + 70 + + + + + + + + + 120 + 120 + 120 + + + + + + + + PointingHandCursor + + + (VERSION_INFO) + + + Qt::AlignCenter + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 150 + 25 + + + + Exit Program + + + + :/res/ico_quit.png:/res/ico_quit.png + + + + + + + + + + + + + 0 + 0 + 720 + 21 + + + + + Application + + + + + + + + + Help + + + + + + + + + + + + + + :/res/ico_quit.png:/res/ico_quit.png + + + Exit + + + + + + :/res/ico_info.png:/res/ico_info.png + + + About... + + + + + + :/res/ico_folder.png:/res/ico_folder.png + + + Open Media File... + + + + + + :/res/ico_link.png:/res/ico_link.png + + + MuldeR's OpenSource Projects + + + + + + :/res/ico_link.png:/res/ico_link.png + + + Official MediaInfo Web-Site + + + + + + :/res/ico_clear.png:/res/ico_clear.png + + + Clear Display + + + + + + :/res/ico_link.png:/res/ico_link.png + + + MediaInfo Discussion (Doom9) + + + + + analyzeButton + exitButton + textBrowser + + + + + + + + actionExit + triggered() + MainWindow + close() + + + -1 + -1 + + + 399 + 299 + + + + + exitButton + clicked() + MainWindow + close() + + + 546 + 466 + + + 316 + 244 + + + + + diff --git a/res/ico_clear.png b/res/ico_clear.png new file mode 100644 index 0000000000000000000000000000000000000000..1be37974adf9de2880e568e700cdcc9037c78804 GIT binary patch literal 793 zcmV+!1LpjRP)_K8L+b&88i{a`h`7P#Ww_cAT-3>7iG?d zKQ=FfJTtdc)9<~|e5oamr>PvpaLsiMK% z)`3JKfz0M{+kjr+tJMf=)!zW)RDC`lVzC%#5o2Rx@Or(N z+pwWr_G0Cy#KMLfiChPqPN$_Y0QGvkUkCxe-;Z!O3?8>yEmSHM!)YC#@*XrA4QQHX z0BF760&r5HP@qa>L#*q%0boI`Rx<$XRMi0R97hX46Bz=Guz(YJks&PLZ=UBdyUk`p zsZ`>ej0K>|afib(q9}^d4OeFfM;4ipp)QvTJ3Bi(j$5}tCq9+UX8HLVTi_P?ApdRO zZnqn4=W;oEbYjW^%*@QBNDxgXlO=9ZRaFCIR%heN3`nQbC8{1JXzH(jfvvZ<_c95_ zgTY{*$Kx^fYu?80?k<*>m$`D3z?1*|Or`|_fk8U72%SNQDjC;Ho*|D@?i7hr`}2PR X#`)v2r!)w#00000NkvXXu0mjfQIK%^ literal 0 HcmV?d00001 diff --git a/res/ico_discard.png b/res/ico_discard.png new file mode 100644 index 0000000000000000000000000000000000000000..1514d51a3cf1b67e1c5b9ada36f1fd474e2d214a GIT binary patch literal 655 zcmV;A0&x9_P)uEoyT++I zn$b9r%cFfhHe2K68PkBu*@^<$y+7xQ$wJ~;c5aBx$R=xq*41Wo zhwQus_VOgm0hughj}MhOvs#{>Vg09Y8WxjWUJY5YW zJ?&8eG!59Cz=|E%Ns@013KLWOLV)CObIIj_5{>{#k%TEAMs_GbdDV`x-iYsGH z#=Z{USAQA>NY(}X7=3{K8#D5KR;Vfzpb!Z%f>egXcc4dbT1v5p6tGa?~4~cr@F?*lxpV^g36B#KYBzmnZT=P ztU#cJlp8~0$(9F7oRNX)Cvl||NCS*gXn$uoxwwWOL_|iRZDU%Zz_0slQ_$jLLxRmY zYQN^Gtv{u{{(_hrr|*biyHKPvp-87(y3%oSyAf`6gSqQdvkem?<%kV2VFIy&t*;YR z^XwItnC$Lnb@LeS)+TUb3F<+F@;111vPk~infZG&LxGEul+|^@8c0|rs+7r$%#!LE zr5D8z0$30Mgs&^xY<*ag!SRckT)wd25;?dXeRPlB*e?_;Hrzy)UL(dsw1?<2V)huH zyi4xws{Xj*>4;d`B@z+iV{2a;#ioMj5;iI##sghy=F5nwf&>hoN|`HnUZxu!1c+FT zjea*e84uB==DyhMT;3-T(Gavh~9-=EPu=N`}Ih&YW^IR@kVBB2dh1b*<~=i`|vgv%&02Yx*P)SD11&;F(U0?j>H Ur1R|wc>n+a07*qoM6N<$g6sr4fB*mh literal 0 HcmV?d00001 diff --git a/res/ico_info.png b/res/ico_info.png new file mode 100644 index 0000000000000000000000000000000000000000..12cd1aef900803abba99b26920337ec01ad5c267 GIT binary patch literal 778 zcmV+l1NHogP)BVme|mWaqy4$_pJm?y9KM{-*hp?1+Ey3e-CEDooTa!B;e(Q>TSF?bj>5At13y1p zriN3w3x~5SfZj{@J4M{kp{?=M_Lh2bV+5LH)Q)5W!-ePA$RgE1@5f1cyHki0Y}JyVEYZF(LD$xXlt$7A5CgE@ zpV-&l%vf;=5kZ2-2gi@Y6J&=cuwt>!vJ^#(&n|LcZyUzi6Duj$$hJ1s*HD-#;k-w@ zpdrwAuoDG_N2bvb07G$Zk*?Hc)JLtW4yqOnic_$zO7NZ#l>Fm){;fE?b$IbOaX2fe z0la4g0Dfw2xk7Wi7NapVD8YMPCZu?A1QCK*67dgsvRKBLFtrM>?$%&_lD1882mzdO zWPdw5KWw6IT`m1b_8=lS5jt8D3=RDa=&jWzR-)S@56WMslZ~mKu1)-wpXB>rNBQ>N zU#K`#1B&v|_AQK;7I~B}OdGiUT9LX>f0xm6<;LeP!=vFjPsUQF*wCJ*dO)4YBypgdiuF!=i@6Zyi7F|q#K zz?tlSZULa@t1D?$e;f@b36&N!V2mjOHw|*(^b;|pVbz=yzjpaJj$ zhrpuriKefui_0DvN;1Ymq&%nwWg*IrK!Xz^eJWuq3u2H~0ra?EC@ge%+`A>6mV z9{TYo{=G6 zt@5m|4G+Q2zKv;Ch@O;`PfWArmB5n3gvMsxV&Iu>97{a!2kL74wd@!f_AP^O%_&ND zm}1c*+F;TcH^{p$P_|akvD5o7vmT>HCkP;z;;&+8tDBI;koi9eX`W!oH4`pYaHlFZwV;$>vvfQTw zM-`m&R_SPIBa^FUasC0GCCh%{h`$~db`z&-lFX#%(f>H6JD6Z(sIW`RKE+xOL+?+uQ%q z){?+F%=6pqEH{6=NzusC-*<`PZYiLCGyKD}Z8^V8ul-K=AV@SE1t4~D2*b1(9UUc= zN-;Dv#Ngl{rd7e$ZUPXC##BFmV>$26ZQi?6Po#@{4gllsPbku3Vq${Y+FAf~T}OJb zGWEz9{(zcvI&CUaN&p7GcqMG4&7ULx##68M4k(F4l7Q+Xm&>uSv4N&(w6?a=)YOC{ zoYLN-J?7@-9xGBx007$C+kK7w_2Z$(k&l}jo2#`dO;J#Ipsbc$pS#^Dy3Q&nSeE5x fGMT)t>sS8=`naU3reLNz00000NkvXXu0mjf)bGN+ literal 0 HcmV?d00001 diff --git a/res/ico_qt.png b/res/ico_qt.png new file mode 100644 index 0000000000000000000000000000000000000000..3a1fc4d77ea4a47f8410c4db0ac4e190eaf22e8c GIT binary patch literal 1076 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NSs56Z83KGlTvK*k?ciDi?h93!0EEu3K@GRrqht-0+))TvPmv zV^>^$)v|Q?mz?JQ^VL5#xSakzAwU1xv@d$St9M`OwKwhH_T$-j8&p0pc)I$ztaD0e F0sz6Cv^oF) literal 0 HcmV?d00001 diff --git a/res/ico_quit.png b/res/ico_quit.png new file mode 100644 index 0000000000000000000000000000000000000000..41676a0a5be0f026fb136315fafb6c4566522d7a GIT binary patch literal 693 zcmV;m0!safP)vaG^ z2pyX9GZt*w3IyWpBqouZ9TBDUCjj71ahpsggwSp?!_6p~6Ug^zToTz0k=O|cA@C)B z=4SI+2S7F9CYUB%6Rwf$PD%xpU1zsvH^-J3qhIec&_95xadrGMyZiUG;F`#)xFk#y zurJ!PJ?Af*(aYIc}SHy&e#bYkLxyZiN`;lMHCXuWKOBa9QbyiY}R8)+l!c;Lu zGC@p$z~K6Ij22J0)wsbx511;JB7MDISvY@^uJR9Nq@bi~L`zglHEQK03t2do(0Qs6*PW_{1G!HjEs!rv9U46 z$HzPJ|EKO<)u6Ypk6L#x)$Sg;sx@Y2o4k8D`Z@f|JD)qaVu_iqHj_a!UF&Z3Ql+}r bBu@VX$p^JhV-$eD00000NkvXXu0mjfw@)|D literal 0 HcmV?d00001 diff --git a/res/logo.png b/res/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..267c65f680cee488a7faa52fed7938b40801307a GIT binary patch literal 17788 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 T<|Guc00000NkvXXu0mjf%C;<+ literal 0 HcmV?d00001 diff --git a/src/Config.h b/src/Config.h new file mode 100644 index 0000000..797e1ba --- /dev/null +++ b/src/Config.h @@ -0,0 +1,47 @@ +/////////////////////////////////////////////////////////////////////////////// +// MediaInfoXP +// Copyright (C) 2004-2013 LoRd_MuldeR +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +// +// http://www.gnu.org/licenses/gpl-2.0.txt +/////////////////////////////////////////////////////////////////////////////// + +//Version +static unsigned int mixp_versionMajor = 2; +static unsigned int mixp_versionMinor = 0; + +//MediaInfo Version +static unsigned int mixp_miVersionMajor = 0; +static unsigned int mixp_miVersionMinor = 7; +static unsigned int mixp_miVersionPatch = 63; + +//Build date +static const char *mixp_buildDate = __DATE__; +static const char *mixp_buildTime = __TIME__; + +//Show console +#define MIXP_CONSOLE (0) + +//Debug build +#if defined(_DEBUG) && defined(QT_DEBUG) && !defined(NDEBUG) && !defined(QT_NO_DEBUG) + #define MIXP_DEBUG (1) +#else + #define MIXP_DEBUG (0) +#endif + +//Helper macros +#define MIXP_DELETE_OBJ(PTR) do { if((PTR)) { delete ((PTR)); (PTR) = NULL; } } while (0) +#define QWCHAR(STR) reinterpret_cast(STR.utf16()) diff --git a/src/Main.cpp b/src/Main.cpp new file mode 100644 index 0000000..409e1a7 --- /dev/null +++ b/src/Main.cpp @@ -0,0 +1,446 @@ +/////////////////////////////////////////////////////////////////////////////// +// MediaInfoXP +// Copyright (C) 2004-2013 LoRd_MuldeR +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +// +// http://www.gnu.org/licenses/gpl-2.0.txt +/////////////////////////////////////////////////////////////////////////////// + +//StdLib +#include +#include +#include +#include + +#pragma intrinsic(_InterlockedExchange) + +//Qt +#include +#include +#include +#include +#include + +//Win32 +#define WIN32_LEAN_AND_MEAN +#include +#include +#include +#include + +#ifdef QT_NODLL + #include + Q_IMPORT_PLUGIN(qico) + Q_IMPORT_PLUGIN(qsvg) + Q_IMPORT_PLUGIN(qtga) +#endif + +#include "Config.h" +#include "MainWindow.h" + +/////////////////////////////////////////////////////////////////////////////// +// Debug Console +/////////////////////////////////////////////////////////////////////////////// + +bool g_bHaveConsole = false; + +static void init_console(void) +{ + if(AllocConsole()) + { + int hCrtStdOut = _open_osfhandle((intptr_t) GetStdHandle(STD_OUTPUT_HANDLE), _O_WRONLY); + int hCrtStdErr = _open_osfhandle((intptr_t) GetStdHandle(STD_ERROR_HANDLE), _O_WRONLY); + FILE *hfStdOut = (hCrtStdOut >= 0) ? _fdopen(hCrtStdOut, "wb") : NULL; + FILE *hfStdErr = (hCrtStdErr >= 0) ? _fdopen(hCrtStdErr, "wb") : NULL; + if(hfStdOut) { *stdout = *hfStdOut; std::cout.rdbuf(new std::filebuf(hfStdOut)); } + if(hfStdErr) { *stderr = *hfStdErr; std::cerr.rdbuf(new std::filebuf(hfStdErr)); } + + HWND hwndConsole = GetConsoleWindow(); + if((hwndConsole != NULL) && (hwndConsole != INVALID_HANDLE_VALUE)) + { + HMENU hMenu = GetSystemMenu(hwndConsole, 0); + EnableMenuItem(hMenu, SC_CLOSE, MF_BYCOMMAND | MF_GRAYED); + RemoveMenu(hMenu, SC_CLOSE, MF_BYCOMMAND); + SetWindowPos(hwndConsole, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOZORDER|SWP_FRAMECHANGED); + SetWindowLong(hwndConsole, GWL_STYLE, GetWindowLong(hwndConsole, GWL_STYLE) & (~WS_MAXIMIZEBOX) & (~WS_MINIMIZEBOX)); + SetWindowPos(hwndConsole, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOZORDER|SWP_FRAMECHANGED); + } + + g_bHaveConsole = true; + } +} + +/////////////////////////////////////////////////////////////////////////////// +// Detect TEMP folder +/////////////////////////////////////////////////////////////////////////////// + +QString mixp_getAppDataFolder(void) +{ + typedef HRESULT (WINAPI *SHGetKnownFolderPathFun)(__in const GUID &rfid, __in DWORD dwFlags, __in HANDLE hToken, __out PWSTR *ppszPath); + typedef HRESULT (WINAPI *SHGetFolderPathFun)(__in HWND hwndOwner, __in int nFolder, __in HANDLE hToken, __in DWORD dwFlags, __out LPWSTR pszPath); + + static const int CSIDL_LOCAL_APPDATA = 0x001c; + static const GUID GUID_LOCAL_APPDATA = {0xF1B32785,0x6FBA,0x4FCF,{0x9D,0x55,0x7B,0x8E,0x7F,0x15,0x70,0x91}}; + + static SHGetKnownFolderPathFun SHGetKnownFolderPathPtr = NULL; + static SHGetFolderPathFun SHGetFolderPathPtr = NULL; + + if((!SHGetKnownFolderPathPtr) && (!SHGetFolderPathPtr)) + { + QLibrary kernel32Lib("shell32.dll"); + if(kernel32Lib.load()) + { + SHGetKnownFolderPathPtr = (SHGetKnownFolderPathFun) kernel32Lib.resolve("SHGetKnownFolderPath"); + SHGetFolderPathPtr = (SHGetFolderPathFun) kernel32Lib.resolve("SHGetFolderPathW"); + } + } + + QString folder; + + if(SHGetKnownFolderPathPtr) + { + WCHAR *path = NULL; + if(SHGetKnownFolderPathPtr(GUID_LOCAL_APPDATA, 0x00008000, NULL, &path) == S_OK) + { + //MessageBoxW(0, path, L"SHGetKnownFolderPath", MB_TOPMOST); + QDir folderTemp = QDir(QDir::fromNativeSeparators(QString::fromUtf16(reinterpret_cast(path)))); + if(!folderTemp.exists()) + { + folderTemp.mkpath("."); + } + if(folderTemp.exists()) + { + folder = folderTemp.canonicalPath(); + } + CoTaskMemFree(path); + } + } + else if(SHGetFolderPathPtr) + { + WCHAR *path = new WCHAR[4096]; + if(SHGetFolderPathPtr(NULL, CSIDL_LOCAL_APPDATA, NULL, NULL, path) == S_OK) + { + //MessageBoxW(0, path, L"SHGetFolderPathW", MB_TOPMOST); + QDir folderTemp = QDir(QDir::fromNativeSeparators(QString::fromUtf16(reinterpret_cast(path)))); + if(!folderTemp.exists()) + { + folderTemp.mkpath("."); + } + if(folderTemp.exists()) + { + folder = folderTemp.canonicalPath(); + } + } + delete [] path; + } + + return folder; +} + +QString mixp_getTempFolder() +{ + QString tempFolder; + + static const char *TEMP_STR = "Temp"; + const QString WRITE_TEST_DATA = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua."; + const QString SUB_FOLDER = QUuid::createUuid().toString(); + + //Try the %TMP% or %TEMP% directory first + QDir temp = QDir::temp(); + if(temp.exists()) + { + temp.mkdir(SUB_FOLDER); + if(temp.cd(SUB_FOLDER) && temp.exists()) + { + QFile testFile(QString("%1/~test.tmp").arg(temp.canonicalPath())); + if(testFile.open(QIODevice::ReadWrite)) + { + if(testFile.write(WRITE_TEST_DATA.toLatin1().constData()) >= strlen(WRITE_TEST_DATA.toLatin1().constData())) + { + tempFolder = temp.canonicalPath(); + } + testFile.remove(); + } + } + if(!tempFolder.isEmpty()) + { + return tempFolder; + } + } + + //Create TEMP folder in %LOCALAPPDATA% + QDir localAppData = QDir(mixp_getAppDataFolder()); + if(!localAppData.path().isEmpty()) + { + if(!localAppData.exists()) + { + localAppData.mkpath("."); + } + if(localAppData.exists()) + { + if(!localAppData.entryList(QDir::AllDirs).contains(TEMP_STR, Qt::CaseInsensitive)) + { + localAppData.mkdir(TEMP_STR); + } + if(localAppData.cd(TEMP_STR) && localAppData.exists()) + { + localAppData.mkdir(SUB_FOLDER); + if(localAppData.cd(SUB_FOLDER) && localAppData.exists()) + { + QFile testFile(QString("%1/~test.tmp").arg(localAppData.canonicalPath())); + if(testFile.open(QIODevice::ReadWrite)) + { + if(testFile.write(WRITE_TEST_DATA.toLatin1().constData()) >= strlen(WRITE_TEST_DATA.toLatin1().constData())) + { + tempFolder = localAppData.canonicalPath(); + } + testFile.remove(); + } + } + } + } + if(!tempFolder.isEmpty()) + { + return tempFolder; + } + } + + qFatal("Failed to determine TEMP folder!"); + return QString(); +} + +void mixp_clean_folder(const QString &folderPath) +{ + QDir tempFolder(folderPath); + QFileInfoList entryList = tempFolder.entryInfoList(QDir::AllEntries | QDir::NoDotAndDotDot); + + for(int i = 0; i < entryList.count(); i++) + { + if(entryList.at(i).isDir()) + { + mixp_clean_folder(entryList.at(i).canonicalFilePath()); + } + else + { + for(int j = 0; j < 5; j++) + { + if(QFile::remove(entryList.at(i).canonicalFilePath())) + { + break; + } + } + } + } + + tempFolder.rmdir("."); +} + +/////////////////////////////////////////////////////////////////////////////// +// MAIN function +/////////////////////////////////////////////////////////////////////////////// + +int mixp_main(int argc, char* argv[]) +{ + //Show console? + bool bConsole = MIXP_CONSOLE; + for(int i = 1; i < argc; i++) + { + if(_stricmp(argv[i], "--console") == 0) bConsole = true; + if(_stricmp(argv[i], "--no-console") == 0) bConsole = false; + } + + if(bConsole) init_console(); + + qDebug("MediaInfoXP [%s]", mixp_buildDate); + qDebug("Copyright (c) 2004-%s LoRd_MuldeR . Some rights reserved.", &mixp_buildDate[7]); + qDebug("Built with Qt v%s, running with Qt v%s.\n", QT_VERSION_STR, qVersion()); + + //Get temp folder + const QString tempFolder = mixp_getTempFolder(); + qDebug("TEMP folder is:\n%s\n", QDir::toNativeSeparators(tempFolder).toUtf8().constData()); + + //Create application + QApplication *application = new QApplication(argc, argv); + application->setWindowIcon(QIcon(":/QtTestApp.ico")); + + //Create main window + CMainWindow *mainWindow = new CMainWindow(tempFolder); + mainWindow->show(); + + //Run application + const int exit_code = application->exec(); + qDebug("\nTime to say goodbye... (%d)\n", exit_code); + + //Clean up + MIXP_DELETE_OBJ(mainWindow); + MIXP_DELETE_OBJ(application); + mixp_clean_folder(tempFolder); + + return exit_code; +} + +/////////////////////////////////////////////////////////////////////////////// +// Error handlers +/////////////////////////////////////////////////////////////////////////////// + +void mixp_fatal_exit(const wchar_t *msg) +{ + static volatile long s_lock = 0L; + if(_InterlockedExchange(&s_lock, 1L) == 0) + { + FatalAppExitW(0, msg); + TerminateProcess(GetCurrentProcess(), -1); + } +} + +LONG WINAPI mixp_exception_handler(__in struct _EXCEPTION_POINTERS *ExceptionInfo) +{ + mixp_fatal_exit(L"Unhandeled exception handler invoked, application will exit!"); + return LONG_MAX; +} + +void mixp_invalid_param_handler(const wchar_t* exp, const wchar_t* fun, const wchar_t* fil, unsigned int, uintptr_t) +{ + mixp_fatal_exit(L"Invalid parameter handler invoked, application will exit!"); +} + +/////////////////////////////////////////////////////////////////////////////// +// Message Handler +/////////////////////////////////////////////////////////////////////////////// + +static void mixp_console_color(FILE* file, WORD attributes) +{ + const HANDLE hConsole = (HANDLE)(_get_osfhandle(_fileno(file))); + if((hConsole != NULL) && (hConsole != INVALID_HANDLE_VALUE)) + { + SetConsoleTextAttribute(hConsole, attributes); + } +} + +void mixp_message_handler(QtMsgType type, const char *msg) +{ + if(g_bHaveConsole) + { + static const char *GURU_MEDITATION = "\n\nGURU MEDITATION !!!\n\n"; + + static volatile long s_lock = 0L; + while(_InterlockedExchange(&s_lock, 1L) != 0) __noop; + + UINT oldOutputCP = GetConsoleOutputCP(); + if(oldOutputCP != CP_UTF8) SetConsoleOutputCP(CP_UTF8); + + switch(type) + { + case QtCriticalMsg: + case QtFatalMsg: + fflush(stdout); + fflush(stderr); + mixp_console_color(stderr, FOREGROUND_RED | FOREGROUND_INTENSITY); + fprintf(stderr, GURU_MEDITATION); + fprintf(stderr, "%s\n", msg); + fflush(stderr); + break; + case QtWarningMsg: + mixp_console_color(stderr, FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY); + fprintf(stderr, "%s\n", msg); + fflush(stderr); + break; + default: + mixp_console_color(stderr, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY); + fprintf(stderr, "%s\n", msg); + fflush(stderr); + break; + } + + mixp_console_color(stderr, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED); + if(oldOutputCP != CP_UTF8) SetConsoleOutputCP(oldOutputCP); + + _InterlockedExchange(&s_lock, 0L); + } + + if(type == QtCriticalMsg || type == QtFatalMsg) + { + mixp_fatal_exit(L"The application has encountered a critical error and will exit now!"); + } +} + +/////////////////////////////////////////////////////////////////////////////// +// Applicaton entry point +/////////////////////////////////////////////////////////////////////////////// + +static int _main(int argc, char* argv[]) +{ + if(MIXP_DEBUG) + { + qInstallMsgHandler(mixp_message_handler); + return mixp_main(argc, argv); + } + else + { + int iResult = -1; + try + { + qInstallMsgHandler(mixp_message_handler); + iResult = mixp_main(argc, argv); + } + catch(char *error) + { + fflush(stdout); + fflush(stderr); + fprintf(stderr, "\nGURU MEDITATION !!!\n\nException error message: %s\n", error); + mixp_fatal_exit(L"Unhandeled C++ exception error, application will exit!"); + } + catch(int error) + { + fflush(stdout); + fflush(stderr); + fprintf(stderr, "\nGURU MEDITATION !!!\n\nException error code: 0x%X\n", error); + mixp_fatal_exit(L"Unhandeled C++ exception error, application will exit!"); + } + catch(...) + { + fflush(stdout); + fflush(stderr); + fprintf(stderr, "\nGURU MEDITATION !!!\n"); + mixp_fatal_exit(L"Unhandeled C++ exception error, application will exit!"); + } + return iResult; + } +} + +int main(int argc, char* argv[]) +{ + if(MIXP_DEBUG) + { + return _main(argc, argv); + } + else + { + __try + { + SetUnhandledExceptionFilter(mixp_exception_handler); + _set_invalid_parameter_handler(mixp_invalid_param_handler); + return _main(argc, argv); + } + __except(1) + { + fflush(stdout); + fflush(stderr); + fprintf(stderr, "\nGURU MEDITATION !!!\n\nUnhandeled structured exception error! [code: 0x%X]\n", GetExceptionCode()); + mixp_fatal_exit(L"Unhandeled structured exception error, application will exit!"); + } + } +} diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp new file mode 100644 index 0000000..ba3ef98 --- /dev/null +++ b/src/MainWindow.cpp @@ -0,0 +1,475 @@ +/////////////////////////////////////////////////////////////////////////////// +// MediaInfoXP +// Copyright (C) 2004-2013 LoRd_MuldeR +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +// +// http://www.gnu.org/licenses/gpl-2.0.txt +/////////////////////////////////////////////////////////////////////////////// + +#include "MainWindow.h" + +//UIC includes +#include "../tmp/Common/uic/Dialog.h" + +//Qt includes +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//Win32 +#define WIN32_LEAN_AND_MEAN +#include + +//Internal +#include "Config.h" + +//Macros +#define SET_FONT_BOLD(WIDGET,BOLD) { QFont _font = WIDGET->font(); _font.setBold(BOLD); WIDGET->setFont(_font); } +#define SET_TEXT_COLOR(WIDGET,COLOR) { QPalette _palette = WIDGET->palette(); _palette.setColor(QPalette::WindowText, (COLOR)); _palette.setColor(QPalette::Text, (COLOR)); WIDGET->setPalette(_palette); } + +//////////////////////////////////////////////////////////// +// Constructor +//////////////////////////////////////////////////////////// + +const char *LINK_MULDER = "http://muldersoft.com/"; +const char *LINK_MEDIAINFO = "http://mediainfo.sourceforge.net/en"; +const char *LINK_DISCUSS = "http://forum.doom9.org/showthread.php?t=96516"; + +CMainWindow::CMainWindow(const QString &tempFolder, QWidget *parent) +: + QMainWindow(parent), + m_tempFolder(tempFolder), + ui(new Ui::MainWindow) +{ + //Init UI + qApp->setStyle(QStyleFactory::create("plastique")); + ui->setupUi(this); + setMinimumSize(this->size()); + + //Setup links + ui->actionLink_MuldeR->setData(QVariant(QString::fromLatin1(LINK_MULDER))); + ui->actionLink_MediaInfo->setData(QVariant(QString::fromLatin1(LINK_MEDIAINFO))); + ui->actionLink_Discuss->setData(QVariant(QString::fromLatin1(LINK_DISCUSS))); + + //Setup connections + connect(ui->analyzeButton, SIGNAL(clicked()), this, SLOT(analyzeButtonClicked())); + connect(ui->actionOpen, SIGNAL(triggered()), this, SLOT(analyzeButtonClicked())); + connect(ui->actionClear, SIGNAL(triggered()), this, SLOT(clearButtonClicked())); + connect(ui->actionLink_MuldeR, SIGNAL(triggered()), this, SLOT(linkTriggered())); + connect(ui->actionLink_MediaInfo, SIGNAL(triggered()), this, SLOT(linkTriggered())); + connect(ui->actionLink_Discuss, SIGNAL(triggered()), this, SLOT(linkTriggered())); + connect(ui->actionAbout, SIGNAL(triggered()), this, SLOT(showAboutScreen())); + ui->versionLabel->installEventFilter(this); + + //Create label + m_floatingLabel = new QLabel(ui->textBrowser); + m_floatingLabel->setText(">> You can drop any type of media files here <<"); + m_floatingLabel->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); + m_floatingLabel->show(); + SET_TEXT_COLOR(m_floatingLabel, Qt::darkGray); + SET_FONT_BOLD(m_floatingLabel, true); + + //Clear + m_mediaInfoPath.clear(); + m_mediaInfoHandle = INVALID_HANDLE_VALUE; + m_process = NULL; +} + +//////////////////////////////////////////////////////////// +// Destructor +//////////////////////////////////////////////////////////// + +CMainWindow::~CMainWindow(void) +{ + if(m_mediaInfoHandle != INVALID_HANDLE_VALUE) + { + CloseHandle(m_mediaInfoHandle); + m_mediaInfoHandle = INVALID_HANDLE_VALUE; + } + MIXP_DELETE_OBJ(m_process); + MIXP_DELETE_OBJ(m_floatingLabel); +} + +//////////////////////////////////////////////////////////// +// EVENTS +//////////////////////////////////////////////////////////// + +void CMainWindow::showEvent(QShowEvent *event) +{ + QMainWindow::showEvent(event); + resize(this->minimumSize()); + ui->versionLabel->setText(QString("v%1 (%2)").arg(QString().sprintf("%u.%02u", mixp_versionMajor, mixp_versionMinor), getBuildDate().toString(Qt::ISODate))); + resizeEvent(NULL); + setAcceptDrops(true); +} + +void CMainWindow::closeEvent(QCloseEvent *event) +{ + if(m_process) + { + if(m_process->state() != QProcess::NotRunning) + { + event->ignore(); + } + } +} + +void CMainWindow::resizeEvent(QResizeEvent *event) +{ + if(event) + { + QMainWindow::resizeEvent(event); + } + if(const QWidget *const viewPort = ui->textBrowser->viewport()) + { + m_floatingLabel->setGeometry(0, 0, viewPort->width(), viewPort->height()); + } +} + +void CMainWindow::dragEnterEvent(QDragEnterEvent *event) +{ + bool accept[2] = {false, false}; + + foreach(const QString &fmt, event->mimeData()->formats()) + { + accept[0] = accept[0] || fmt.contains("text/uri-list", Qt::CaseInsensitive); + accept[1] = accept[1] || fmt.contains("FileNameW", Qt::CaseInsensitive); + } + + if(accept[0] && accept[1]) + { + event->acceptProposedAction(); + } +} + +void CMainWindow::dropEvent(QDropEvent *event) +{ + QStringList droppedFiles; + QList urls = event->mimeData()->urls(); + + while(!urls.isEmpty()) + { + QUrl currentUrl = urls.takeFirst(); + QFileInfo file(currentUrl.toLocalFile()); + if(file.exists() && file.isFile()) + { + m_droppedFile = file.canonicalFilePath(); + QTimer::singleShot(0, this, SLOT(handleDroppedFile())); + break; + } + } +} + +bool CMainWindow::eventFilter(QObject *o, QEvent *e) +{ + if((o == ui->versionLabel) && (e->type() == QEvent::MouseButtonPress)) + { + QTimer::singleShot(0, this, SLOT(showAboutScreen())); + return true; + } + return QMainWindow::eventFilter(o, e); +} + +//////////////////////////////////////////////////////////// +// SLOTS +//////////////////////////////////////////////////////////// + +void CMainWindow::analyzeButtonClicked(void) +{ + const QString selectedFile = QFileDialog::getOpenFileName(this, tr("Select file to analyze..."), QString(), tr("All supported media files (*.*)")); + if(!selectedFile.isEmpty()) + { + analyzeFile(selectedFile); + } +} + +void CMainWindow::clearButtonClicked(void) +{ + if(m_process) + { + if(m_process->state() != QProcess::NotRunning) + { + return; + } + } + + ui->textBrowser->clear(); + m_floatingLabel->show(); +} + +void CMainWindow::outputAvailable(void) +{ + if(m_process) + { + while(m_process->canReadLine()) + { + QByteArray line = m_process->readLine(); + ui->textBrowser->append(QString::fromUtf8(line).trimmed()); + } + } +} + +void CMainWindow::processStarted(void) +{ + ui->textBrowser->clear(); +} + +void CMainWindow::processFinished(void) +{ + outputAvailable(); + ui->analyzeButton->setEnabled(true); + ui->exitButton->setEnabled(true); + ui->textBrowser->verticalScrollBar()->setValue(0); + ui->textBrowser->horizontalScrollBar()->setValue(0); +} + +void CMainWindow::linkTriggered(void) +{ + QObject *obj = QObject::sender(); + if(QAction *action = dynamic_cast(obj)) + { + QDesktopServices::openUrl(QUrl(action->data().toString())); + } +} + +void CMainWindow::showAboutScreen(void) +{ + QString text; + + text += QString().sprintf("MediaInfoXP v%u.%02u - Simple GUI for MediaInfo
", mixp_versionMajor, mixp_versionMinor); + text += QString().sprintf("Copyright (c) 2004-%04d LoRd_MuldeR <mulder2@gmx.de>. Some rights reserved.
", qMax(getBuildDate().year(),QDate::currentDate().year())); + text += QString().sprintf("Built on %s at %s, using Qt Framework v%s.

", getBuildDate().toString(Qt::ISODate).toLatin1().constData(), mixp_buildTime, qVersion()); + text += QString().sprintf("This program is free software: you can redistribute it and/or modify
"); + text += QString().sprintf("it under the terms of the GNU General Public License <http://www.gnu.org/>.
"); + text += QString().sprintf("Note that this program is distributed with ABSOLUTELY NO WARRANTY.

"); + text += QString().sprintf("Please check the web-site at %s for updates !!!
", LINK_MULDER, LINK_MULDER); + text += QString().sprintf("

"); + text += QString().sprintf("This application is powered by MediaInfo v%u.%u.%02u
", mixp_miVersionMajor, mixp_miVersionMinor, mixp_miVersionPatch); + text += QString().sprintf("Free and OpenSource tool for displaying technical information about media files.
"); + text += QString().sprintf("Copyright (c) 2002-2013 MediaArea.net SARL. All rights reserved.

"); + text += QString().sprintf("Redistribution and use is permitted according to the (2-Clause) BSD License.
"); + text += QString().sprintf("Please see %s for more information.
", LINK_MEDIAINFO, LINK_MEDIAINFO); + + QMessageBox aboutBox(this); + aboutBox.setIconPixmap(QIcon(":/res/logo.png").pixmap(64,64)); + aboutBox.setWindowTitle(tr("About...")); + aboutBox.setText(text.replace("-", "−")); + if(QPushButton *btn = aboutBox.addButton(tr("About Qt"), QMessageBox::NoRole)) + { + btn->setIcon(QIcon(":/res/ico_qt.png")); + btn->setMinimumWidth(120); + } + if(QPushButton *btn = aboutBox.addButton(tr("Discard"), QMessageBox::NoRole)) + { + btn->setIcon(QIcon(":/res/ico_discard.png")); + btn->setMinimumWidth(104); + aboutBox.setEscapeButton(btn); + } + + forever + { + const int ret = aboutBox.exec(); + if(ret == 0) + { + QMessageBox::aboutQt(this); + continue; + } + break; + } +} + +void CMainWindow::handleDroppedFile(void) +{ + if(!m_droppedFile.isEmpty()) + { + analyzeFile(m_droppedFile); + m_droppedFile.clear(); + } +} + +//////////////////////////////////////////////////////////// +// PRIVATE FUNCTIONS +//////////////////////////////////////////////////////////// + +QDate CMainWindow::getBuildDate(void) +{ + QDate buildDate(2000, 1, 1); + + static const char *months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; + + int date[3] = {0, 0, 0}; char temp[12] = {'\0'}; + strncpy_s(temp, 12, mixp_buildDate, _TRUNCATE); + + if(strlen(temp) == 11) + { + temp[3] = temp[6] = '\0'; + date[2] = atoi(&temp[4]); + date[0] = atoi(&temp[7]); + + for(int j = 0; j < 12; j++) + { + if(!_strcmpi(&temp[0], months[j])) + { + date[1] = j+1; + break; + } + } + + buildDate = QDate(date[0], date[1], date[2]); + } + + return buildDate; +} + +#define VALIDATE_MEDIAINFO(HANDLE) do \ +{ \ + if(HANDLE != INVALID_HANDLE_VALUE) \ + { \ + QByteArray buffer(mediaInfoRes.size(), '\0'); DWORD bytesRead = 0; \ + if(GetFileSize(HANDLE, NULL) == mediaInfoRes.size()) \ + { \ + SetFilePointer(HANDLE, 0L, NULL, FILE_BEGIN); \ + ReadFile(HANDLE, buffer.data(), mediaInfoRes.size(), &bytesRead, NULL); \ + } \ + if(memcmp(buffer.constData(), mediaInfoRes.data(), mediaInfoRes.size()) != 0) \ + { \ + qWarning("MediaInfo binary failed to validate!"); \ + m_mediaInfoPath.clear(); \ + } \ + } \ +} \ +while(0) + +QString CMainWindow::getMediaInfoPath(void) +{ + QResource mediaInfoRes(":/res/MediaInfo.i386.exe"); + if(!mediaInfoRes.isValid()) + { + qFatal("MediaInfo resource could not be initialized!"); + return QString(); + } + + //Already existsing? + if(!m_mediaInfoPath.isEmpty()) + { + QFileInfo mediaInfoNfo(m_mediaInfoPath); + if(!(mediaInfoNfo.exists() && mediaInfoNfo.isFile())) + { + qWarning("MediaInfo binary does NOT seem to exist any longer!\n"); + m_mediaInfoPath.clear(); + } + } + + //Validate file content + VALIDATE_MEDIAINFO(m_mediaInfoHandle); + + //Extract MediaInfo + if(m_mediaInfoPath.isEmpty()) + { + qDebug("MediaInfo binary not existing yet, going to extract now...\n"); + if(m_mediaInfoHandle != INVALID_HANDLE_VALUE) + { + CloseHandle(m_mediaInfoHandle); + m_mediaInfoHandle = INVALID_HANDLE_VALUE; + } + QString path = QString("%1/MediaInfo.exe").arg(m_tempFolder); + QFile mediaInfoFile(path); + if(mediaInfoFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) + { + if(mediaInfoFile.write(reinterpret_cast(mediaInfoRes.data()), mediaInfoRes.size()) == mediaInfoRes.size()) + { + m_mediaInfoPath = path; + qDebug("MediaInfo path is:\n%s\n", m_mediaInfoPath.toUtf8().constData()); + } + else + { + qWarning("Failed to write data to MediaInfo binary file!\n"); + } + mediaInfoFile.close(); + } + else + { + qWarning("Failed to open MediaInfo binary for writing!\n"); + } + } + + //Open file for reading + if((!m_mediaInfoPath.isEmpty()) && (m_mediaInfoHandle == INVALID_HANDLE_VALUE)) + { + m_mediaInfoHandle = CreateFileW(QWCHAR(QDir::toNativeSeparators(m_mediaInfoPath)), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0); + if(m_mediaInfoHandle == INVALID_HANDLE_VALUE) + { + qWarning("Failed to open the MediaInfo binary for reading!\n"); + m_mediaInfoPath.clear(); + } + } + + //Validate file content + VALIDATE_MEDIAINFO(m_mediaInfoHandle); + + //Failed? + if(m_mediaInfoPath.isEmpty()) + { + QMessageBox::critical(this, tr("Failure"), tr("Error: Failed to extract MediaInfo binary!"), QMessageBox::Ok); + } + + return m_mediaInfoPath; +} + +bool CMainWindow::analyzeFile(const QString &filePath) +{ + //Create process, if not done yet + if(!m_process) + { + m_process = new QProcess(); + m_process->setProcessChannelMode(QProcess::MergedChannels); + m_process->setReadChannel(QProcess::StandardOutput); + connect(m_process, SIGNAL(readyReadStandardError()), this, SLOT(outputAvailable())); + connect(m_process, SIGNAL(readyReadStandardOutput()), this, SLOT(outputAvailable())); + connect(m_process, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(processFinished())); + connect(m_process, SIGNAL(error(QProcess::ProcessError)), this, SLOT(processFinished())); + connect(m_process, SIGNAL(started()), this, SLOT(processStarted())); + } + + //Still running? + if(m_process->state() != QProcess::NotRunning) + { + qWarning("Process is still running!\n"); + return false; + } + + //Lookup MediaInfo path + const QString mediaInfoPath = getMediaInfoPath(); + if(mediaInfoPath.isEmpty()) + { + return false; + } + + qDebug("Analyzing media file:\n%s\n", filePath.toUtf8().constData()); + m_process->start(mediaInfoPath, QStringList() << QDir::toNativeSeparators(filePath)); + + m_floatingLabel->hide(); + ui->analyzeButton->setEnabled(true); + ui->exitButton->setEnabled(true); + + return true; +} diff --git a/src/MainWindow.h b/src/MainWindow.h new file mode 100644 index 0000000..5ac9611 --- /dev/null +++ b/src/MainWindow.h @@ -0,0 +1,75 @@ +/////////////////////////////////////////////////////////////////////////////// +// MediaInfoXP +// Copyright (C) 2004-2013 LoRd_MuldeR +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +// +// http://www.gnu.org/licenses/gpl-2.0.txt +/////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include +#include + +//UIC forward declartion +namespace Ui { + class MainWindow; +} +class QProcess; +class QLabel; +typedef void *HANDLE; + +//MainWindow class +class CMainWindow: public QMainWindow +{ + Q_OBJECT + +public: + CMainWindow(const QString &tempFolder, QWidget *parent = 0); + ~CMainWindow(void); + +private slots: + void analyzeButtonClicked(void); + void clearButtonClicked(void); + void outputAvailable(void); + void processStarted(void); + void processFinished(void); + void linkTriggered(void); + void showAboutScreen(void); + void handleDroppedFile(void); + +protected: + virtual void showEvent(QShowEvent *event); + virtual void closeEvent(QCloseEvent *event); + virtual void resizeEvent(QResizeEvent *event); + virtual void dragEnterEvent(QDragEnterEvent *event); + virtual void dropEvent(QDropEvent *event); + virtual bool eventFilter(QObject *o, QEvent *e); + +private: + Ui::MainWindow *ui; //for Qt UIC + + const QString &m_tempFolder; + QString m_mediaInfoPath; + HANDLE m_mediaInfoHandle; + QProcess *m_process; + QLabel *m_floatingLabel; + QString m_droppedFile; + + QDate getBuildDate(void); + QString getMediaInfoPath(void); + bool analyzeFile(const QString &filePath); +};